#!/usr/bin/env ruby problem = 4 input = File.readlines("#{problem}.input").map { _1.chomp.chars }.reject { _1.empty? } #input = DATA.read.split("\n").map(&:chars) mas = [["M", "M", "S", "S"], ["M", "S", "M", "S"], ["S", "M", "S", "M"], ["S", "S", "M", "M"]] x_mas = 0 matches = [] (1...input.size-1).each do |y| (1...input.first.size-1).each do |x| next unless input[y][x] == "A" corners = [ input.dig(y-1, x-1), input.dig(y-1, x+1), input.dig(y+1, x-1), input.dig(y+1, x+1) ] if match = mas.find { corners == _1 } matches << [y,x] x_mas += 1 end end end relevant = matches.map do |match| [ match, [match[0] - 1, match[1] - 1], [match[0] - 1, match[1] + 1], [match[0] + 1, match[1] - 1], [match[0] + 1, match[1] + 1] ] end.flatten(1) # input.each_with_index do |_, y| # input[y].each_with_index do |v, x| # if relevant.include?([y,x]) # print v # else # print "." # end # end # puts # end p x_mas # wrong # - 1968 __END__ MMMSXXMASM MSAMXMSMSA AMXSXMAAMM MSAMASMSMX XMASAMXAMM XXAMMXXAMA SMSMSASXSS SAXAMASAAA MAMMMXMMMM MXMXAXMASX