const matchEitherDir(a) = fn(b) = all(a .== b) || all(reverse(a) .== b) const d = [ collect(line) for line in readlines("input/4") ] const size = length(d) partOne, partTwo = 0, 0 for y in 1:size for x in 1:size grid(dirs, range) = ( ( try d[y+i*u][x+i*v] catch end for i in range ) for (u,v) in dirs ) global partOne += count(matchEitherDir(collect("XMAS")), grid([ (0, 1), (1, 0), (1, 1), (-1, 1) ], 0:3)) global partTwo += all(matchEitherDir(collect("MAS")), grid([ (-1, 1), (1, 1) ], -1:1)) end end @show partOne, partTwo