@@ -7,11 +7,12 @@ import (
7
7
)
8
8
9
9
type Hex struct {
10
- I , J , K int
10
+ I , J , K int16
11
+ pad int16
11
12
}
12
13
13
- func Cube (i , j , k int ) Hex {
14
- return Hex {i , j , k }
14
+ func Cube (i , j , k int16 ) Hex {
15
+ return Hex {i , j , k , 0 }
15
16
}
16
17
17
18
var dir = map [string ]Hex {
@@ -64,12 +65,12 @@ func do(fileName string) (ret1 int, ret2 int) {
64
65
for c , v2 := range hexmap {
65
66
if v2 {
66
67
ret1 ++
68
+ // neighbourcount[c] += 0
67
69
68
70
for _ , v := range dir {
69
71
v .I += c .I
70
72
v .J += c .J
71
73
v .K += c .K
72
-
73
74
neighbourcount [v ]++
74
75
}
75
76
}
@@ -78,107 +79,42 @@ func do(fileName string) (ret1 int, ret2 int) {
78
79
for day := 1 ; day <= 100 ; day ++ {
79
80
hexmap2 := make (map [Hex ]bool )
80
81
neighbourcount2 := make (map [Hex ]int )
81
- min , max := minmax (hexmap )
82
- for i := min .I - 1 ; i <= max .I + 1 ; i ++ {
83
- for j := min .J - 1 ; j <= max .J + 1 ; j ++ {
84
- for k := min .K - 1 ; k <= max .K + 1 ; k ++ {
85
- c := Hex {i , j , k }
86
- n := neighbourcount [c ]
87
- // n := neighbour(hexmap, c)
88
- if hexmap [c ] {
89
- if n == 0 || n > 2 {
90
- // hexmap2[c] = false
91
- } else {
92
- hexmap2 [c ] = true
93
- for _ , v := range dir {
94
- v .I += c .I
95
- v .J += c .J
96
- v .K += c .K
97
- neighbourcount2 [v ]++
98
- }
99
- }
100
- } else {
101
- if n == 2 {
102
- hexmap2 [c ] = true
103
- for _ , v := range dir {
104
- v .I += c .I
105
- v .J += c .J
106
- v .K += c .K
107
- neighbourcount2 [v ]++
108
- }
109
- } else {
110
- // hexmap2[c] = false
111
- }
82
+ for c , n := range neighbourcount {
83
+ if hexmap [c ] {
84
+ if ! (n == 0 || n > 2 ) {
85
+ hexmap2 [c ] = true
86
+ for _ , v := range dir {
87
+ v .I += c .I
88
+ v .J += c .J
89
+ v .K += c .K
90
+ neighbourcount2 [v ]++
91
+ // neighbourcount2[c] += 0
92
+ }
93
+ }
94
+ } else {
95
+ if n == 2 {
96
+ hexmap2 [c ] = true
97
+ for _ , v := range dir {
98
+ v .I += c .I
99
+ v .J += c .J
100
+ v .K += c .K
101
+ neighbourcount2 [v ]++
102
+ // neighbourcount2[c] += 0
112
103
}
113
104
}
114
105
}
115
106
}
116
107
hexmap = hexmap2
117
-
118
- count := 0
119
108
neighbourcount = neighbourcount2
120
- for _ , v2 := range hexmap {
121
- if v2 {
122
- count ++
123
- }
124
- }
125
- ret2 = count
126
- // log.Println("Day", day, count)
109
+
110
+ ret2 = len (hexmap )
111
+ log .Println ("Day" , day , ret2 , len (neighbourcount2 ))
127
112
}
128
113
129
114
return ret1 , ret2
130
115
}
131
116
132
- func minmax (hexmap map [Hex ]bool ) (Hex , Hex ) {
133
- min := Hex {}
134
- max := Hex {}
135
- first := true
136
- for k , v := range hexmap {
137
- if ! v {
138
- continue
139
- }
140
- if first {
141
- first = false
142
- min = k
143
- max = k
144
- continue
145
- }
146
- if min .I > k .I {
147
- min .I = k .I
148
- }
149
- if min .J > k .J {
150
- min .J = k .J
151
- }
152
- if min .K > k .K {
153
- min .K = k .K
154
- }
155
- if max .I < k .I {
156
- max .I = k .I
157
- }
158
- if max .J < k .J {
159
- max .J = k .J
160
- }
161
- if max .K < k .K {
162
- max .K = k .K
163
- }
164
- }
165
- return min , max
166
- }
167
-
168
- func neighbour (hexmap map [Hex ]bool , c Hex ) int {
169
- count := 0
170
- for _ , v := range dir {
171
- v .I += c .I
172
- v .J += c .J
173
- v .K += c .K
174
-
175
- if hexmap [v ] {
176
- count ++
177
- }
178
- }
179
- return count
180
- }
181
117
func main () {
182
- log .Println (do ("test.txt" ))
118
+ // log.Println(do("test.txt"))
183
119
log .Println (do ("input.txt" ))
184
120
}
0 commit comments