4:
4-1
I tried something clever and was punished for my hubris, but it turned out ok.
I treated the input as a list of strings and searched for "XMAS" and "SAMX", rotating and transposing the list to scan for vertical and diagonal words.
In my arrogance, I thought I could do the diagonal rotation easily, but I was very wrong. I got it out in the end, though.
4-2
this was easier than 4-1. An O(n^2^) solution just scanning for X-MAS was good enough. Maybe there was a more clever solution that used, i dunno, string hashing or something but whatever.