-
Notifications
You must be signed in to change notification settings - Fork 0
/
day4_test.exs
70 lines (62 loc) · 1.5 KB
/
day4_test.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
defmodule Day4Test do
use ExUnit.Case
import Parser
def init(board) do
board |> Enum.map(fn board -> board |> Enum.map(&{&1, :unmarked}) end)
end
setup do
example_numbers = [
7,
4,
9,
5,
11,
17,
23,
2,
0,
14,
21,
24,
10,
16,
13,
6,
15,
25,
12,
22,
18,
20,
8,
19,
3,
26,
1
]
example_boards = [
[22, 13, 17, 11, 0, 8, 2, 23, 4, 24, 21, 9, 14, 16, 7, 6, 10, 3, 18, 5, 1, 12, 20, 15, 19],
[3, 15, 0, 2, 22, 9, 18, 13, 17, 5, 19, 8, 7, 25, 23, 20, 11, 10, 24, 4, 14, 21, 16, 12, 6],
[14, 21, 17, 24, 4, 10, 16, 15, 9, 19, 18, 8, 23, 26, 20, 22, 11, 13, 6, 5, 2, 0, 12, 3, 7]
]
[nums | boards] = lines_to_list("inputs/day4")
puzzle_numbers = nums |> String.split(",", trim: true) |> to_ints()
puzzle_boards =
boards
|> Enum.chunk_every(5)
|> Enum.map(&Enum.join(&1, " "))
|> Enum.map(&String.split/1)
|> Enum.map(&to_ints/1)
{:ok,
example_numbers: example_numbers,
example_boards: init(example_boards),
puzzle_numbers: puzzle_numbers,
puzzle_boards: puzzle_boards}
end
test "part 1 - works for given example", context do
assert Day4.play(context[:example_numbers], context[:example_boards]) == 4512
end
test "part 1 - solves the puzzle", context do
assert Day4.play(context[:puzzle_numbers], init(context[:puzzle_boards])) == 11536
end
end