+137
inputs/day4.txt
+137
inputs/day4.txt
···
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
+
...@@@@@@.@.@@@@@@.@.@...@..@..@@@@.@..@@.@@@@@.@@@@..@@.@@.@@@@@@@@@@....@@.@@@@@@@@@.@.@@@@@@@@@@@@@@@@@@@.@@.@@@.@@....@...@@@..@@@.@@
71
+
.@@@..@@.@@@@@@.@@.@@@@@..@.@.@@@@@@@@.@@@.@....@@@..@@@.@@..@@@@@@@@@...@@@@@@@@...@@@.@@@@@@..@..@@.@@@@@.@.@@@@@@.@@@@@@@..@...@...@@@
72
+
@@@@@@...@@@@@..@@......@@@@@@@..@@@@..@@@@...@.@....@@@@@@@@@@@@@.@@.@@@@@@....@.@@@.@@.@@.@@@@@@..@@@@@@@..@@@.@..@@@@@@@.@@..@@@@@.@..
73
+
@@@.@@@.@@.@.@..@.@.@@.@...@@.@@.@@.@@@.@.@@@@@@@@.@.@.@@@.@@@.@@@.@@@@@.@@.@.@.@..@@@@@@.@.@@@.@@@@..@@.@@.@.@@.@@.@@......@@@@@.@..@@@@
74
+
.@@@..@@@.@@@@..@@.@.@..@.@@@@@@@@@@@..@@...@.@.@.@@.@@@@@.@.@..@.@..@.@.@....@@@@.@@@@@@.@..@....@@.@..@@@@@@@@@..@@@@....@@@@@..@...@@.
75
+
@.@@@@.@@@@@@@@@@@.@@@@.@..@@.@@@@@@...@@.@@@@@@..@@@@.@@.@@@@@@@.@.@....@@@@.@..@@@@@@.@@@.@.@...@.@@...@..@@@@...@@@..@...@..@@@@@@@@@@
76
+
.@..@@@@@.@@@.@@@@@..@@@@@@@..@.@@.@@@@.@.@@@@@@@@@@..@@@@@@@@..@@@@@.@@@@@@@..@.@.@@@.@@@@@@@...@@@@@@@@.@.@@@.@.@@.@@@@.@@@@.@@@@.@@@@@
77
+
.@@..@@..@@@.@@.@...@@@.@@@.@@...@@.@@@.@@@@@@.@@@@@..@.@.@@@@@@.@@@..@@@.@..@@.@@@...@..@@@@@@.@@.@@....@.@@..@@@@@@.@@@..@.@.@@@.@..@@.
78
+
.@@@@.@@@@@...@@@@@@@@..@.@@@@.@@@.@.@.@@@@.@@@@@..@@@..@.@@.@@.@..@...@@@@...@.@.@@@@@.@.@.@@@@@..@@.@@.@@@@.@..@@@.@.@@@@@.@..@@@.@@@@.
79
+
@.@@.@@@.@@.@@@@@@@@@@.@@.@@..@@.@@@@@@.@.@@.@@.@@@.@..@@@@@@@@@@.@@@..@..@@@@....@@@@.@@@@.@.@@.@.@@@@@@.@@.@@.@@....@@.@@.@..@@...@..@@
80
+
@@@@@@..@@@.@@.@.@@..@@.@@@@@..@@@.@...@@@@.@@@...@@@.@.@.@@@@@@.@...@@@.@....@@@@@@@@@@@@@@..@@@.@@..@@@@..@@.@.@..@@@@@@@@@@@@.@.@@@@.@
81
+
.@@.@.@.@@@@..@@.@@@@@@@@@@@.@@@@@@.@@@@@.@...@@.@.@@.@@@@...@@@.@@.@@@@@@@@@@@@.@@@.@@@.@@@@@@...@.@@.@..@@@@.@@@.@@.@.@@@.@@..@.@@@.@@@
82
+
@@@@@@@@@@@@.@.@@..@.@@@.@@@..@.@@@@@..@.@@@...@.@@...@@.@.@@@@@.@.@.@@@@@@..@@@@@...@..@@@@@@.@.@@@..@@@@.@@.@.@@.@@@@@@@.@.@@@@@.@@..@@
83
+
@@@@.@@@@@@..@...@@@.@@@@@@@..@..@..@.@@@@.@@@@@@@@@.@@@@.@..@@@.@.@@@@.@@@@.....@@.@@@.@@.@.@@.@@..@@.@.@.@..@@@@@..@..@.@@@@@@@.@@@@@@.
84
+
@@@@@@.@@@..@.@@.@@.@@@...@@@.@@..@.@@.@.@@.@@@@@@.@@.@@..@@@.@@@@@....@.@@..@@@.@@.@@..@.@.@@@@.@@...@@@@..@.@@.@@.@@@@@.@@@.@@.@.@@@@@.
85
+
@@@@..@.@@@@.@@@@@.@..@@@@@@@.@@@@..@@.@.@.@.@.@@..@...@@@@.@@@.@@.@..@.@@@@@@@@@@@.@@@@@.@@..@.@..@@..@.@@@..@.@@@.@.@.@@...@@..@.@.@.@@
86
+
@@@@@@@@.@@@@@@.@@@.@@@.@@.@@.@@@.@.@@@@@@@@..@@@@@@...@.@...@@@@@@..@@@..@@@.@@@@@@@@..@.@..@..@@@@.@@@@.@@@@@.@@.@@@@@@..@..@.@..@@.@..
87
+
..@.@@@@@@.@@@@@.@@.@@@@.@@@@.@@.@@..@..@.@@@..@.@..@@@@@..@..@@@.@.@@@.@@.@@@@..@@@@@.@@@@@.@@@@@.@@@...@@@@@@@..@@@@@.@@@@.@@.@@.@.@@@.
88
+
@..@@..@@.@@@@..@@...@@.@@.@@@.@@.@@@@@..@@@@@@.@@@@@@.@@@@@@@@..@@@..@.@@@@@.@@@.@@@.@@..@@...@@@.@@@@....@...@.@@@@@..@@@@@..@.@@@@.@@.
89
+
@@@@.@@.@@..@.@.@@@.@@@...@@.@@@.@..@@@@@.@@@@@@.@@.@@@.@.@.@.@..@@@@@..@@@@..@.@.@@..@.@@@@@@@@.@@@@@@@@.@@@@@@@..@@@@.@@@@@@@@@@@@@@@.@
90
+
@@@@.@@@.@@..@.@@.@@@.@..@@@.@......@@.@@@@@....@.@@@.@@@@@.@.@@@.@@@.@....@@@..@@..@.@@.@@.@@.@@..@@@.@@..@@.@@.@@@.@..@@@.@@.@@@@@@@@@.
91
+
@@.@@..@@@@.@@..@@@@@.@...@.@@@.@.@@@...@@.@.@...@@.@@@@..@.@..@..@@@.@.@@@.@..@@@.@@@.@...@@..@@.@...@.@@@.@..@.@@@@...@...@@@@..@@@.@@@
92
+
@@@.@.@@.@@@@.@@@@@@...@...@@@..@.@@@@@@@@@@.@@@.@@.@@@..@..@....@@@@@@..@@.@@@@@.@@@@..@@.@..@@..@..@@@@.@..@..@...@@@@.@.@...@@.@@..@@@
93
+
..@@@..@..@@@.@@@@@@@.@@.@@.@@@.@@@@@@@.@.@@.@@@@@.@.@@..@.@@.@@@@@@.@.@...@@@@...@..@@.@@.@@@@@@.@@@@@@..@@@.@@.@@@@@@@@.@@@@@.@.@@@@.@@
94
+
@@@.@....@.@...@.@.@...@@@@@.@...@@@@..@@@@.@..@@...@@@@@@@..@.@.@@@..@.@@@.@.@@@@@@.@@@@@@@@@@.@@.@@@@@@@@@@.@.@.@@@@..@@@@.@.@@@..@@@@@
95
+
@@@..@...@.@@@@.@@@@@@@@.@@@.@@@@.@..@.@@.@@...@.@@.@@@.@.@.@@..@@....@@@.@.@@.@@@..@@@@@.@@@@@@@@.@@@.@.@@@.@@.@@@.@@@.@@@@.@@.@@@@..@..
96
+
@@@.@.....@@@@@.@@.@..@..@@@.@@@@@.@@..@@@@@@@@@@@@..@@.@.@.@@..@.@@.....@@@.@@@@.@@@@@.@@@..@.@@@.@@.@.@@@@.@@@@@@@.@@.@@..@.@.@@..@@.@@
97
+
.@..@@.@.@@.@.@@@@@@@@@@..@.@@@.@@.@@.@@@.@...@@.@@@@.@@....@@@.@@@..@.@@@@..@@..@..@.@@.@@@.@.@@..@...@@@.@.@@@.@@.@@...@@@@..@.@@@@@@@@
98
+
@@@@@..@..@@.@@@@@.@@....@@@@@@....@@@...@@@.@@@@@@..@.@@...@@@.@.@@....@@@@@.@..@@@@@@.@.@@@@@..@@@.@@.@@@.@@@@@.@@@.@.@@@@.@@@..@@@.@@@
99
+
...@@.@.@@.@...@@@@@.@@@@@@.@@@@@.@@@@@@@.@..@..@...@@..@.@.@@@@@@@@..@@@@.@..@@@@.@.@@@@@@@..@@@@@@.@@@.....@@@.@.@...@...@@@@@.@@.@@@@@
100
+
.@@..@@.@@@.@@.@..@.@.@@.@..@@@.@...@@@@@@@@@.@@.@.@@@@@@@..@@@.@.@@@@@@@@@@@@@.@..@@.@.@.@@.@@@@.@@@@@@@@@@.@@@@..@@..@@.@@..@.@..@@@..@
101
+
@@.@@@@@@@.@..@@.@@@@.@@@..@..@@@@@@@@@.@@.@..@@@@.@@@@..@@@.@.@@...@.@@@@.@.@@@@..@@@@@@@@@...@@@@@@@...@@@@..@@@@..@@@@.@@@@@@@@.@@@@.@
102
+
..@...@@@@..@@@@@.@@.@@.@@@.@@..@@@@.@..@@@@@@@@@@@..@@@@@@@@.@@@@@@@@@@.@@@@.@..@@@@.@.@.@@@.@@@...@@@@@@....@@@.@.@@@@...@.@@...@@.@@.@
103
+
...@@..@.@@..@@.@@@@@@@@..@@@@.@@@@@.@.@@.@@@@@.@@...@@.@.@@@@.@@@@@@@.@.@...@@@.@@.@@@@@.@@.@..@@@.@.@@@.@@@@.@@.@.@@@@@@@@@.@@@@..@.@@.
104
+
@@@.@@@@.@@@@@.@.@@@...@@.@@@..@@@@.@.@.@@..@@@@@@@.@...@@..@.@@@@@.....@@@@@...@@@@.@..@@.@@@@@@@..@.@@@.@@@.@@@@.@@@@@@@@.@@@@.@.@.@@@.
105
+
....@@@@@@.@@.@@@.@...@@@.@@...@@@@..@@@@@@@.@@@@@.@@@@@@.@....@@.@@....@@@@@@.@..@@@.@..@@.@.@@@...@@@.@@@.@@.@@.@..@...@@.@@.@@@@.@@@.@
106
+
.@@@@@.@.@@@...@@...@@.@@..@.@.@@@@.@..@@...@@@@@@.@..@..@.@.@@@@.@@.@.@.@..@@@@@@.@@......@.@.@@@@@@@@@@@@@..@@.@@@@@..@@.@....@.@@@@@@.
107
+
@..@..@@.@@@@@..@.@@.@@@.@..@@...@@@...@@@@.@..@.@..@.@@@@.....@@@..@@@@.@@@.@@.@@@@.@..@@@@@@@.@@.@@..@.@@..@..@@@@@@@.@@.@.@@@.@@..@@@.
108
+
@...@@@@.@@@@.@.@@@@.@@@@..@@@.@@.@@..@@@@@@@.@..@@@.....@@.@..@@@@..@@@@@.@@@@.@..@@@@.@.@.@@@@@@.@@@...@@@@.@.@@.@@@.@@@..@@@...@@@@.@.
109
+
@.@@.@..@@@@.@...@@@.@.@@@@@@.@@.@@.@.@@@@@@@.@@@@@@@.@.@.@@@@.@.@..@.@..@@@@.@..@@@@@@@.@@@.@.@.@@.@@@@.@@@@@@.@@.@.@@..@.@..@@@@@...@@@
110
+
@@@.@.@.@@@@@@@@@@...@.@.@@..@@@@.@@..@.@..@@@.@.@@@@.@@@...@....@@@@.@.@..@@@.@@.@.....@@..@.@.@@@@@@....@.@@@@@@@@@.@.@@@@@..@@.@@@.@@.
111
+
.@@.@...@@@@...@@@@@.@@@@@.@@@.........@..@..@@.@@@.@..@.@@..@@@@.@.@@@@@@@.@@@@@@@@.@@@..@@.@..@.@@@@@..@@@@@@.@.@@@@.@@@@@.@@@@.@@@@@..
112
+
@.@@@.@.@@@.@@@.@@@..@@.@..@@.@@.@...@@.@.@.@.@...@@@.@.@@.@@..@.@@...@@@@@@@@..@@@@..@@..@..@.@..@@.@@@@..@@@@.@@@@@.@@@.@.@@@@.@@.@.@@.
113
+
@.@.@@.@@@@...@@@..@@@...@@@@@..@..@@@@@@@..@@@@.@..@@..@..@@@@..@.@.@@@@@.@@@@@@...@.@@.@.@@@@@..@@.@@.@@..@....@@.@@.@.@@@@.@...@@@@@.@
114
+
.@..@@..@..@@@@@@..@@@.@..@@.@@@.@..@@@@.@@@@.@@.@.@.@@@@@@@@@.@.@...@@@@@@.@@@.@.@@@@@@.@.@....@@.@.@@.....@@..@.@.@@@@@@.@@@@@.@.@@.@@.
115
+
@@..@@@@.@@..@@@@..@@@@@.@@@@@@.@@.@@@@@.@.@@@.@@@@@@@@...@@...@.@@@...@@@.@@...@.@@.@@@..@.@@...@.@@@.@.@@@.@..@@@@.@@@@.@@@.@..@..@.@@@
116
+
@@@@..@@@..@@.@..@@@...@.@@@.@.@@@@.@@.@@..@@.@@@@@@.@@.@@@@@..@.@.@@@@.@@@@@@@..@@..@@@.@.@@.@@@@...@@@@@@@@@@@@@...@@.@......@@..@@@@@.
117
+
@.@@.@@@...@..@@@.@.@@@@.....@.@.@@.@...@..@@@@@@..@@@..@.@.@@@.@.@@....@.@.@@@@@@..@....@@@@..@@@@@.@@@@@@@@@@.@@.@@@.@@@@@...@....@.@@@
118
+
@@@@@@@@@@@...@.@@@@@@@@@..@@.@@.@@@@.@.@@@.@@@@@.@@...@@@.@@@.@.@@@.@@@@@@@@..@@@@@..@@.@@@..@.@.@@@@@.@@@@.@@.@.@.@@.@@@@..@@@...@..@@@
119
+
@@@...@@@@@.@@@@@.@@@@@.@.@@@@@@@@..@..@@@@@@..@.@.@@.@@.@.@....@@@@@.@@@@.@@.@@@@..@@.....@..@..@@@@@@.@@..@..@..@@@@@.@@.@@@@.@@@.@.@.@
120
+
.@@.@@@@@@.@@@.@@@@@@.@@..@@@@.@@@@@..@.@@..@..@.@@@@@@@@@@@..@.@@@@.@@.@.@@@..@@..@.@..@@@.@@@@@.@@@@@@.@@@@@.@.@..@@..@.@...@@.@@.@..@@
121
+
@.@.@@.@@@.@@@@@.@@@@@@.@....@@.@.....@.@.@@@.@.@.@@@@@..@@.@.@.@@@@@@@@..@@@....@@@@@@@@...@@.@@...@..@@@..@@@@..@@.@.@@@@@@@..@@@@..@..
122
+
@@..@@..@@@.@@@.@.....@@..@...@@.@....@@..@@@@...@@.@@.@@@@@@..@@@..@.@@.@.@@@@..@.@.@@.@@@@....@@@....@@.@@.@@@@@@..@.@@@@@@....@.@@@@@.
123
+
@@@@@@.@@@@..@@.@.@@@.@@@@.@@.@@.@.@@@@..@.@@@.@@@@@@@...@@.@@.@.@@..@.@@@.@.@@@@.@.@..@.@..@.@@.@@@@.@..@@..@@@.@@@@@@.@@..@.@.@@@@@@@@@
124
+
@@.@@@@@.@@....@@@@@@.@@..@@@@@@@@.@@@@....@..@.@@@@@@..@@.@.@@@@@@@..@.@.@@..@@@@.@@@@.@@@@.@@..@@..@@.@.@@@.@..@.@.@@.@@@@@..@.@.@.@.@@
125
+
@@..@@@@@@@@@.@@..@@.@@@@@@@@@@@@@.....@@...@@@@..@@@@...@@..@.@@@@...@..@@.@@.@@@..@.@@@@.@...@@@@..@@@@.@..@@.@@@.@@@@@...@@...@@.@....
126
+
@.@@@@@@.@@@@@.@@.@.@@@@....@@@@@@.@@@@.@.@...@..@@.@@@@.@@@.@.@@@@@@@@@.@@@@.@@@@@@..@@@..@@.@.@@@.@.@@@..@..@@@@@@@..@.@@.@@..@@@@@...@
127
+
@@@@@@@@@.@@@..@@@..@.@@@@@@..@@.@@.@@@@@.@...@@..@.@@@.@@..@@@..@@@@@@@..@@@@.@@..@.@@@.@..@..@@@..@@......@@@@@@@@.@@...@...@@@@@@@.@.@
128
+
@@@..@@@@...@@...@@@@@@@@.@@@@@.@@..@.@@..@@@@.@.@@@..@@@@@.@.@@@@@@@.@@....@@@@@@@@..@@@..@.@@..@@@@.@.@.@@@@@@@@@.@@.@@@.@.@@.@@@.@@@..
129
+
.@....@@@.@.@.@.@@@.@@@.@.@..@@@.@....@@@.@@..@.@@@.....@@...@@@.@.@@@@@@@.@@.@@@.@@.@.@@@.@@@@.@..@.@@@@.@.@..@@@@..@@.@@@@@@@@@@.@...@@
130
+
@@.@@@@@@.@@.@@.@@@..@@.@@.@@.@.@..@...@@@@@.@.@@@@.@@.@@.@@@@..@@.@@@.@@@@..@@@@@.@@@..@@.@@@.@.@.....@@@@.@@@@....@@@@@@@..@.@@@@@@...@
131
+
@@@.@@@..@.@@@.@@.@@@@..@.@@@...@@@@@.@@.@@@@...@.@@.@@@..@@@@@@@@...@@.@.@@.@.@@@@.@@.@.@.@.@@@@@@@..@@...@@.@@@@..@.....@.@..@@.@@@@@@@
132
+
.@.@.@@@@@@@.@@@@.@@...@.@@@@.@@@.@@@@.@@..@@..@@.@..@.@@@.@@@@@@@@.@@...@.@.@.@.@@@.@@.@.@.@@.@.@@.@@@@....@@..@.@.@@.@..@@.@@@@@..@@.@@
133
+
..@.@...@.@@..@@@@@.@.@@@@...@@@@@@@@@.@@@@@.@@.@@.@@@@@.@@@.@@.@.@..@@..@.@@@@@.@.@.@..@@@@@@.@.@.@@.@@@@@@@..@...@@@@@@.@@@..@....@@..@
134
+
@@@..@@.@@......@.@@@@.@.@..@.@@@..@@@.@.@@@.@..@@.@@.@...@@@.@@@@.@@@@@@@@@@.@@@.@..@@.@...@@@@@.@.@@@@.@...@@@..@@@@.@@...@@@@.@...@@.@
135
+
@@@@.@@@@@@@@@@@.@@.@@@@@.@@....@@@@.@@@.@@@.@.@.@..@.@@@@@@..@.@@@.@@@@@@.@@@..@..@@@@@@@@@@....@@@@.@@...@@@@.@@@@@.@@@..@@@@.@.@@@@@@@
136
+
@.@@@.@@@@..@@@@.@.@.@.@@@@@....@@@@.@@...@@@@.@@..@@@.@@..@@.@.......@.@.@.@@@.@..@@@.@.@@@@@@@.@@@@@.@@@.@@.@@@@@@.@.@.@@@@@@@@.@.@@.@.
137
+
@@...@@.@@@@.@.@@@@.@@@@@@@@@@.@@@.@...@.@@@@@@@@.@.@@.@.@@@@.@@@.@@@@@@.@@@@.@@@@@..@.@@..@@@@.@@.@@@.@.@@..@@@.@..@@.@.@@..@@.@.@@@.@@@
+10
inputs/day4test.txt
+10
inputs/day4test.txt
+100
src/day4.zig
+100
src/day4.zig
···
1
+
const std = @import("std");
2
+
const StringTokenIterator = std.mem.TokenIterator(u8, .scalar);
3
+
4
+
const MAX_WIDTH = 137;
5
+
6
+
const Grid = struct {
7
+
data: [MAX_WIDTH][]u8,
8
+
maxX: usize,
9
+
maxY: usize,
10
+
11
+
pub fn isRoll(self: *const Grid, x: isize, y: isize) bool {
12
+
if (x < 0 or x >= self.maxX) {
13
+
return false;
14
+
}
15
+
if (y < 0 or y >= self.maxY) {
16
+
return false;
17
+
}
18
+
19
+
return self.data[@intCast(x)][@intCast(y)] == '@';
20
+
}
21
+
};
22
+
23
+
fn newGrid(lines: *StringTokenIterator) !Grid {
24
+
const line_len = lines.peek().?.len;
25
+
var grid: [MAX_WIDTH][]u8 = undefined;
26
+
27
+
var i: usize = 0;
28
+
while (lines.next()) |line| : (i += 1) {
29
+
grid[i] = @constCast(line);
30
+
}
31
+
32
+
return .{ .data = grid, .maxX = line_len, .maxY = i };
33
+
}
34
+
35
+
pub fn run(input: []u8) !void {
36
+
var lines = std.mem.tokenizeScalar(u8, input, '\n');
37
+
38
+
const grid = try newGrid(&lines);
39
+
40
+
var answer1: u64 = 0;
41
+
var answer2: u64 = 0;
42
+
43
+
// Need to figure out how to not make this ugly, but too tired
44
+
for (0..grid.maxX) |i| {
45
+
for (0..grid.maxY) |j| {
46
+
if (grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)))) {
47
+
var adjacent_count: usize = 0;
48
+
49
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)) - 1));
50
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j))));
51
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)) - 1));
52
+
53
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)) - 1));
54
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)) + 1));
55
+
56
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)) + 1));
57
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j))));
58
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)) + 1));
59
+
60
+
if (adjacent_count < 4) {
61
+
answer1 += 1;
62
+
}
63
+
}
64
+
}
65
+
}
66
+
67
+
var removed = true;
68
+
69
+
while (removed) {
70
+
removed = false;
71
+
72
+
for (0..grid.maxX) |i| {
73
+
for (0..grid.maxY) |j| {
74
+
if (grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)))) {
75
+
var adjacent_count: usize = 0;
76
+
77
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)) - 1));
78
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j))));
79
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)) - 1));
80
+
81
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)) - 1));
82
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)) + 1));
83
+
84
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)) + 1));
85
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j))));
86
+
adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)) + 1));
87
+
88
+
if (adjacent_count < 4) {
89
+
answer2 += 1;
90
+
grid.data[i][j] = '.';
91
+
removed = true;
92
+
}
93
+
}
94
+
}
95
+
}
96
+
}
97
+
98
+
std.debug.print("Answer P1: {d}\n", .{answer1});
99
+
std.debug.print("Answer P2: {d}\n", .{answer2});
100
+
}
+2
src/main.zig
+2
src/main.zig
···
2
2
const day1 = @import("./day1.zig");
3
3
const day2 = @import("./day2.zig");
4
4
const day3 = @import("./day3.zig");
5
+
const day4 = @import("./day4.zig");
5
6
6
7
pub fn main() !void {
7
8
var args = std.process.args();
···
35
36
1 => try day1.run(input_content),
36
37
2 => try day2.run(input_content),
37
38
3 => try day3.run(input_content),
39
+
4 => try day4.run(input_content),
38
40
else => {},
39
41
}
40
42
}