AoC 2024/04
Mix.install([
{:kino, "~> 0.14.2"}
])
Section
input = Kino.Input.textarea("input")
defmodule Day4 do
def parse_input(input) do
input
|> String.split("\n")
|> Enum.map(fn line -> String.graphemes(line) end)
end
def solve1(input) do
input
|> parse_input()
|> xmas_count()
end
defp xmas_count(grid) do
horizontal_count =
grid
|> Enum.map(&Enum.join/1)
|> Enum.map(&row_count/1)
|> Enum.sum()
vertical_count =
grid
|> transpose()
|> Enum.map(&Enum.join/1)
|> Enum.map(&row_count/1)
|> Enum.sum()
row_count = Enum.count(grid)
diagonal_left_right_count =
Enum.map(0..(row_count-3), fn col ->
Enum.map(0..(row_count-1-col), fn row ->
Enum.at(grid, row) |> Enum.at(col+row)
end)
|> Enum.join()
end)
|> Enum.map(&row_count/1)
|> Enum.sum()
diagonal_right_left_count =
Enum.map((row_count-1)..2, fn col ->
Enum.map(0..col, fn row ->
Enum.at(grid, row) |> Enum.at(col - row)
end)
|> Enum.join()
end)
|> Enum.map(&row_count/1)
|> Enum.sum()
diagonal_right_left_bottom_count =
Enum.map(1..(row_count-1), fn col ->
Enum.map((row_count-1)..col, fn row ->
Enum.at(grid, row) |> Enum.at((row_count-1)-row+col)
end)
|> Enum.join()
end)
|> Enum.map(&row_count/1)
|> Enum.sum()
diagonal_left_right_bottom_count =
Enum.map((row_count-1-1)..2, fn col ->
Enum.map((row_count-1)..(row_count-1-col), fn row ->
Enum.at(grid, row) |> Enum.at(col-abs(row_count-1-row))
end)
|> Enum.join()
end)
|> Enum.map(&row_count/1)
|> Enum.sum()
horizontal_count + vertical_count + diagonal_left_right_count + diagonal_right_left_count +
diagonal_right_left_bottom_count + diagonal_left_right_bottom_count
end
defp row_count(row) do
left_right_count = xmass_count(row)
right_left_count = xmass_count(row |> String.reverse())
left_right_count + right_left_count
end
defp xmass_count(string) do
string
|> :binary.matches("XMAS")
|> Enum.count()
end
defp transpose(grid) do
Enum.zip_with(grid, &Function.identity/1)
end
def solve2(input) do
input
|> parse_input()
|> mas_count()
end
defp mas_count(grid) do
row_count = Enum.count(grid)
diagonal_left_right_count =
Enum.map(0..(row_count-3), fn col ->
Enum.map(0..(row_count-1-col), fn row ->
Enum.at(grid, row) |> Enum.at(col+row)
end)
|> Enum.join()
end)
|> Enum.map(&row_count2/1)
|> Enum.sum()
diagonal_right_left_count =
Enum.map((row_count-1)..2, fn col ->
Enum.map(0..col, fn row ->
Enum.at(grid, row) |> Enum.at(col - row)
end)
|> Enum.join()
end)
|> Enum.map(&row_count/1)
|> Enum.sum()
diagonal_right_left_bottom_count =
Enum.map(1..(row_count-1), fn col ->
Enum.map((row_count-1)..col, fn row ->
Enum.at(grid, row) |> Enum.at((row_count-1)-row+col)
end)
|> Enum.join()
end)
|> Enum.map(&row_count/1)
|> Enum.sum()
diagonal_left_right_bottom_count =
Enum.map((row_count-1-1)..2, fn col ->
Enum.map((row_count-1)..(row_count-1-col), fn row ->
Enum.at(grid, row) |> Enum.at(col-abs(row_count-1-row))
end)
|> Enum.join()
end)
|> Enum.map(&row_count/1)
|> Enum.sum()
diagonal_left_right_count + diagonal_right_left_count +
diagonal_right_left_bottom_count + diagonal_left_right_bottom_count
end
defp row_count2(row) do
left_right_count = xmass2_count(row)
right_left_count = xmass2_count(row |> String.reverse())
left_right_count + right_left_count
end
defp xmass2_count(string) do
string
|> :binary.matches("MAS") |> IO.inspect(label: "MAS")
|> Enum.count()
end
end
{:module, Day4, <<70, 79, 82, 49, 0, 0, 31, ...>>, {:xmass2_count, 1}}
solve1
Kino.Input.read(input)
|> Day4.solve1()
2613
grid = Kino.Input.read(input)
|> Day4.parse_input()
[
["A", "A", "M", "X", "M", "A", "S", "A", "S", "M", "X", "S", "A", "M", "X", "X", "S", "A", "M",
"S", "A", "M", "X", "X", "S", "X", "M", "M", "S", "M", "M", "S", "X", "S", "A", "S", "X", "S",
"X", "S", "S", "S", "X", "S", "A", "M", "X", "X", "X", ...],
["A", "X", "M", "A", "S", "X", "M", "A", "A", "S", "A", "M", "M", "M", "S", "M", "S", "A", "M",
"S", "A", "M", "X", "M", "A", "X", "M", "A", "A", "A", "M", "X", "M", "A", "S", "A", "A", "M",
"M", "M", "A", "A", "A", "M", "M", "X", "M", "A", ...],
["X", "M", "S", "M", "M", "A", "M", "X", "M", "M", "S", "M", "A", "A", "A", "A", "M", "A", "M",
"S", "A", "M", "X", "A", "M", "A", "M", "S", "S", "S", "M", "X", "A", "M", "M", "M", "S", "M",
"A", "M", "M", "M", "M", "M", "S", "A", "S", ...],
["S", "A", "M", "X", "S", "A", "M", "S", "X", "M", "A", "S", "M", "S", "S", "M", "S", "M", "M",
"M", "M", "M", "M", "A", "M", "M", "M", "M", "A", "M", "A", "S", "M", "X", "S", "A", "A", "M",
"S", "M", "M", "A", "M", "X", "S", "A", ...],
["A", "S", "A", "A", "S", "X", "M", "M", "A", "X", "A", "X", "M", "A", "X", "X", "A", "X", "A",
"X", "A", "S", "A", "M", "X", "A", "A", "X", "M", "M", "M", "M", "M", "A", "M", "X", "S", "X",
"M", "A", "S", "X", "S", "M", "M", ...],
["M", "M", "M", "M", "S", "A", "X", "S", "A", "M", "M", "X", "S", "A", "S", "M", "M", "S", "M",
"S", "A", "X", "M", "A", "S", "M", "S", "M", "X", "A", "X", "A", "M", "X", "M", "X", "X", "A",
"S", "A", "M", "X", "A", "M", ...],
["X", "M", "A", "M", "X", "M", "X", "M", "A", "S", "X", "A", "M", "M", "S", "A", "X", "A", "A",
"M", "A", "M", "S", "A", "S", "M", "X", "X", "S", "X", "S", "X", "S", "A", "M", "X", "M", "A",
"M", "S", "M", "S", "A", ...],
["S", "S", "M", "S", "A", "X", "S", "M", "A", "S", "M", "M", "M", "A", "S", "M", "M", "M", "M",
"M", "X", "M", "M", "A", "S", "A", "M", "A", "S", "A", "A", "M", "S", "A", "S", "A", "M", "X",
"M", "A", "M", "M", ...],
["A", "A", "A", "M", "X", "M", "X", "M", "A", "X", "A", "X", "M", "X", "X", "X", "X", "X", "X",
"X", "X", "X", "M", "M", "M", "X", "M", "A", "M", "X", "M", "X", "M", "A", "S", "X", "M", "X",
"S", "A", "S", ...],
["M", "M", "M", "M", "S", "S", "X", "M", "A", "S", "M", "X", "M", "A", "S", "M", "M", "M", "X",
"S", "X", "M", "M", "M", "A", "X", "M", "S", "M", "S", "X", "A", "M", "M", "M", "X", "M", "A",
"S", "A", ...],
["X", "M", "A", "A", "M", "A", "A", "M", "A", "M", "M", "A", "X", "A", "A", "A", "A", "X", "A",
"M", "M", "A", "A", "M", "A", "M", "M", "M", "A", "X", "M", "X", "S", "A", "A", "A", "M", "A",
"M", ...],
["M", "S", "M", "S", "S", "S", "S", "M", "M", "S", "X", "M", "M", "M", "S", "S", "X", "M", "M",
"S", "A", "S", "X", "S", "S", "M", "S", "M", "M", "M", "M", "M", "M", "M", "S", "M", "M", "A",
...],
["X", "A", "A", "A", "A", "A", "X", "X", "A", "A", "M", "S", "X", "M", "A", "M", "X", "X", "M",
"A", "M", "M", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "X", "A", "X", "A", "X", ...],
["S", "M", "S", "M", "M", "M", "M", "S", "M", "X", "M", "X", "A", "M", "A", "S", "M", "M", "S",
"S", "M", "M", "M", "M", "M", "M", "M", "X", "M", "S", "S", "S", "M", "S", "S", "M", ...],
["S", "A", "M", "X", "M", "A", "M", "S", "M", "S", "M", "X", "A", "M", "A", "M", "A", "A", "X",
"A", "S", "A", "A", "X", "X", "X", "S", "A", "A", "A", "A", "A", "A", "A", "X", ...],
["S", "A", "M", "X", "S", "A", "S", "X", "A", "S", "A", "A", "S", "M", "S", "M", "M", "M", "M",
"M", "S", "X", "X", "S", "A", "A", "S", "M", "M", "M", "S", "M", "M", "M", ...],
["M", "A", "M", "X", "S", "S", "S", "M", "X", "M", "A", "M", "M", "A", "A", "X", "S", "X", "M",
"X", "X", "X", "X", "M", "X", "M", "M", "A", "S", "A", "X", "X", "S", ...],
["S", "S", "M", "M", "M", "A", "X", "A", "M", "X", "M", "M", "M", "M", "M", "M", "M", "A", "X",
"A", "X", "S", "S", "M", "M", "X", "S", "A", "M", "X", "M", "M", ...],
["M", "A", "S", "X", "M", "M", "M", "X", "A", "A", "M", "A", "X", "M", "A", "S", "M", "M", "M",
"X", "S", "A", "A", "A", "A", "X", "M", "A", "M", "X", "M", ...],
["S", "A", "M", "X", "M", "X", "M", "X", "S", "X", "S", "A", "M", "A", "A", "A", "A", "A", "A",
"X", "A", "M", "M", "M", "M", "X", "A", "X", "M", "A", ...],
["M", "A", "S", "A", "S", "A", "S", "M", "M", "A", "S", "M", "S", "M", "M", "X", "S", "M", "M",
"X", "M", "X", "M", "M", "M", "M", "M", "M", "M", ...],
["M", "X", "S", "A", "S", "A", "M", "A", "X", "A", "X", "X", "A", "X", "M", "X", "M", "A", "M",
"X", "M", "A", "X", "S", "A", "A", "X", "A", ...],
["X", "X", "M", "M", "M", "M", "S", "S", "M", "M", "S", "S", "M", "X", "X", "A", "X", "M", "A",
"X", "X", "A", "X", "X", "X", "M", "X", ...],
["X", "M", "A", "S", "A", "M", "X", "M", "A", "X", "A", "A", "A", "A", "M", "S", "M", "S", "M",
"S", "M", "S", "X", "S", "A", "S", ...],
["X", "S", "A", "M", "X", "S", "A", "S", "M", "M", "M", "S", "M", "M", "M", "X", "A", "A", "A",
"X", "A", "A", "A", "X", "A", ...],
["M", "M", "A", "S", "X", "M", "A", "S", "X", "A", "X", "A", "X", "X", "A", "M", "S", "M", "S",
"M", "S", "M", "A", "M", ...],
["A", "X", "A", "M", "A", "M", "A", "M", "M", "S", "X", "M", "S", "M", "S", "M", "A", "X", "X",
"A", "X", "X", "M", ...],
["S", "M", "S", "S", "M", "M", "A", "S", "X", "M", "A", "X", "X", "A", "A", "X", "M", "S", "M",
"X", "M", "A", ...],
["X", "M", "A", "A", "A", "S", "X", "S", "A", "S", "A", "M", "M", "S", "M", "X", "S", "A", "X",
"A", "X", ...],
["M", "M", "M", "S", "M", "M", "X", "M", "M", "M", "M", "M", "X", "X", "A", "X", "S", "A", "M",
"M", ...],
["S", "A", "A", "X", "A", "M", "A", "M", "X", "A", "M", "X", "X", "M", "S", "M", "M", "A", "M",
...],
["M", "M", "X", "S", "A", "M", "A", "X", "S", "A", "S", "A", "M", "X", "X", "A", "S", "A", ...],
["X", "X", "A", "S", "A", "M", "A", "M", "X", "X", "M", "A", "S", "A", "S", "M", "S", ...],
["S", "M", "M", "S", "X", "M", "M", "M", "S", "M", "S", "X", "M", "A", "S", "A", ...],
["S", "A", "X", "X", "M", "A", "M", "A", "A", "A", "S", "M", "M", "A", "M", ...],
["S", "X", "M", "A", "S", "A", "M", "S", "S", "M", "M", "S", "M", "X", ...],
["M", "A", "M", "X", "M", "A", "M", "A", "A", "A", "A", "S", "X", ...],
["S", "A", "M", "X", "S", "S", "M", "S", "S", "M", "M", "S", ...],
["S", "A", "S", "A", "A", "A", "A", "A", "A", "M", "X", ...],
["S", "A", "M", "X", "S", "M", "M", "S", "S", "M", ...],
["M", "X", "M", "X", "X", "X", "M", "X", "M", ...],
["S", "M", "M", "M", "X", "M", "M", "A", ...],
["A", "A", "A", "A", "A", "X", "S", ...],
["S", "S", "M", "X", "M", "X", ...],
["M", "A", "A", "A", "S", ...],
["M", "M", "M", "M", ...],
["S", "A", "S", ...],
["S", "A", ...],
["M", ...],
[...],
...
]
Enum.map(0..9, fn col ->
Enum.map(9..col, fn row ->
{row, 9-row+col}
end)
end)
[
[{9, 0}, {8, 1}, {7, 2}, {6, 3}, {5, 4}, {4, 5}, {3, 6}, {2, 7}, {1, 8}, {0, 9}],
[{9, 1}, {8, 2}, {7, 3}, {6, 4}, {5, 5}, {4, 6}, {3, 7}, {2, 8}, {1, 9}],
[{9, 2}, {8, 3}, {7, 4}, {6, 5}, {5, 6}, {4, 7}, {3, 8}, {2, 9}],
[{9, 3}, {8, 4}, {7, 5}, {6, 6}, {5, 7}, {4, 8}, {3, 9}],
[{9, 4}, {8, 5}, {7, 6}, {6, 7}, {5, 8}, {4, 9}],
[{9, 5}, {8, 6}, {7, 7}, {6, 8}, {5, 9}],
[{9, 6}, {8, 7}, {7, 8}, {6, 9}],
[{9, 7}, {8, 8}, {7, 9}],
[{9, 8}, {8, 9}],
[{9, 9}]
]
Enum.map(0..9, fn col ->
Enum.map(9..col//-1, fn row ->
{row-col, 9-row}
end)
end)
[
[{9, 0}, {8, 1}, {7, 2}, {6, 3}, {5, 4}, {4, 5}, {3, 6}, {2, 7}, {1, 8}, {0, 9}],
[{8, 0}, {7, 1}, {6, 2}, {5, 3}, {4, 4}, {3, 5}, {2, 6}, {1, 7}, {0, 8}],
[{7, 0}, {6, 1}, {5, 2}, {4, 3}, {3, 4}, {2, 5}, {1, 6}, {0, 7}],
[{6, 0}, {5, 1}, {4, 2}, {3, 3}, {2, 4}, {1, 5}, {0, 6}],
[{5, 0}, {4, 1}, {3, 2}, {2, 3}, {1, 4}, {0, 5}],
[{4, 0}, {3, 1}, {2, 2}, {1, 3}, {0, 4}],
[{3, 0}, {2, 1}, {1, 2}, {0, 3}],
[{2, 0}, {1, 1}, {0, 2}],
[{1, 0}, {0, 1}],
[{0, 0}]
]
solve2
Kino.Input.read(input)
|> Day4.solve2()
MAS: [{7, 3}, {53, 3}, {84, 3}, {92, 3}, {114, 3}, {125, 3}, {137, 3}]
MAS: [
{6, 3},
{10, 3},
{43, 3},
{48, 3},
{56, 3},
{65, 3},
{69, 3},
{80, 3},
{114, 3},
{121, 3}
]
MAS: [{35, 3}, {63, 3}, {66, 3}, {74, 3}, {91, 3}]
MAS: [
{10, 3},
{14, 3},
{20, 3},
{25, 3},
{43, 3},
{75, 3},
{78, 3},
{82, 3},
{99, 3},
{109, 3}
]
MAS: [
{11, 3},
{16, 3},
{29, 3},
{36, 3},
{61, 3},
{66, 3},
{72, 3},
{86, 3},
{98, 3},
{125, 3}
]
MAS: [{19, 3}, {35, 3}, {94, 3}, {122, 3}]
MAS: [{4, 3}, {9, 3}, {49, 3}, {69, 3}, {78, 3}, {91, 3}]
MAS: [
{15, 3},
{32, 3},
{38, 3},
{54, 3},
{58, 3},
{63, 3},
{71, 3},
{99, 3},
{133, 3}
]
MAS: [
{27, 3},
{38, 3},
{43, 3},
{47, 3},
{66, 3},
{84, 3},
{88, 3},
{95, 3},
{106, 3},
{125, 3}
]
MAS: [
{1, 3},
{10, 3},
{21, 3},
{57, 3},
{74, 3},
{84, 3},
{99, 3},
{116, 3},
{130, 3}
]
MAS: [{31, 3}, {37, 3}, {47, 3}, {53, 3}, {67, 3}, {76, 3}, {81, 3}, {109, 3}]
MAS: [
{2, 3},
{10, 3},
{21, 3},
{38, 3},
{54, 3},
{83, 3},
{91, 3},
{103, 3},
{115, 3}
]
MAS: [
{20, 3},
{25, 3},
{41, 3},
{54, 3},
{58, 3},
{91, 3},
{106, 3},
{121, 3},
{130, 3}
]
MAS: [
{5, 3},
{21, 3},
{38, 3},
{47, 3},
{59, 3},
{75, 3},
{104, 3},
{109, 3},
{131, 3}
]
MAS: [{23, 3}, {27, 3}, {32, 3}, {39, 3}, {45, 3}, {61, 3}, {72, 3}, {97, 3}]
MAS: [{3, 3}, {21, 3}, {54, 3}, {67, 3}, {76, 3}, {83, 3}]
MAS: [
{4, 3},
{9, 3},
{13, 3},
{27, 3},
{43, 3},
{101, 3},
{108, 3},
{111, 3},
{115, 3}
]
MAS: [{10, 3}, {64, 3}, {71, 3}, {78, 3}, {92, 3}, {104, 3}]
MAS: [{3, 3}, {27, 3}, {30, 3}, {33, 3}, {51, 3}, {85, 3}]
MAS: [
{13, 3},
{26, 3},
{39, 3},
{54, 3},
{67, 3},
{70, 3},
{73, 3},
{83, 3},
{111, 3},
{123, 3}
]
MAS: [{1, 3}, {18, 3}, {25, 3}, {49, 3}, {108, 3}, {117, 3}]
MAS: [{4, 3}, {21, 3}, {26, 3}, {50, 3}, {84, 3}, {97, 3}, {104, 3}, {116, 3}]
MAS: [{1, 3}, {28, 3}, {41, 3}, {66, 3}, {81, 3}, {100, 3}, {123, 3}]
MAS: [
{31, 3},
{43, 3},
{49, 3},
{54, 3},
{73, 3},
{77, 3},
{83, 3},
{101, 3},
{111, 3}
]
MAS: [{3, 3}, {9, 3}, {63, 3}, {68, 3}, {80, 3}, {113, 3}, {119, 3}]
MAS: [
{10, 3},
{14, 3},
{19, 3},
{27, 3},
{36, 3},
{60, 3},
{66, 3},
{69, 3},
{73, 3},
{81, 3},
{100, 3},
{106, 3},
{114, 3},
{120, 3}
]
MAS: [{17, 3}, {35, 3}, {68, 3}, {106, 3}, {114, 3}, {119, 3}, {123, 3}]
MAS: [
{3, 3},
{8, 3},
{27, 3},
{36, 3},
{46, 3},
{50, 3},
{54, 3},
{60, 3},
{64, 3},
{75, 3},
{85, 3},
{105, 3},
{113, 3}
]
MAS: [{3, 3}, {29, 3}, {35, 3}, {42, 3}, {54, 3}, {106, 3}]
MAS: [{6, 3}, {29, 3}, {39, 3}, {46, 3}, {79, 3}, {83, 3}, {97, 3}, {118, 3}]
MAS: [{13, 3}, {33, 3}, {43, 3}, {66, 3}, {76, 3}, {91, 3}]
MAS: [
{1, 3},
{29, 3},
{34, 3},
{44, 3},
{58, 3},
{62, 3},
{71, 3},
{81, 3},
{91, 3},
{94, 3},
{111, 3},
{121, 3}
]
MAS: [{11, 3}, {51, 3}, {55, 3}, {58, 3}, {75, 3}, {85, 3}, {89, 3}, {121, 3}]
MAS: [
{2, 3},
{6, 3},
{9, 3},
{39, 3},
{42, 3},
{48, 3},
{59, 3},
{77, 3},
{81, 3},
{108, 3},
{115, 3},
{121, 3}
]
MAS: [
{5, 3},
{11, 3},
{21, 3},
{37, 3},
{76, 3},
{79, 3},
{86, 3},
{102, 3},
{109, 3}
]
MAS: [
{3, 3},
{9, 3},
{13, 3},
{16, 3},
{26, 3},
{37, 3},
{56, 3},
{65, 3},
{71, 3},
{87, 3},
{94, 3},
{107, 3}
]
MAS: [{11, 3}, {29, 3}, {36, 3}, {98, 3}]
MAS: [
{7, 3},
{13, 3},
{30, 3},
{39, 3},
{46, 3},
{59, 3},
{66, 3},
{81, 3},
{88, 3},
{92, 3},
{106, 3},
{110, 3},
{113, 3},
{118, 3}
]
MAS: [{13, 3}, {19, 3}, {52, 3}, {55, 3}, {70, 3}, {76, 3}, {105, 3}, {115, 3}]
MAS: [
{1, 3},
{9, 3},
{26, 3},
{46, 3},
{50, 3},
{71, 3},
{84, 3},
{87, 3},
{103, 3},
{118, 3}
]
MAS: [{18, 3}, {31, 3}, {46, 3}, {51, 3}, {67, 3}, {71, 3}, {102, 3}, {108, 3}]
MAS: [{0, 3}, {5, 3}, {11, 3}, {48, 3}, {52, 3}, {64, 3}, {92, 3}]
MAS: [{3, 3}, {11, 3}, {32, 3}, {48, 3}, {53, 3}, {97, 3}, {105, 3}, {109, 3}]
MAS: [{35, 3}, {61, 3}, {72, 3}, {80, 3}, {87, 3}, {94, 3}]
MAS: [{8, 3}, {18, 3}, {35, 3}, {43, 3}, {59, 3}, {71, 3}, {81, 3}]
MAS: [
{21, 3},
{40, 3},
{50, 3},
{54, 3},
{58, 3},
{61, 3},
{84, 3},
{89, 3},
{92, 3},
{95, 3},
{109, 3}
]
MAS: [{9, 3}, {19, 3}, {26, 3}, {55, 3}, {58, 3}, {64, 3}, {67, 3}, {86, 3}]
MAS: [{2, 3}, {26, 3}, {30, 3}, {42, 3}, {61, 3}, {84, 3}, {103, 3}]
MAS: [{4, 3}, {18, 3}, {61, 3}, {69, 3}, {75, 3}, {87, 3}, {92, 3}, {108, 3}]
MAS: [
{15, 3},
{19, 3},
{28, 3},
{42, 3},
{46, 3},
{56, 3},
{63, 3},
{81, 3},
{84, 3},
{87, 3},
{93, 3},
{100, 3}
]
MAS: [{30, 3}, {40, 3}, {70, 3}, {74, 3}, {88, 3}, {97, 3}, {112, 3}]
MAS: [
{13, 3},
{30, 3},
{50, 3},
{54, 3},
{66, 3},
{74, 3},
{99, 3},
{105, 3},
{110, 3}
]
MAS: [{0, 3}, {4, 3}, {18, 3}, {48, 3}, {73, 3}, {101, 3}]
MAS: [
{0, 3},
{3, 3},
{8, 3},
{34, 3},
{42, 3},
{50, 3},
{72, 3},
{78, 3},
{81, 3},
{84, 3}
]
MAS: [
{0, 3},
{5, 3},
{9, 3},
{28, 3},
{41, 3},
{44, 3},
{50, 3},
{68, 3},
{72, 3},
{95, 3}
]
MAS: [
{1, 3},
{20, 3},
{26, 3},
{40, 3},
{45, 3},
{58, 3},
{74, 3},
{86, 3},
{93, 3},
{108, 3}
]
MAS: [{15, 3}, {65, 3}, {99, 3}, {109, 3}]
MAS: [{8, 3}, {24, 3}, {42, 3}, {54, 3}, {59, 3}, {109, 3}]
MAS: [{30, 3}, {46, 3}, {58, 3}, {61, 3}, {70, 3}, {86, 3}, {105, 3}]
MAS: [{7, 3}, {28, 3}, {36, 3}, {70, 3}, {80, 3}, {97, 3}]
MAS: [
{33, 3},
{39, 3},
{42, 3},
{50, 3},
{65, 3},
{76, 3},
{83, 3},
{90, 3},
{94, 3}
]
MAS: [{27, 3}, {76, 3}, {88, 3}, {99, 3}]
MAS: [{7, 3}, {13, 3}, {41, 3}, {52, 3}, {56, 3}, {101, 3}, {105, 3}]
MAS: [{3, 3}, {19, 3}, {33, 3}, {40, 3}, {45, 3}, {56, 3}, {73, 3}, {89, 3}, {97, 3}]
MAS: [{2, 3}, {6, 3}, {9, 3}, {16, 3}, {78, 3}, {81, 3}]
MAS: [{10, 3}, {22, 3}, {29, 3}, {48, 3}, {69, 3}, {72, 3}, {94, 3}, {101, 3}]
MAS: [{14, 3}, {17, 3}, {36, 3}, {42, 3}, {61, 3}, {69, 3}, {79, 3}, {90, 3}]
MAS: [{1, 3}, {9, 3}, {21, 3}, {30, 3}, {60, 3}, {93, 3}]
MAS: [{11, 3}, {26, 3}, {29, 3}, {38, 3}, {43, 3}, {46, 3}, {59, 3}, {84, 3}]
MAS: [{30, 3}, {46, 3}, {49, 3}, {53, 3}, {72, 3}]
MAS: [{27, 3}, {57, 3}, {64, 3}, {75, 3}, {85, 3}]
MAS: [{36, 3}, {60, 3}, {68, 3}, {73, 3}, {77, 3}, {96, 3}, {99, 3}, {102, 3}]
MAS: [{16, 3}, {59, 3}, {71, 3}, {91, 3}]
MAS: [{4, 3}, {8, 3}, {12, 3}, {28, 3}, {90, 3}]
MAS: [{13, 3}, {18, 3}, {29, 3}, {62, 3}]
MAS: [{2, 3}, {15, 3}, {21, 3}, {36, 3}, {41, 3}, {69, 3}, {75, 3}]
MAS: [{2, 3}, {9, 3}, {20, 3}, {24, 3}, {75, 3}, {87, 3}]
MAS: [
{5, 3},
{10, 3},
{14, 3},
{26, 3},
{37, 3},
{40, 3},
{52, 3},
{55, 3},
{60, 3},
{66, 3},
{69, 3},
{77, 3},
{88, 3}
]
MAS: [{38, 3}, {44, 3}, {53, 3}, {81, 3}, {89, 3}, {98, 3}]
MAS: [{2, 3}, {41, 3}, {58, 3}, {92, 3}, {98, 3}]
MAS: [{6, 3}, {12, 3}, {20, 3}, {28, 3}, {54, 3}, {79, 3}, {87, 3}, {92, 3}]
MAS: [{24, 3}, {61, 3}, {75, 3}, {79, 3}, {97, 3}]
MAS: [{21, 3}, {34, 3}, {46, 3}, {51, 3}, {57, 3}, {62, 3}, {65, 3}, {89, 3}]
MAS: [{11, 3}, {19, 3}, {48, 3}, {73, 3}, {77, 3}, {85, 3}, {90, 3}, {96, 3}]
MAS: [{10, 3}, {28, 3}, {50, 3}, {66, 3}, {71, 3}, {92, 3}]
MAS: [{20, 3}, {37, 3}, {40, 3}, {69, 3}, {80, 3}, {83, 3}, {93, 3}]
MAS: [
{1, 3},
{14, 3},
{17, 3},
{36, 3},
{46, 3},
{58, 3},
{62, 3},
{70, 3},
{83, 3},
{94, 3}
]
MAS: [{5, 3}, {22, 3}, {34, 3}, {52, 3}, {56, 3}, {88, 3}]
MAS: [{18, 3}, {48, 3}, {56, 3}, {77, 3}]
MAS: [
{5, 3},
{18, 3},
{43, 3},
{49, 3},
{56, 3},
{60, 3},
{63, 3},
{70, 3},
{80, 3},
{83, 3},
{86, 3}
]
MAS: [{4, 3}, {28, 3}, {49, 3}, {81, 3}, {85, 3}]
MAS: [{15, 3}, {22, 3}, {32, 3}, {36, 3}, {48, 3}, {67, 3}, {78, 3}]
MAS: [{5, 3}, {16, 3}, {51, 3}, {65, 3}, {78, 3}]
MAS: [{4, 3}, {11, 3}, {63, 3}, {70, 3}, {84, 3}]
MAS: [{6, 3}, {17, 3}, {28, 3}, {66, 3}]
MAS: [{1, 3}, {15, 3}, {19, 3}, {27, 3}, {33, 3}, {43, 3}, {54, 3}, {60, 3}, {71, 3}]
MAS: [{1, 3}, {21, 3}, {60, 3}, {63, 3}, {71, 3}, {83, 3}]
MAS: [{11, 3}, {14, 3}, {22, 3}, {59, 3}, {63, 3}, {66, 3}, {82, 3}]
MAS: [{2, 3}, {22, 3}, {26, 3}, {33, 3}, {59, 3}, {67, 3}, {80, 3}]
MAS: [{1, 3}, {4, 3}, {57, 3}, {60, 3}, {64, 3}, {76, 3}, {88, 3}]
MAS: [{1, 3}, {8, 3}, {11, 3}, {35, 3}, {43, 3}, {69, 3}, {76, 3}]
MAS: [{0, 3}, {16, 3}, {24, 3}, {30, 3}, {66, 3}, {84, 3}]
MAS: [{0, 3}, {24, 3}, {46, 3}, {50, 3}, {62, 3}, {67, 3}, {71, 3}, {75, 3}]
MAS: [{1, 3}, {13, 3}, {17, 3}, {32, 3}, {44, 3}, {52, 3}, {60, 3}, {74, 3}]
MAS: [{17, 3}, {32, 3}, {76, 3}, {85, 3}]
MAS: [{7, 3}, {49, 3}, {70, 3}, {79, 3}]
MAS: [{5, 3}, {24, 3}, {40, 3}, {58, 3}, {64, 3}, {67, 3}]
MAS: [{8, 3}, {13, 3}, {30, 3}, {50, 3}, {55, 3}, {58, 3}, {84, 3}]
MAS: [
{10, 3},
{13, 3},
{23, 3},
{27, 3},
{41, 3},
{45, 3},
{49, 3},
{53, 3},
{62, 3},
{65, 3}
]
MAS: [{2, 3}, {14, 3}, {25, 3}, {40, 3}, {51, 3}, {58, 3}, {64, 3}, {82, 3}]
MAS: [{3, 3}, {21, 3}, {38, 3}, {50, 3}, {67, 3}, {78, 3}, {81, 3}]
MAS: [{24, 3}, {42, 3}, {46, 3}, {68, 3}]
MAS: [{28, 3}, {34, 3}]
MAS: [{10, 3}, {16, 3}, {28, 3}, {38, 3}, {51, 3}, {62, 3}, {73, 3}]
MAS: [{6, 3}, {36, 3}, {42, 3}, {67, 3}]
MAS: [{1, 3}, {11, 3}, {24, 3}, {28, 3}, {36, 3}, {42, 3}, {53, 3}, {69, 3}]
MAS: [{6, 3}, {13, 3}, {19, 3}, {23, 3}, {26, 3}]
MAS: [{13, 3}, {16, 3}, {30, 3}, {39, 3}, {64, 3}, {68, 3}, {71, 3}]
MAS: [{13, 3}, {18, 3}, {25, 3}, {34, 3}, {57, 3}]
MAS: [{5, 3}, {24, 3}, {34, 3}, {40, 3}, {58, 3}, {63, 3}, {67, 3}, {72, 3}]
MAS: [{6, 3}, {38, 3}]
MAS: [{2, 3}, {6, 3}, {19, 3}, {31, 3}, {37, 3}, {54, 3}, {62, 3}, {75, 3}]
MAS: [{2, 3}, {9, 3}, {60, 3}, {67, 3}]
MAS: [{2, 3}, {14, 3}, {60, 3}, {72, 3}]
MAS: [{6, 3}, {30, 3}, {34, 3}, {44, 3}, {48, 3}, {54, 3}, {71, 3}, {75, 3}]
MAS: [{11, 3}, {25, 3}, {29, 3}, {39, 3}, {43, 3}, {71, 3}]
MAS: []
MAS: [{16, 3}, {19, 3}, {22, 3}, {27, 3}, {39, 3}, {50, 3}, {57, 3}, {72, 3}]
MAS: [{19, 3}, {26, 3}, {54, 3}, {68, 3}]
MAS: [{1, 3}, {7, 3}, {17, 3}, {27, 3}, {31, 3}, {43, 3}]
MAS: [{8, 3}, {24, 3}, {40, 3}, {47, 3}, {50, 3}, {60, 3}]
MAS: [{10, 3}, {39, 3}, {44, 3}, {55, 3}]
MAS: [{4, 3}, {10, 3}, {21, 3}, {26, 3}, {34, 3}, {45, 3}, {50, 3}]
MAS: [{11, 3}, {19, 3}, {43, 3}, {54, 3}, {63, 3}]
MAS: [{4, 3}, {15, 3}, {45, 3}, {52, 3}, {62, 3}]
MAS: [{1, 3}, {16, 3}, {23, 3}, {41, 3}, {44, 3}, {53, 3}, {58, 3}, {61, 3}, {68, 3}]
MAS: [{2, 3}, {8, 3}, {12, 3}, {19, 3}, {28, 3}, {34, 3}, {48, 3}, {66, 3}]
MAS: [{9, 3}, {24, 3}, {45, 3}, {48, 3}, {52, 3}]
MAS: [{6, 3}, {10, 3}, {23, 3}, {54, 3}, {60, 3}, {65, 3}]
MAS: [{12, 3}, {18, 3}, {33, 3}]
MAS: [{4, 3}, {26, 3}, {40, 3}, {50, 3}, {64, 3}]
MAS: [{15, 3}, {25, 3}, {39, 3}, {50, 3}, {54, 3}, {57, 3}, {65, 3}]
MAS: [{45, 3}, {48, 3}, {65, 3}]
MAS: [{34, 3}, {46, 3}]
MAS: [{8, 3}, {13, 3}]
MAS: [{1, 3}, {6, 3}, {20, 3}, {30, 3}, {41, 3}, {65, 3}]
MAS: [{0, 3}, {6, 3}, {18, 3}, {22, 3}, {38, 3}, {60, 3}]
MAS: [{6, 3}, {19, 3}, {35, 3}, {62, 3}]
MAS: [{8, 3}, {33, 3}, {51, 3}]
MAS: [{6, 3}, {10, 3}, {20, 3}, {36, 3}, {44, 3}, {53, 3}]
MAS: [{18, 3}, {34, 3}, {46, 3}, {58, 3}]
MAS: [{14, 3}, {24, 3}, {46, 3}, {53, 3}, {56, 3}]
MAS: [{15, 3}, {25, 3}, {31, 3}, {41, 3}]
MAS: [{12, 3}, {44, 3}, {48, 3}, {60, 3}]
MAS: [{7, 3}, {11, 3}, {30, 3}, {44, 3}, {51, 3}, {56, 3}]
MAS: [{2, 3}, {20, 3}, {24, 3}, {38, 3}, {44, 3}, {47, 3}, {51, 3}, {56, 3}, {60, 3}]
MAS: [{1, 3}, {5, 3}, {25, 3}]
MAS: [{3, 3}, {14, 3}, {32, 3}, {37, 3}, {41, 3}]
MAS: [{20, 3}, {47, 3}, {54, 3}]
MAS: [{2, 3}, {21, 3}, {36, 3}, {44, 3}, {56, 3}]
MAS: [{1, 3}, {6, 3}, {16, 3}, {38, 3}]
MAS: [{1, 3}, {4, 3}, {7, 3}, {17, 3}, {29, 3}, {54, 3}]
MAS: [{29, 3}, {43, 3}, {52, 3}]
MAS: [{2, 3}, {11, 3}, {16, 3}, {47, 3}, {51, 3}, {56, 3}]
MAS: [{8, 3}, {12, 3}, {32, 3}, {51, 3}]
MAS: [{7, 3}, {12, 3}, {17, 3}, {29, 3}, {32, 3}, {41, 3}]
MAS: [{14, 3}, {35, 3}, {43, 3}, {50, 3}]
MAS: [{2, 3}, {17, 3}, {38, 3}, {48, 3}]
MAS: [{1, 3}, {6, 3}, {12, 3}, {51, 3}]
MAS: [{4, 3}, {8, 3}, {12, 3}, {21, 3}, {43, 3}, {50, 3}]
MAS: [{7, 3}, {20, 3}, {25, 3}, {31, 3}, {39, 3}, {52, 3}]
MAS: [{17, 3}, {25, 3}]
MAS: [{4, 3}, {8, 3}, {17, 3}]
MAS: [{32, 3}, {37, 3}, {41, 3}]
MAS: [{15, 3}]
MAS: [{2, 3}, {6, 3}, {17, 3}, {22, 3}, {28, 3}]
MAS: [{12, 3}, {27, 3}, {31, 3}]
MAS: [{11, 3}, {32, 3}, {35, 3}, {39, 3}, {45, 3}]
MAS: [{0, 3}, {8, 3}, {20, 3}, {46, 3}]
MAS: [{0, 3}, {12, 3}, {23, 3}, {38, 3}, {44, 3}]
MAS: [{12, 3}, {19, 3}, {25, 3}, {33, 3}, {39, 3}]
MAS: [{1, 3}, {12, 3}, {37, 3}, {40, 3}, {46, 3}]
MAS: [{2, 3}, {13, 3}, {18, 3}, {31, 3}, {46, 3}]
MAS: [{10, 3}, {40, 3}, {46, 3}]
MAS: [{5, 3}, {14, 3}, {20, 3}]
MAS: [{16, 3}, {38, 3}]
MAS: [{4, 3}, {9, 3}, {32, 3}]
MAS: [{8, 3}, {24, 3}, {30, 3}, {38, 3}]
MAS: [{12, 3}, {20, 3}, {35, 3}]
MAS: [{6, 3}, {17, 3}, {21, 3}, {29, 3}, {36, 3}, {40, 3}]
MAS: [{14, 3}, {38, 3}]
MAS: [{8, 3}, {22, 3}, {41, 3}]
MAS: [{1, 3}, {5, 3}]
MAS: [{18, 3}, {25, 3}, {38, 3}]
MAS: [{1, 3}, {5, 3}, {12, 3}, {16, 3}, {26, 3}, {34, 3}, {40, 3}]
MAS: [{4, 3}, {8, 3}, {12, 3}, {26, 3}, {33, 3}, {37, 3}]
MAS: [{5, 3}, {27, 3}, {36, 3}]
MAS: [{27, 3}, {36, 3}]
MAS: [{36, 3}]
MAS: [{0, 3}, {12, 3}, {18, 3}, {31, 3}, {35, 3}]
MAS: [{21, 3}, {29, 3}]
MAS: [{3, 3}, {14, 3}, {36, 3}]
MAS: [{10, 3}, {14, 3}]
MAS: [{12, 3}, {16, 3}, {24, 3}]
MAS: [{32, 3}, {35, 3}]
MAS: [{14, 3}, {19, 3}, {23, 3}]
MAS: [{10, 3}, {28, 3}]
MAS: [{4, 3}, {30, 3}]
MAS: []
MAS: [{3, 3}, {6, 3}, {14, 3}, {23, 3}, {31, 3}]
MAS: []
MAS: [{2, 3}, {17, 3}, {20, 3}]
MAS: [{28, 3}]
MAS: [{28, 3}]
MAS: [{19, 3}]
MAS: [{3, 3}, {6, 3}]
MAS: [{6, 3}, {9, 3}, {16, 3}, {23, 3}]
MAS: [{4, 3}, {11, 3}, {18, 3}]
MAS: [{19, 3}]
MAS: [{1, 3}, {4, 3}, {11, 3}, {18, 3}]
MAS: [{9, 3}, {26, 3}]
MAS: [{16, 3}]
MAS: [{4, 3}, {15, 3}, {20, 3}]
MAS: [{2, 3}, {9, 3}]
MAS: [{2, 3}, {15, 3}, {21, 3}]
MAS: [{2, 3}, {18, 3}, {21, 3}]
MAS: []
MAS: [{0, 3}, {19, 3}]
MAS: []
MAS: [{19, 3}]
MAS: [{1, 3}, {18, 3}]
MAS: []
MAS: [{2, 3}, {6, 3}, {10, 3}]
MAS: [{0, 3}, {6, 3}, {9, 3}]
MAS: [{1, 3}, {4, 3}]
MAS: [{2, 3}, {7, 3}, {14, 3}]
MAS: [{2, 3}, {13, 3}]
MAS: [{4, 3}, {15, 3}, {19, 3}]
MAS: []
MAS: [{16, 3}]
MAS: [{9, 3}]
MAS: [{6, 3}]
MAS: []
MAS: [{4, 3}, {14, 3}]
MAS: [{14, 3}]
MAS: [{8, 3}, {13, 3}]
MAS: [{6, 3}]
MAS: [{6, 3}]
MAS: [{0, 3}, {10, 3}]
MAS: [{9, 3}]
MAS: [{8, 3}]
MAS: [{2, 3}, {6, 3}, {10, 3}]
MAS: []
MAS: [{9, 3}]
MAS: [{10, 3}]
MAS: [{7, 3}, {10, 3}]
MAS: []
MAS: [{0, 3}, {3, 3}]
MAS: [{3, 3}]
MAS: []
MAS: [{0, 3}]
MAS: [{5, 3}]
MAS: [{6, 3}]
MAS: [{3, 3}]
MAS: []
MAS: []
MAS: []
MAS: [{0, 3}]
MAS: []
MAS: []
MAS: [{2, 3}]
MAS: []
MAS: []
MAS: []
MAS: []
MAS: [{0, 3}]
2595
Regex.scan(~r/X.*MAS|SAMX/, "HALXAMASo")
[["XAMAS"]]
grid = [
["M", "M", "M", "S", "X", "X", "M", "A", "S", "M"],
["M", "S", "A", "M", "X", "M", "S", "M", "S", "A"],
["A", "M", "X", "S", "X", "M", "A", "A", "M", "M"],
["M", "S", "A", "M", "A", "S", "M", "S", "M", "X"],
["X", "M", "A", "S", "A", "M", "X", "A", "M", "M"],
["X", "X", "A", "M", "M", "X", "X", "A", "M", "A"],
["S", "M", "S", "M", "S", "A", "S", "X", "S", "S"],
["S", "A", "X", "A", "M", "A", "S", "A", "A", "A"],
["M", "A", "M", "M", "M", "X", "M", "M", "M", "M"],
["M", "X", "M", "X", "A", "X", "M", "A", "S", "X"]
]
[
["M", "M", "M", "S", "X", "X", "M", "A", "S", "M"],
["M", "S", "A", "M", "X", "M", "S", "M", "S", "A"],
["A", "M", "X", "S", "X", "M", "A", "A", "M", "M"],
["M", "S", "A", "M", "A", "S", "M", "S", "M", "X"],
["X", "M", "A", "S", "A", "M", "X", "A", "M", "M"],
["X", "X", "A", "M", "M", "X", "X", "A", "M", "A"],
["S", "M", "S", "M", "S", "A", "S", "X", "S", "S"],
["S", "A", "X", "A", "M", "A", "S", "A", "A", "A"],
["M", "A", "M", "M", "M", "X", "M", "M", "M", "M"],
["M", "X", "M", "X", "A", "X", "M", "A", "S", "X"]
]