-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday24_1.py
408 lines (400 loc) · 12.8 KB
/
day24_1.py
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
class Day24_1:
input = """swswswnwnweseseseenwwswsenewseseseswsw
nwwsweswswseswswswwwwswwswwswew
ewswnesenenwenenesenenenwnewe
newsewneesewseseeseseseesewewsese
enwseewneeesweeeenwesenewsene
nwnwnwnwsenwnwswnwnwnwnwenenenwnwnwneww
swswswwwswswseswseeese
seesewseeseseeeseseesesese
eeeneneeneeeewneseeenenenweew
seseeseseseeenweseswsesewewsesesenene
nwnenenwwnenwswsenwnenwsenwnwsewseswnene
nwnwnwneswnwsenwnwwnwswnwnwnwenwnwnwe
swwswswwsweswswswswwswswsw
wseseeseseneswenweseweesenweswe
nwneenwnenwnwnwseswnenwnwseswnenenwnwwne
seseswswwswswswwswnesenwswseswswneeswswsw
swsenenenwswseneswswswwwnwswwesewenw
swnewneeeweeenenwneeeseeewew
esesenwswnwsenwswswseswnweswsenwseee
swnwneswswnwswsesweseenwsweswnwswswsw
eswswnwesewwnenesesenewneweswwswsw
nwneneneneneneseneeneneeeneswnenenewe
eneneswsenwsweneswnwneswnenenewnenenwswe
ewwwwwewwwwwswwwswwwnwsw
seeseseenweeeneeseeeseswesesesw
neeeneneeenenwseneswwnwnenweneneswe
wwneenwwnweweneeeswewseseneee
nwnwwwwsewnwwwnwnenwnwwnww
sewweneeneneewnwnenenenenesenesew
wwswnwnewwwwnwnww
wwswwwweswsenwne
swneewnweseseenwseeeseeseseesenwne
ewesenweeeseswnwese
sesweenweseseseswenweseseseseeseee
seseseseseeeseeseewswsenenwsesesese
eenwsweswnwwnwnwswswswswseswswswswswsw
eeseeeeswseeenenweeeeeee
nwwwwwnwnwnwnwswwenwnw
eneswsenweesenwseesweseswewwseee
eeeweeseesene
wwnwnesewnwnwwwwnwenwnwnewsenwnwnw
eseeeswneeeeeenwneenee
neneneneneneneewnenwnenwne
seswsenwseseswseseswswsewnesesesesesese
neesenwseswsesesesenwswsw
swnweweweseneseeweswnwsewswnenwsw
neswneneswewwnwseseswseesesesesesenesw
swnwnenwnenwnenwnwneseenesewnenenenese
sesenwseswsesesenwsweseswwswswsesese
neeseswswseseneeenesesesewesenewsese
swnwnwwswnwweneenwwswnenewenwsese
esenwnenenenewseswneene
eneswnwweswnwwwnwnwwswenwwseene
sesenewsenwswwseeesenwseesewswsenenwne
nenwnenwnenenenwsenenewnenene
sewwwswwwwwsewnewwwwwnewnew
nwneneneneswnewwneenenesenwwneneseene
seeeseseseseseseseeesewesese
newnesewnesewswnewwwsesewenewnwnwsw
eseswseseseneseswsesew
wewnwswswwswswswswwwwwsw
eseseeseeswesenwsese
wnwenwwnewwwnwwswwwwsewnw
wsenwnwnenwwwsenwwnewswwwwsenenwww
wswnwsenenwwnwseewwwswnenwnewww
seeeneenesweeesweenw
eeswnewwnweneneseneeneenesee
sesenesesesesesenwsesesesesenwsesesesesesw
wswnenenesewneseenwnwewweewsew
swnwneneeeeeneeeneweenweneswe
seeeseeweeeewneeseesenwseseee
sesesesesesenesesesesenwseseseseseseseswnw
neseeeeeeeweswseeeeeewsee
nwnwnwnwnwwswnwwnwnweswsenwnwweenw
wnwnwwnenwwnwnwnenwnwnwsesesenenenenwnw
senesesesesesesesesesesesesewse
swswseswswseneswswenwswsenwwswsenwswsw
neneeeeneeeeeswneeeenene
nenwneneseneneneseswnenwneenenewnesenene
swswneneneneweseenene
wenwsenewnewnwsenwenwwswswswswseswsenw
wneswwnwewewwwwwswswwwwww
sewsenwseseseneneseseseseswswseswseesese
nenenenwseeeeneneneesw
seseseeesewnwsweeseseeseesewenesese
swnweseeswwwswswnw
nwewewwnwswswwwswweswswswwneswsw
nwneneeneneeswwswsenwseneswnwswnewnene
seneneeseswesewswswswnwwswswnwnwseswnew
seseswsewswsesenwswsesesesesesesewnesenesw
wwenwnwwnwsenwnwnenwwwnwnwsenwwne
seswswseweneswneseswwwesweseww
senwsesesesenwseswseseseseseeswseesesee
eeeewseeeseee
weeswseswenenwneeeeneeseseeswe
swswwswseswsenwswsewnesenwneswseeswsese
swwwseswwsweswswsewswswswnwnenwswsw
swswswswneseswswneswswswswswseswneswswswsw
wnenweweeeweneeseeeeeswwne
newsweesenewnwesweenesweneneene
swswswswneseswwswswewwnwswwswwswwse
swseseseswsesesewseseeneseswsenwseseswse
senwwnwneesenenwnwswnwnwnesenwnenwnwnw
sweneswewswneeenweewneeeseenwsw
swesenwwswnwswenwnwswswswswswsewneswsw
swsenenwswwnwswseswswswesesesesw
neneenwseswsesesesweseseswseseesenwse
nenwnwnwwnwnwsenenwnenwnwnwnenene
nenenwswnwnenwnwnwnwnwnwnwnwnwneenwnwse
seeenweseseswweeseenesesesweenese
seeeneeesenewneneeneneeenenewnee
nwnenwnewnenenenesenenenenenenenenw
swswseswseswswswnwsenesw
swswsesewseseswswsesesweswwswswswnesenesw
wnewswneswwswswwswswswwesweseseswnw
newsenwnwsenwsesewsewnenwwwwswwsw
nwseewwwsenwwnwnwwwseenw
sweeesweeneneeeenweenweeneee
swnenewwneneneneneneseneneneneseneseswwne
eeswnwewneenweneeswse
seseseseseseswseswswseseesenwsesesenw
seseseseseseswsesesesesesenesese
nenenenwnenenwneenwnenenwnenwneswnesew
nwnesesenenwnwswswnenenwnwwnwwnenenwneene
senwnwnwnwsewwnwnwnwnwnwnwnenwnwwnwnw
wwwwsenwwwewwneswwwwwwww
swswswswnwswnwseswsesweswswswswswnwnweswsw
neeneneneeneseneeneenewenene
seseeseweeseseseeseeese
nenwnwnwsenwswwenwnwnwnenenwnwnenenwnw
nwnwenenwnwnenwnwnenwnwnenew
senwwnwswenwenenewnene
nwnwnwenwswwnwenwwwswnwnwnwenwnwnw
swneswswweswwswswswswsweswwswswwwsw
nwnwnwnwswnenwnwnwnw
newswnenenwsesenenwsewswnesw
neswswnwnesesweswwwnwnwseeswnewnesw
nwenwneeneeneseneseneene
swwswswswsweewswenwswnwswwse
seseseseesweseseeeewnweneseseee
weneeneeeseneeeneeneeswnenwnenene
swnweenwnwnwnenwnwnwnwnwnewnwnwnwnwnw
swwnwwwewswwenwnwwwswwsee
swnwnwseeswswseswsweswswswswsw
nwswwnewewwwwsewwweneswwwsw
seneenewwswswswsenwwswnwswwswwne
swsweswnwswswswswswswswswwneswswswesw
wwswswwwswwwwwnwneswswswsewwnew
nwenweswneswneeswneenwneneneeeee
senewnenenesenenenewneseneswwnenenenenene
wsenwewseneswseswnenwswswnesewneeeese
eenwnwesweswnwsenwwnwnwswnewneswe
wnwsewwnwnwwnewsesewnwwewwswnese
nwswneswswswwswwsesewnwseswwswnwswesw
eweeneeeseeeswneeeseweeeneee
eswswseswseseseswswwnwswswsw
weswwswswseswswnwswnwnwseswnweswee
swswswnwswseswswseseswswswnesw
neneeneneneswneneneneneneneswnewnwswsene
enwswneneneneswnwsweswnesweswenwwsw
nwsenwnwswnwnwnwneenew
weseeswwnweneewsweeswseeneenwe
eswsesenwsweseswswswswswnwenwswwsw
neswnweseneenenwneneswnwnenenwnenenwnene
nwwseseneeseseseswseswwswwneseeesese
nwseswnwnwenwnewnwnwnwnwnwnwnwnwnwnwwnw
sweseeneenesesweneeenweeeenwneew
newnwweswesesenw
eseneesweesweseweeeeeewnesene
nesenwnwnenwnwnwnenwsewsenwnwnwnwnwnene
sewnenenenenweseenwneneswnwne
swswswswswswswwwwe
neneneneneseneenenenenewenee
newseeeeseseesweesewnweeeene
nwswewnenwnwnwnwneswwnwwnwneneenweee
swswnwwswnewwswsewwwesewnwwww
ewwwswwwwswwwwwwneswwseww
nweneseneenewneneenwwwnewnenenwnw
eseeewseswnwneseeneeew
nwseenwnwnwsenwsenwnwnwnwnwnwnwnwwnwwwne
neeeswnweneeswneneeneneeneeeswene
wswesenewswwwswswswnenwswwwswnwsw
sewnwnwwwnwnesenwwnwwsewwwsewnese
eeeeeesweeneeeeseweeneee
wnesewwewwnwnwnwwwwnwwwwnww
wwseswswswwwweswswwsesenwneswwnwsw
senwenenenenwwneneneneswnenesenenenenenew
seswswwseswneseswwswnesweswswswwswsw
wnwnwswwwwswseswwwsewe
nenenenwswnenewnwnenenenenwneneneenesene
eesenweweseeeseeeweeeswsee
swewnweeneeneenese
eeeeesweeneneweeeweeeee
nwsenesenenwwwsewnwneswenwnwnwnwsew
swswswswnwswseeswswsesewsenesw
swsewwswseeswneswsesweswseswswseswswsw
enewwswnwswneeseneneneenenwnese
eneewewseeeeeneeneenewe
neneeseswnwwnwseseeewwsesesesw
senwnesesewseseseseeswsesesesesesesesewse
nenenwnwnenwnesenwwnwnenenenwnwnenw
senwnwswesesewswseswseneswswsw
nenwnwenwnwwwnwnwnwnwnwnwwnwnwnwswsw
neseswswnwseswswswswswsw
seeeseeseseeeseswnwseenesenwsewswse
swswwswswswneswswseswswseswneswseswse
swwwswswwwwnwwewswsweseswnwswsww
wswnwenwwnweneseewnwnwswnwswswwnew
nweswnweeneswneseeeeneswsweswneese
seeeeeeeenwsweeeeesweneee
wseswneswswswewwwwswwwwswswswnwsw
swnesenenenwnwnwnene
nwnwnwnenwnenwnwewseenwnwswnwwnene
sesesenwnwsenwsewnesenwseeenwsw
ewneseswswswswweweswswseswwneswswse
eeseesenweenweeeeeneeewesese
sewnesenewneweneneneweneneeneneswnee
swswswneswswwsewneswnewsesweenwswswswsw
swswnwswweswseseswnwsewnwnwseneesenesesw
nwnwnwnwswnwwnwnwnwnwenenwnwnwnwnwenw
nwswnwwswnwnwnwsewnwwnwnwwnwwwnenwenw
neswwswseswneswsweswnwswwswswswwswswsww
wwneswwsewnewwnwnwwwwwwnwnww
nenwneenenewneswnenenenenenenenenenwe
seswseenwwnewwenenwneswnwseseswswsese
swwesesenwseseneseswswsesenwsesenesese
swsweseseswwsesweneeseswsewnwswnese
nwwenwwswwewwnweswnwsewswwww
nwnwnwnwnwnwnwwnwenwenwwenwnwnwswnw
wwwnwnwsenwsewwswwwnese
senwneneweseseeseesesw
neneeeenenweswenesweeeeeneee
eeeeeeeeesenw
nweenewwsenwwnwnwswnwseenwwwnwnww
neeneseneseneneenenenwwewsw
nweenwewenweeeesesweswnenenenene
enweswnwenwnwwseneswnenwnwwnesenenwnw
wwwwwwwwwswsenenewse
neswwwswswsweswswswwneeseswswnwesw
eseseeneeeseenwsenweesesesweesesw
nenenwnesewsenewnenenwnenenenenesenenesew
swwwswswwswswswseswsewnewwneswswwsw
neeswneeenewenesesweeneenweenee
enwnwewseseeseswswswsenenwswseswsesenwsw
eweeswesweenweseweneneeeesee
weneswswwwnewseeewswseseesewe
nwsewneneneswesewwsenwenwenesewesw
neseswswwsesenwsesesesesene
nwnwwwnenwsewnenwwnwnwswwwnww
wnwnwnwwnesesewnwnwwnwnwnwnwnwnwww
senwswwswnewwnewwwwswwwswnwsweww
wwswnwwswnwseeswswneswseneewswwesw
swsenwswswswenwwswnwsweswswwsweswswswe
eseeeeesenweeenweeeseeeneenw
nwswseswseswswnweswsese
esenwswweeeeswsesenee
neneswneswswwnwsenwswseswswnesweswsewwnw
nwnwsenwnwnwnenwnwnwne
enesesewseseseseseseseneseseseswsesee
neeseseseseseesenwswnwswswwswseseswswsw
wsenenwewswenenwwwenenwnwesewsw
seenewsesesesesesesesenwsenenwseseswsenw
swsenwswseseswseseenesesesesesesesese
neenenenenenenewenewsenenesesenewnene
eneneseeeeswnwneeeeeeweeeenwse
eeeswewsweeeswnenweeneewnwew
wswwswwnewwwswswswsewswwnwwnew
nesenwseseeseeswseswsenewenwseswnewsene
seeesenwswseseenweswnwnesweewnwsw
eneeeeeeeweee
sewewnweneswswnwnenewneswswseesee
seswnenesewwnwnesenwnewnenenenesewnenese
senenenenwnenenenenwnenwnenwne
nwnwwwwwwwwwwnwwenwsesenwnewww
wewnewwwwwwwwwnwseswnwswwse
wnweswswnenwneenenenewnwnenenwewnwsw
wwwswwwwweswnwwswwwenw
nwwnenenwenenwnwswswenenwnweneswnwnwsw
swneseswseseseswsweswnewswnesenenwnesw
swsesenesweswneeeeesweeenwnwesee
wnwwnwsenewwwnwwnwnwnwnwnwww
nwnwwnwnwnwnesenwnwsenwwnwnwnwnwneenw
neseeseesesewswswswseswneswsenw
wnwwnwwenwwwwwwnwnwnewwsenww
wnenenenwnenwnenenenenenenesee
newwsenesewweneseweseswneewwsenw
wswswwseseswswneswnwwnwswseswswwnw
neswnenenenenenenwnenenenesenwseneenenwne
nwwneswnweneneenwnwnwnene
neseswesewnewenew
wwwwwwwnwwsewwwwneww
wnwnenwewenwnwnwnwwsewnwnwwswwwnww
wwweewwewnenewsenwsenesenwswsw
swwswwwwnenweneneswsesenwnenewseseww
ewwnenenenenesewneneneswnenesesenene
swewwswswswseneswswswseneswneswwswswse
enenwswnwwneeswweswwewwwseesenw
swnenwswnwwsewnwswnwewesenenewwswww
neenwnenwnwnwwsewnwnwseswwnwenwnenese
ewesewesenwseseneswneweeswneneesw
neneswenenwweneeeneneneneeneneee
wnwnwnwwwewwneswwwnwewwswnwse
neesweeeneswnwwenewneeseeneseene
eneeeweseewe
sewswenweeneeeesenweeeeeeesw
nenenenwnenwnenenenwwsenenewenenwnenw
sesewwwwnewwswwnwsw
senewneneneneeneneenenenenenenewe
newnwnesenenenenenenenenesenenesenewne
swnwseneseseseseseswswswswneseseswswwse
nwneeenewswsweneeeswweseesesesenw
neeeewwnweseenesewneeneneswnenesw
neswenwseeseeseseneesewsenwnwseee
esweeenwnwsenwswswseswnweneseeesee
seeseseseeswwsewesewnesenenesesee
eseeeweswswseweneseeeenwsesenwse
nenenwneneswnwswnwswsenwnwnenwnwnwnwsew
wseswwwnwwewnwswwswwswwswswsenw
wnwseswwwwwwwsewwwwswne
weswswewnwnwwwwnewwwnwwwswwnw
senenenenwnewnenenene
wneenenwseneswnwnwwsenwnwnwnwnwnwnwnw
nenwsenenewneneesenwswnenwnwwwsenenene
swswweeeeneeneenweeeeewnwe
enewnwewswnwnwwesenwnwnenenenw
eeseswenwseseeeeesese
neeswseswswsesenwswnwseeswnwswseesew
sewwwswwwwwwsewneswwenewnese
swswswswswswwneseswswswswswswwnwsewsw
wwwewnwwwsewnwwwnesewwwswwnw
neeeneeeenenenenenwese
wwsenwnwsewnenewwwsewwwwswwne
eswwnenwseenwnwswnwswnwewsenwwnwwwe
eseeeseeewswneeesenesese
seeseseseseeseseseseseesesenwnweesw
seesesewseswseeseseenwnwsesesesesee
ewwswswnewswnewswswwswwnewwwsew
swswswswseswswswswwswneswswwswwswnesw
nwnesewwwwwwnewwnwwswnwwwnesw
seswnwesesesesenwswseseswswsenw
wswswswnwnenewsesenwewsesewswnwswwww
nwnenwseneswsenwneenewsesenenwnwewnwnwsw
nwseseeeseseseeseseeseee
swnesenwswsenwesewswwseseseswneneeswsw
weswnwnwnenwenwsenwwnwnw
seeeseseeeseeseswwsesesesesenwsese
seswnweswswswswenwseswseneeswswnwseswsw
wwwwwwenwwwwww
eswswsewnwseseswseseswseswwseeswsese
nenwnwnwnwneswswswnenewnenenese
wsewseswwwwnewwwwwneweneww
wseswswenwnwswwseswswneeseewneneenwne
eeswneenesenwsweenwseeswseeesee
swneswswswswewswswswwswwneswswwwnesw
eswwwseeeneneeswnwwnweneneeneesw
neswenenweseswnwneneswsweswnwsewnwne
nenewseseneseswneswnwnwwsewwseswnwe
eeneewwwwnesweeseesewsene
wwwweneneenwwwwsewsewsewwe
neswseseseneeswswswswseswsweswwsewswse
wwswwewewwwwnwswewwwwwww
seseseseneeeseseswswsesesesewnenenwsesw
swnwnwnwwnwnwnwnwnwwnesewnwesewwnw
swsweswswswnwneswswseswswnwswsweswwwsw
nwweeneswneswwwnw
wwnenwwnwsenwnwnwnwww
wwnwwwnwwwwwnwwwweewwwsw
esewwwnwnwnwwwseswnwseseswnewseswwne
nesesesesewseseesesesee
seseseswseweseseswseesesesewswswnwese"""
def __init__(self):
lines = self.input.split('\n')
dirs = {'nw': (-1, 1, 0), 'w': (-1, 0, 1), 'sw': (0, -1, 1), 'se': (1, -1, 0), 'e': (1, 0, -1), 'ne': (0, 1, -1)}
black_tiles = set()
for line in lines:
# left to right, vertical, right to left
cur = [0, 0, 0]
i = 0
length = len(line)
for _ in range(length):
if i == length:
break
elif i == length - 1:
d = dirs[line[i]]
cur = (cur[0] + d[0], cur[1] + d[1], cur[2] + d[2])
break
if (line[i:i + 2] in dirs):
d = dirs[line[i:i + 2]]
i += 2
else:
d = dirs[line[i]]
i += 1
cur = (cur[0] + d[0], cur[1] + d[1], cur[2] + d[2])
if cur in black_tiles:
black_tiles.remove(cur)
else:
black_tiles.add(cur)
print(len(black_tiles))
Day24_1()