-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdevice.go
More file actions
509 lines (453 loc) · 55.2 KB
/
device.go
File metadata and controls
509 lines (453 loc) · 55.2 KB
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
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
package main
import (
"os"
"fmt"
"strings"
"strconv"
"sort"
"time"
)
const day1 = "day1"
const day2 = "day2"
const day3 = "day3"
const day4 = "day4"
const day5 = "day5"
const day6 = "day6"
const day7 = "day7"
const day8 = "day8"
const day9 = "day9"
const day10 = "day10"
const day11 = "day11"
const day12 = "day12"
const day13 = "day13"
const day14 = "day14"
const day15 = "day15"
const day16 = "day16"
const day17 = "day17"
const day18 = "day18"
const day19 = "day19"
const day20 = "day20"
const day21 = "day21"
const day22 = "day22"
const day23 = "day23"
const day24 = "day24"
const day25 = "day25"
type device struct {
frequencies []int
frequency int
found []int
boxIds []string
claims []string
unclaimedAreas map[string]int
logEntries []string
guardMinutes map[string]int
guardMinute map[string]int
guardTimes map[string]int
polymers string
polymerLength int
}
func main() {
var pInputs puzzleInputs
// skip first arg, which is program name
args := os.Args[1:]
var d device
switch arg := args[0]; strings.ToLower(arg) {
case day1:
d = device{frequencies: []int{-15, -17, -16, -12, -4, 10, 10, -19, -18, -6, 4, 4, 5, -11, -4, -12, 1, -8, -10, -16, -18, 17, -16, -7, -5, 2, -4, -1, 13, -19, 12, 19, 5, 11, 1, -16, -8, 19, 15, -14, 1, -12, -17, 10, -3, 5, 7, 4, -10, 5, -7, 15, 11, 10, 19, -17, -3, 14, 8, -14, 7, 11, 16, -7, -1, 6, 4, -1, 15, 17, -10, 4, 16, -18, -10, -2, -18, -13, 15, -7, -14, -12, -2, 1, 7, 5, -1, -19, 1, 9, -20, -9, 1, 16, -7, 11, 14, -24, 4, -3, 21, -17, -10, -44, 13, 2, -9, -15, -17, -8, 13, 4, -1, 4, 1, 2, 6, -18, 1, 19, 4, 7, -15, -12, 4, 17, -3, -15, -19, -19, -17, 16, 17, -19, -3, -9, 4, 12, 12, 12, -21, 17, -19, -4, 16, -4, -18, -16, 15, 14, 12, -6, 16, -1, 16, 6, -4, 6, -4, 11, 20, -7, 12, 51, 19, 15, -2, 12, -9, -6, 1, 10, 1, 19, 8, 3, -1, -19, -2, 4, 11, 8, 2, 10, 14, 4, -8, 9, -13, 18, 5, -8, 15, -19, -13, -13, 10, -4, -16, 17, -3, 7, 20, 18, -12, 13, -10, 14, 19, 17, 7, 7, 3, 17, -8, -4, 1, -8, -12, -1, -15, 9, -7, 6, 10, 4, 4, -14, -9, -19, 13, -5, 19, -17, -1, 5, -13, 2, 4, 15, 8, 10, 8, 17, 17, 1, 6, -15, 5, 12, 11, -3, 12, -6, -17, -17, 10, -15, -5, -1, -4, -3, 5, -21, -2, -18, 3, 19, 10, 15, -5, 17, -14, 6, 7, 3, -11, 6, 20, -9, 6, 6, -10, -9, -8, 16, 19, -9, 5, 6, -3, 12, -8, 7, -1, 16, 17, -19, 3, 11, 18, 19, -16, 11, 11, 5, 11, -25, 13, -7, 9, -18, -16, 18, 22, 35, 82, 8, 11, 19, 17, -11, 19, -16, 1, 21, 17, 18, -9, -10, 8, -15, 4, 20, -19, -10, 2, 22, 11, -5, 16, -7, -7, -15, -11, 28, 13, -7, 1, 3, 11, -7, 3, -15, 34, 5, -22, 7, -15, -2, 29, -45, -51, -6, 10, 6, 22, -17, -24, -12, 38, -71, 46, -10, -19, -15, -115, -26, -17, -2, 4, -15, 9, -4, -10, -14, -4, -18, -18, 21, 8, 13, 15, -13, -6, -6, 7, 4, 12, -7, -20, -14, -22, -2, -16, -7, -2, 12, -24, -18, 35, -45, 128, -2, 22, -10, -17, 14, -4, -11, 13, -6, 29, -40, -11, 7, -25, 5, -10, 58, -171, -169, -93, -106, -61611, -19, -3, -3, 14, 1, -6, 11, -7, -16, -13, -7, -14, 12, 4, -8, -12, -2, -3, 14, -18, -10, 3, -7, -15, -3, -13, 3, 1, -15, -5, -11, 15, 14, -9, 6, 2, 13, 5, 15, -9, 5, 2, 15, 18, 16, -17, -5, -18, 1, 6, -25, -17, 5, 13, -14, 7, 9, -11, -19, -13, -15, 9, -10, 5, 7, 6, -16, -11, 1, 1, 15, -18, -9, -1, 6, -17, -5, -19, 15, 7, -15, 7, 19, -7, -10, -5, -1, 17, 15, -3, 14, 5, -7, -8, -14, -8, -23, -18, -14, 11, 1, 7, -18, 1, -5, 6, -9, -7, -19, -2, 17, -2, 8, -10, 7, -22, -14, -10, -8, 17, -19, -12, 15, 9, -16, 9, 16, -5, -18, -4, -7, -4, -17, 14, 1, 8, -10, 3, -19, 7, -11, 14, 12, 12, -4, -19, -10, -8, -1, -16, -2, -7, -15, -5, -2, -15, 11, -17, -1, -5, 1, -9, -3, -13, -14, 8, -17, -4, -4, -12, 3, 1, 19, 2, 2, 5, -2, -9, 19, 17, -2, -19, 13, 12, 16, 10, -11, 12, -5, 10, 5, -7, 18, 11, 1, -15, 6, -10, 17, -19, 18, 8, 11, -2, 19, -21, -18, -18, -15, 4, 18, 13, -4, 14, 19, -7, 9, 7, 21, 18, -4, 18, 15, -6, 16, 8, -12, 3, -18, 4, 20, -8, -9, 15, 12, 1, 17, 6, -9, 13, -12, -13, 10, -6, -1, 17, 12, -18, 4, 5, 11, -6, 1, 14, -17, 4, 17, 9, -15, -8, 7, 5, -7, 14, 5, 13, 7, -1, -7, -10, 14, -6, 26, 15, 1, 13, 13, -11, -6, 16, -2, -19, 8, -14, 7, -16, 21, 17, 3, 21, 4, -8, -2, 28, 1, -17, 14, -9, 2, -18, 12, 10, 18, -17, -15, -18, 2, 1, -31, 8, -20, -2, -20, -21, 9, 8, 10, -45, 20, 27, 10, -65, 12, -17, -9, -11, 24, 7, -46, -13, 12, -19, 1, -25, 13, -5, -19, 9, -14, -6, 14, 4, -22, -5, -2, -7, 34, 13, -17, -8, 19, 22, -13, 6, 6, 6, -16, 25, 12, 8, -16, -32, -12, -36, -21, 1, 13, -17, -11, 9, 13, 7, -11, -13, -10, -14, 18, 4, -25, 4, -12, 6, -20, -10, 17, -11, 3, -10, -4, -10, 9, -15, -6, 17, 13, -28, -8, 4, -20, 13, -6, 12, -17, -9, -14, 13, -4, 57, -5, 37, -14, 6, -15, -16, -2, -31, 3, 88, 8, -22, 6, 22, 17, 9, -31, -121, -45, 21, -82, -37, -93, -31, -17, 117, -61928, 11, -17, -10, 9, 10, -18, 10, -7, -6, -5, -4, 19, -12, 17, 9, -16, 1, 10, -12, -6, 19, -4, -11, -15, -7, 13, -10, 2, -15, 2, -8, 17, 9, 4, -8, -19, 7, -8, -12, -1, -5, 2, 6, -15, 8, 11, 13, -18, -8, -11, -16, 13, 6, -18, -10, 19, 2, -8, -10, -13, -19, 15, 8, -5, 19, 3, 12, -16, -5, -5, -18, -11, -7, 4, -5, 15, -1, 10, -6, -5, -16, 9, 10, 16, 14, -15, 10, -18, -11, -13, -11, -2, -9, -17, 11, 8, 125143}}
d.Calibrate()
fmt.Println("resulting frequency: ", d.Frequency())
fmt.Println("repeated frequencies: ", d.CheckRepeats())
case day2:
d = device{boxIds: []string{"ybruvapdgixszyckwtfqjonsie", "mbruvapxghslyyckwtfqjonsie", "mbruvapdghslzyckwtkujonsie", "rwruvapdghxlzyckwtfqjcnsie", "obruvapdgtxlzyckwtfqionsie", "lbruvapdghxqzyckwtfqjfnsie", "mbrunapdghxlzyccatfqjonsie", "mbruvapdghxlzyokltfqjdnsie", "ybruvapdghxlzmckwtfqjmnsie", "mbruwaadghxdzyckwtfqjonsie", "muruvapdghxlzyckvtfqjonsim", "mbruvapdghxlkyckwtxqjonjie", "mbruvaqdghxlzyckwtfqjrnnie", "mwruvapdghdlzyckttfqjonsie", "mbruvapdgtelzyckwxfqjonsie", "mbruvapdohxlzvckwtfqjonhie", "mbrugapdgbxlzyckwtfqjynsie", "mbruvapdghxlzyckwtlqjonjiu", "mbruvapwghxlzyckwafqjonbie", "wbruvapdghxlhyckwtfqjonsii", "mbruvapdghxlzyckwtcqnonsiq", "mbyuvapighxlzybkwtfqjonsie", "mbrrvapdghxvzyckwtfqjonsio", "mhruvapdghrlzyckwtfzjonsie", "mtruvapvghxlzyckwtfnjonsie", "mmrlhapdghxlzyckwtfqjonsie", "mbruvapdgpxlzyjkwtfqjovsie", "mbrucapdghxlzymkwtzqjonsie", "mbeuvafdghxlzyckwtfqjonwie", "mbruvapcghxlayckwtfqjonsii", "mbruvabdghxlzyckwtfqyansie", "mbruvjpdghxlzyckwtfqgfnsie", "lbruvapdghxlzyckwtfqjonriv", "mbrupapdghxlzycjwtfqronsie", "mbpuvapdthxlzymkwtfqjonsie", "mbiuvapdgixlzyckwxfqjonsie", "mbruvapdghxyzyckwtfcjonsbe", "mbrurapkghxlzyckwtfqjonzie", "mbrufapdrhxlzyciwtfqjonsie", "mbruvapdghxlzbckwtfqjoisae", "ubruhapdghxlzuckwtfqjonsie", "mbruvapdjhulzyckwtfqjonshe", "mbruwapdgyxlzyckntfqjonsie", "mwruvapdghplzyckwtfqjonsme", "mbruvapjghtlzyckwtfqgonsie", "pbruvapdghhlzyckwtfrjonsie", "mbruvgpdihxqzyckwtfqjonsie", "mbruvahdohxlzyckwtfijonsie", "ibuuvapdghxlzyckwtfqjofsie", "mbruvandghxlzyckwtfqjrnxie", "mbrjvlpdghxlzyckwgfqjonsie", "mbruvapogfxlzyckotfqjonsie", "mbruvrpdghxlzyckutfejonsie", "mbruvbpdghxlzyhkwtfqjonsip", "mbruvapdghxlzyckmnfqjensie", "mbruvapdghvlzyckwtfqjowsix", "mbruvakdgholzwckwtfqjonsie", "mbruvapdghxlzackwtfqconsae", "mbruvapdghxlzyqvwtfqjlnsie", "mprrvapdgfxlzyckwtfqjonsie", "mbrunacdghxlhyckwtfqjonsie", "obruvapdgsxlzyckwtfqjonvie", "murcvapdghslzyckwtfqjonsie", "mbruvapdghxlzyzkwmftjonsie", "mbrwvapdgtvlzyckwtfqjonsie", "mbxuvapdghxlzqcnwtfqjonsie", "mbruvaddghxboyckwtfqjonsie", "mhruvwndghxlzyckwtfqjonsie", "mbrdvapdghxlzyckwmpqjonsie", "mbruvapdgyxlzyckizfqjonsie", "mbruvapdghxlzlckwtfqeowsie", "mbruvbpdgrxlzyckwtfqjonsxe", "mbruqapoghxlzyckwtvqjonsie", "mbouhapdghmlzyckwtfqjonsie", "mbruvapjghxidyckwtfqjonsie", "mbsuvapkghxlkyckwtfqjonsie", "mbruvlpdghxlzycrwtfqjonsis", "mcrueapdghxlzyckwtfqjynsie", "muruvapngbxlzyckwtfqjonsie", "mbruvapdghxlzycawtfyjojsie", "mbruvbpdghxczyjkwtfqjonsie", "ybduvapdghxnzyckwtfqjonsie", "mbruvbpdghxlzyckwtfbjousie", "mbouvapdghxlzycbwtfqponsie", "mbruvaedghplzycgwtfqjonsie", "mbrhvapdghxlzyckytfqjgnsie", "mbruvapdqbxleyckwtfqjonsie", "mbruvapddhhldyckwtfqjonsie", "mbruvapdghxlwrckwtfqjondie", "mbruvapdmhxlzyckwtfqkonsve", "xbbuvapdghxlzyckwtfkjonsie", "mbruvapdghxlzyckwcfqjunkie", "mbruvapdghxlzyckwtfqxonfib", "mbrtvapkghxlzyckwtfqeonsie", "mbruvazdghxldymkwtfqjonsie", "kbruvapddhxlzfckwtfqjonsie", "mbouvapdghxlpyckwtfqjoosie", "mbauvapdghxlzyckwtfqjszsie", "mbruvapdghtlzyckntfqtonsie", "mbruvipdggxlzbckwtfqjonsie", "mbruqapdghrlzyckwtfqjznsie", "myruvacdghxlzyckwifqjonsie", "mbruvapdghxlzuckwtfkjocsie", "mwjuvapdghxlzyckwtfqjonsxe", "mbruvapxghxlzickwtfqjobsie", "mbrupapdghxtlyckwtfqjonsie", "meruvapdjjxlzyckwtfqjonsie", "mbruvkodghxlzyckwofqjonsie", "mbruvapdgexlzyckwtgkjonsie", "mbruvapwghxlzyckwtcqjonsiw", "mbruvapdghxlzykkwtfqtoxsie", "mbruvapdahxlzycgwtfwjonsie", "mbruvapdgwxlhyckhtfqjonsie", "mbruvapbghxlzycbhmfqjonsie", "mbruvapdghxvzyzkwtfqjonsin", "mbrcvapdqhxlzyckwyfqjonsie", "zbruvaxdghxlzyckwgfqjonsie", "mtruvapdghxlilckwtfqjonsie", "bbruvapdghxlzyckwtfmjonsxe", "mbruvajdghxlzyckwtfqfwnsie", "mbruvapdgkxlzyckwtfqionpie", "rbruvapdghxlryckwdfqjonsie", "mbruvandghxlzyckwmfvjonsie", "mbruvahdghxlzeckwtfqjonsme", "mbruvnpcghxlzyckwtfqjobsie", "mbruvapdghqlzyckwtfbjonsiy", "mbruvavdghxlzyckwufqjodsie", "mbruvapdghxlzyckwtfzmovsie", "mbruvlpdghxuzyckwtfqjoesie", "mbruvopdghxlzycwwtfqjansie", "obruvapdghglzybkwtfqjonsie", "mbpuvlpdghxlcyckwtfqjonsie", "mbruvaidghxlzyckwtfmjonoie", "mbruvapdihxzzyckwtfqjonsiy", "mbquvapdghxlzyckwtfqconsme", "mbruvapdghslzyckqtfqjojsie", "mbrzdapdghxmzyckwtfqjonsie", "mwruvapdghxozyckwtfqjonsxe", "muruvapdgfxlzyckwtfqjojsie", "wtruvapdghxlzyckvtfqjonsie", "mbruvapdghxlzyckysfqjxnsie", "mbruvrpdghxczyckktfqjonsie", "mbquvapdghxlryckwtfqjonsne", "mbruvapdghflzycvwtfqjpnsie", "mbruvapughclzyckwtfqjonsin", "mbrhvapdghxlpyckwtfqjonsre", "mbruvapdgtxlzyckwtfqjoosit", "mbrupapnghxhzyckwtfqjonsie", "mmvuvapdvhxlzyckwtfqjonsie", "mbruvaptghxlzyckwtfqjotsse", "mgruvapvghxlzyckwtfqjonsix", "mbrupapdghxszyckwtfqjunsie", "mbruvkpdghelzyckwtfqjpnsie", "mbruvrrdghjlzyckwtfqjonsie", "mbruvapdghnlzyckwtfkjonsze", "mbruvwpdghxlzyckwtfqhoysie", "mbrsvapdfhxlzyckwtfqjobsie", "mbruvapdgexezymkwtfqjonsie", "ybruvapdghxlzyckwtfqxonsiw", "mrruvapdghxdzyckwtfqjossie", "mbruvapdghtlzyckwtfqconsiu", "mbrpvapdghxlzlckwpfqjonsie", "mbruvjpdghslzyckwtfqjjnsie", "mhruvapoghxlzyckwtfvjonsie", "mbrubqpdghvlzyckwtfqjonsie", "mbruvapdghxlzackwtfqconsiw", "mbruvapdgnxlzkckwtfqjdnsie", "mbrudapgghelzyckwtfqjonsie", "mbruvapdghxlzlakwbfqjonsie", "mbpuvapdghxlzyckwtuqjonjie", "abruvapdghxlzykkwtfqjonzie", "mbrupupdghxlsyckwtfqjonsie", "mbrsvupdghxlzyckwtfqjonkie", "mxruvgpdghxllyckwtfqjonsie", "mbrnvapdghxlzycbwtfqfonsie", "mbrbxapdghxlzyckttfqjonsie", "mbnuvapdghxlzyxkwtmqjonsie", "mbrfvapdghjlzickwtfqjonsie", "mbhuvupdghxlzyxkwtfqjonsie", "mbrcvapdghxluyckwtfqjznsie", "mbruvapdghxlzyckwofqjoxsiz", "mbrevapdghxloyckwtfqjonnie", "mbruvipdghnlzyckwtfqjopsie", "mbxxvaptghxlzyckwtfqjonsie", "mbruvcpdghxlztckwtjqjonsie", "mqruvlpdghxlzyckotfqjonsie", "mbruvapdgqxlzyckwtfqjpvsie", "mbruvapdgvxlzyjkwtfqjbnsie", "mbruvapdghxlgyckwtfqcocsie", "mbruvapdghxkwyckwtfqjoqsie", "mbrgvavdghxlzyckwxfqjonsie", "qbruqapdgvxlzyckwtfqjonsie", "mbauvapdghxlzgckwtfqjunsie", "mbruvapdgdxluyckwtfqjoosie", "mbruvapdghxlzykkwtfqwobsie", "mbruvapdghxlzhcnwtfqjonqie", "mbruvapdghxlzycbhmfqjonsie", "mbruvapdghxluyczwtfqjontie", "mbruvapnghxlzyckwnfqjonbie", "moruvapdghxlzcckwtfqponsie", "mbruvapfgxxlzyckwtfqjunsie", "mbruvapdghxlryckvtfejonsie", "mbrzvapdghxlzvcbwtfqjonsie", "mbruvapdgqxlzyckwcfqjonsce", "abruvupdrhxlzyckwtfqjonsie", "mbrubaptghxlzyckwtfqjondie", "mgruvapdgpxlzyckwtfijonsie", "mbruvapdghxczlckwtfujonsie", "mbruvapdgmmlzyckwtfqjonsir", "mbruvapdhhxltyckwtfdjonsie", "mbruvapdghxlzyckwtfdjjnste", "mbrdvzpdghxlcyckwtfqjonsie", "mbruvapdghxlzyckwtnqbonsim", "mbrovapdghxlzyckwtfpjousie", "mymuvapdghxlzyjkwtfqjonsie", "mbpuvapdghxlzyckwtfljcnsie", "mbrxvapdghxlzyclwtfqjonpie", "mbrueapdghxlzyckwtfqjopsia", "mbruvapdghxlzycdwtfqjbfsie", "tbruvavdghxlzyckwtmqjonsie", "mbduvapdghxlzyckwrfqjrnsie", "mkrsvapughxlzyckwtfqjonsie", "mbruvapdghylzyckwtfqtolsie", "mgruvapdglxldyckwtfqjonsie", "mbrunapdghclzyckwtfqjonsiy", "mbruvapdgrxlxyckwtfgjonsie", "mbruvapdghxpzbckftfqjonsie", "mbruvcpdghxyzyckotfqjonsie", "mbruvapdghxlsyckwtfqcqnsie", "mbruvapdghxlzzckwtfqjonskf", "mbruvppdghxlzfckwtfqjgnsie", "mbhuvapdghxlzytkwtfqjonoie", "mbruvapdghxlzvrkwtfqjjnsie", "mbmuvapdghxuzyckwtfqjonsze", "mbruvapdghnlzycnwtfqjonsil", "mbruvapdgholzyckitfqjonsia", "mbruxapdghxlmyckwtfqbonsie", "mbauvapdgholzyckwtfqjolsie", "mbruvapdghxlzyckwtfqjotslq", "dbrutapdghxlzyckwtfqjonsiv", "mbruvapdzhxlyyckwtfbjonsie", "mmruaapsghxlzyckwtfqjonsie", "mbruvaldgqxqzyckwtfqjonsie", "mbruvaodghxdzyjkwtfqjonsie", "mbrcmatdghxlzyckwtfqjonsie", "mbrqvapdgtxlzycewtfqjonsie", "mjruvapdghzlzyckwtfqjonrie", "mbruvapdghxopcckwtfqjonsie", "mbruvapdghxszycwwtfqjoqsie", "mbruvapdgoxezyckwtjqjonsie"}}
fmt.Println("checksum: ", d.GetChecksum())
fmt.Println("common letters between box ids: ", d.GetCommon())
case day3:
d = device{claims: []string{"#1 @ 906,735: 28x17", "#2 @ 890,926: 12x29", "#3 @ 806,573: 20x19", "#4 @ 73,196: 16x24", "#5 @ 466,847: 26x27", "#6 @ 157,631: 22x23", "#7 @ 140,175: 18x11", "#8 @ 847,845: 13x16", "#9 @ 337,935: 25x24", "#10 @ 857,475: 11x28", "#11 @ 490,88: 29x14", "#12 @ 844,972: 21x10", "#13 @ 157,199: 18x28", "#14 @ 649,45: 5x8", "#15 @ 322,16: 21x24", "#16 @ 623,873: 13x20", "#17 @ 121,817: 29x24", "#18 @ 670,722: 16x14", "#19 @ 773,730: 15x29", "#20 @ 682,303: 16x16", "#21 @ 892,77: 16x25", "#22 @ 243,515: 16x14", "#23 @ 310,404: 17x23", "#24 @ 908,920: 20x25", "#25 @ 449,769: 24x20", "#26 @ 42,43: 18x27", "#27 @ 432,791: 13x10", "#28 @ 690,688: 26x29", "#29 @ 268,656: 28x19", "#30 @ 293,705: 14x10", "#31 @ 416,505: 12x25", "#32 @ 838,605: 18x14", "#33 @ 28,39: 19x25", "#34 @ 711,519: 26x13", "#35 @ 373,748: 10x19", "#36 @ 878,750: 10x25", "#37 @ 449,351: 26x12", "#38 @ 99,971: 14x28", "#39 @ 443,686: 13x25", "#40 @ 161,816: 18x29", "#41 @ 599,188: 24x12", "#42 @ 649,33: 14x10", "#43 @ 842,850: 19x29", "#44 @ 754,530: 16x20", "#45 @ 418,939: 14x28", "#46 @ 968,179: 19x25", "#47 @ 749,758: 27x22", "#48 @ 182,858: 27x14", "#49 @ 129,520: 16x10", "#50 @ 690,109: 10x19", "#51 @ 678,588: 12x10", "#52 @ 579,278: 24x12", "#53 @ 500,309: 18x28", "#54 @ 958,978: 15x11", "#55 @ 76,706: 17x28", "#56 @ 874,19: 14x27", "#57 @ 712,448: 24x23", "#58 @ 240,853: 16x26", "#59 @ 713,112: 26x28", "#60 @ 727,393: 22x22", "#61 @ 633,44: 26x14", "#62 @ 453,724: 25x16", "#63 @ 564,380: 15x29", "#64 @ 945,786: 10x20", "#65 @ 135,642: 28x18", "#66 @ 646,55: 11x14", "#67 @ 287,538: 27x21", "#68 @ 224,969: 13x20", "#69 @ 315,661: 13x15", "#70 @ 868,219: 23x10", "#71 @ 248,295: 28x29", "#72 @ 401,369: 27x26", "#73 @ 642,429: 27x19", "#74 @ 339,318: 14x28", "#75 @ 539,166: 16x18", "#76 @ 747,146: 3x6", "#77 @ 735,525: 21x20", "#78 @ 723,347: 24x13", "#79 @ 780,60: 10x27", "#80 @ 2,738: 18x12", "#81 @ 799,279: 23x29", "#82 @ 856,486: 10x18", "#83 @ 805,928: 23x19", "#84 @ 972,248: 14x17", "#85 @ 912,805: 10x29", "#86 @ 463,568: 27x21", "#87 @ 642,377: 21x11", "#88 @ 282,577: 21x13", "#89 @ 446,542: 11x20", "#90 @ 472,762: 27x16", "#91 @ 77,206: 24x25", "#92 @ 460,274: 13x11", "#93 @ 300,468: 23x23", "#94 @ 903,637: 18x14", "#95 @ 790,339: 10x14", "#96 @ 287,243: 24x25", "#97 @ 847,641: 28x25", "#98 @ 483,95: 28x15", "#99 @ 450,276: 14x26", "#100 @ 723,99: 13x10", "#101 @ 913,449: 12x28", "#102 @ 846,538: 14x21", "#103 @ 389,627: 24x28", "#104 @ 386,240: 27x14", "#105 @ 573,298: 24x16", "#106 @ 882,204: 21x28", "#107 @ 870,247: 22x17", "#108 @ 383,226: 27x15", "#109 @ 352,984: 25x11", "#110 @ 581,646: 27x11", "#111 @ 936,310: 15x28", "#112 @ 28,743: 29x26", "#113 @ 412,711: 16x18", "#114 @ 276,195: 19x11", "#115 @ 130,756: 24x16", "#116 @ 307,153: 25x11", "#117 @ 85,171: 19x22", "#118 @ 785,286: 24x29", "#119 @ 749,394: 29x29", "#120 @ 166,536: 4x3", "#121 @ 537,648: 13x22", "#122 @ 280,745: 26x20", "#123 @ 438,294: 29x18", "#124 @ 299,459: 27x18", "#125 @ 445,900: 12x16", "#126 @ 918,468: 12x12", "#127 @ 951,873: 20x13", "#128 @ 745,480: 13x22", "#129 @ 826,492: 15x27", "#130 @ 346,400: 13x10", "#131 @ 468,465: 16x26", "#132 @ 510,441: 24x12", "#133 @ 827,282: 19x29", "#134 @ 677,938: 14x22", "#135 @ 639,259: 28x14", "#136 @ 160,603: 24x18", "#137 @ 411,331: 19x12", "#138 @ 689,360: 22x11", "#139 @ 335,887: 20x29", "#140 @ 297,450: 11x25", "#141 @ 934,809: 23x21", "#142 @ 69,381: 23x17", "#143 @ 39,849: 24x27", "#144 @ 254,353: 27x25", "#145 @ 647,660: 25x15", "#146 @ 516,90: 27x20", "#147 @ 392,795: 16x22", "#148 @ 271,62: 26x24", "#149 @ 615,880: 21x26", "#150 @ 891,23: 29x10", "#151 @ 459,863: 17x13", "#152 @ 699,773: 8x10", "#153 @ 299,193: 29x19", "#154 @ 507,786: 29x12", "#155 @ 314,209: 10x17", "#156 @ 580,854: 14x24", "#157 @ 107,123: 27x24", "#158 @ 193,327: 17x15", "#159 @ 743,230: 14x12", "#160 @ 275,669: 27x25", "#161 @ 12,833: 22x27", "#162 @ 781,33: 27x29", "#163 @ 705,351: 16x22", "#164 @ 210,625: 15x15", "#165 @ 447,737: 15x24", "#166 @ 390,151: 11x17", "#167 @ 983,356: 11x28", "#168 @ 827,478: 7x13", "#169 @ 827,134: 23x16", "#170 @ 828,375: 8x3", "#171 @ 757,70: 28x15", "#172 @ 946,195: 27x17", "#173 @ 159,409: 14x12", "#174 @ 76,9: 10x28", "#175 @ 784,44: 14x29", "#176 @ 314,480: 13x20", "#177 @ 0,43: 19x27", "#178 @ 196,449: 29x25", "#179 @ 728,244: 17x22", "#180 @ 802,695: 29x10", "#181 @ 693,915: 29x23", "#182 @ 307,151: 16x21", "#183 @ 674,20: 23x24", "#184 @ 265,196: 15x17", "#185 @ 446,715: 19x28", "#186 @ 653,375: 12x10", "#187 @ 290,471: 28x20", "#188 @ 193,953: 23x18", "#189 @ 319,402: 15x14", "#190 @ 852,163: 10x10", "#191 @ 913,465: 23x23", "#192 @ 350,792: 10x22", "#193 @ 988,262: 11x18", "#194 @ 318,478: 11x10", "#195 @ 465,200: 20x18", "#196 @ 804,791: 16x15", "#197 @ 720,680: 11x26", "#198 @ 331,217: 10x22", "#199 @ 935,961: 29x12", "#200 @ 932,963: 27x23", "#201 @ 155,840: 25x28", "#202 @ 39,747: 22x27", "#203 @ 295,745: 20x22", "#204 @ 729,386: 16x18", "#205 @ 791,943: 18x10", "#206 @ 88,702: 16x21", "#207 @ 403,222: 25x25", "#208 @ 514,437: 12x23", "#209 @ 22,856: 13x18", "#210 @ 828,157: 20x21", "#211 @ 899,315: 23x20", "#212 @ 684,352: 14x19", "#213 @ 606,0: 25x23", "#214 @ 538,589: 12x17", "#215 @ 719,443: 27x21", "#216 @ 783,437: 18x16", "#217 @ 358,237: 12x20", "#218 @ 835,779: 25x16", "#219 @ 436,183: 18x27", "#220 @ 247,244: 22x21", "#221 @ 561,795: 19x29", "#222 @ 78,794: 25x21", "#223 @ 461,673: 19x18", "#224 @ 373,795: 10x16", "#225 @ 237,240: 24x27", "#226 @ 289,24: 24x17", "#227 @ 629,517: 20x18", "#228 @ 886,1: 19x21", "#229 @ 314,309: 29x15", "#230 @ 156,537: 11x13", "#231 @ 617,592: 24x20", "#232 @ 373,459: 16x27", "#233 @ 158,109: 13x27", "#234 @ 610,609: 28x12", "#235 @ 871,354: 22x13", "#236 @ 200,330: 13x11", "#237 @ 312,460: 16x11", "#238 @ 255,356: 29x24", "#239 @ 482,570: 18x20", "#240 @ 435,34: 19x23", "#241 @ 518,842: 11x16", "#242 @ 628,632: 20x12", "#243 @ 708,887: 20x15", "#244 @ 159,534: 12x24", "#245 @ 877,531: 21x25", "#246 @ 555,359: 22x28", "#247 @ 312,869: 29x23", "#248 @ 453,542: 17x20", "#249 @ 369,720: 24x17", "#250 @ 328,123: 18x18", "#251 @ 189,511: 10x16", "#252 @ 794,286: 15x25", "#253 @ 771,749: 11x26", "#254 @ 154,247: 25x22", "#255 @ 915,196: 10x25", "#256 @ 823,476: 18x18", "#257 @ 844,314: 28x20", "#258 @ 412,456: 12x11", "#259 @ 811,916: 10x3", "#260 @ 263,494: 14x27", "#261 @ 568,788: 21x11", "#262 @ 260,329: 24x18", "#263 @ 849,97: 22x21", "#264 @ 264,283: 17x14", "#265 @ 936,646: 11x17", "#266 @ 302,362: 5x5", "#267 @ 829,618: 14x15", "#268 @ 730,416: 11x28", "#269 @ 575,947: 29x12", "#270 @ 808,717: 14x28", "#271 @ 671,80: 5x15", "#272 @ 196,648: 22x23", "#273 @ 283,45: 11x10", "#274 @ 828,972: 17x15", "#275 @ 194,535: 19x22", "#276 @ 618,244: 27x16", "#277 @ 420,799: 6x6", "#278 @ 184,120: 29x10", "#279 @ 151,183: 12x28", "#280 @ 438,443: 23x16", "#281 @ 650,932: 22x17", "#282 @ 121,550: 19x27", "#283 @ 74,663: 20x14", "#284 @ 65,856: 25x27", "#285 @ 121,593: 23x26", "#286 @ 191,360: 22x19", "#287 @ 567,377: 25x15", "#288 @ 925,892: 19x26", "#289 @ 859,530: 29x27", "#290 @ 204,443: 24x27", "#291 @ 873,225: 18x21", "#292 @ 567,514: 29x17", "#293 @ 417,261: 20x24", "#294 @ 314,525: 19x25", "#295 @ 161,214: 24x19", "#296 @ 68,796: 14x21", "#297 @ 465,311: 14x24", "#298 @ 102,82: 20x22", "#299 @ 930,287: 10x10", "#300 @ 717,85: 22x19", "#301 @ 752,391: 20x16", "#302 @ 329,208: 20x15", "#303 @ 172,413: 19x16", "#304 @ 64,566: 19x19", "#305 @ 589,643: 11x29", "#306 @ 608,173: 10x23", "#307 @ 411,54: 13x29", "#308 @ 69,567: 24x11", "#309 @ 111,70: 22x17", "#310 @ 901,346: 12x24", "#311 @ 871,857: 22x25", "#312 @ 453,670: 21x27", "#313 @ 416,797: 15x12", "#314 @ 450,111: 28x14", "#315 @ 213,269: 14x11", "#316 @ 273,1: 16x16", "#317 @ 818,676: 11x20", "#318 @ 383,773: 17x21", "#319 @ 508,108: 16x14", "#320 @ 222,501: 14x24", "#321 @ 538,857: 17x27", "#322 @ 55,115: 17x15", "#323 @ 446,959: 4x4", "#324 @ 92,953: 14x12", "#325 @ 657,823: 18x28", "#326 @ 537,354: 27x22", "#327 @ 19,969: 20x21", "#328 @ 9,51: 19x16", "#329 @ 979,898: 21x13", "#330 @ 618,618: 12x28", "#331 @ 532,604: 25x13", "#332 @ 867,701: 25x16", "#333 @ 538,24: 21x29", "#334 @ 506,443: 16x29", "#335 @ 275,3: 10x11", "#336 @ 809,556: 19x21", "#337 @ 656,622: 4x14", "#338 @ 830,868: 14x16", "#339 @ 473,728: 15x13", "#340 @ 158,167: 21x23", "#341 @ 517,457: 13x11", "#342 @ 933,657: 20x14", "#343 @ 631,283: 23x24", "#344 @ 138,581: 27x11", "#345 @ 299,453: 10x29", "#346 @ 520,308: 12x23", "#347 @ 617,631: 24x16", "#348 @ 506,769: 14x17", "#349 @ 186,183: 24x13", "#350 @ 417,743: 28x26", "#351 @ 923,472: 29x14", "#352 @ 800,378: 20x24", "#353 @ 788,478: 22x28", "#354 @ 390,602: 26x19", "#355 @ 39,689: 19x13", "#356 @ 828,864: 12x23", "#357 @ 330,331: 23x18", "#358 @ 446,92: 22x22", "#359 @ 255,867: 11x28", "#360 @ 594,246: 12x16", "#361 @ 557,809: 23x13", "#362 @ 805,737: 13x28", "#363 @ 13,888: 26x22", "#364 @ 868,0: 20x17", "#365 @ 505,777: 10x15", "#366 @ 548,184: 23x11", "#367 @ 937,363: 13x19", "#368 @ 89,608: 19x13", "#369 @ 167,801: 21x26", "#370 @ 636,724: 15x28", "#371 @ 834,157: 11x15", "#372 @ 306,149: 27x18", "#373 @ 693,890: 18x10", "#374 @ 486,724: 29x10", "#375 @ 892,205: 29x17", "#376 @ 204,455: 10x13", "#377 @ 801,487: 26x12", "#378 @ 897,325: 25x10", "#379 @ 160,402: 11x13", "#380 @ 150,565: 4x3", "#381 @ 863,495: 20x24", "#382 @ 23,690: 24x19", "#383 @ 221,372: 19x27", "#384 @ 493,710: 25x19", "#385 @ 574,246: 20x24", "#386 @ 847,115: 21x21", "#387 @ 228,453: 12x15", "#388 @ 651,466: 19x22", "#389 @ 416,334: 23x26", "#390 @ 181,845: 15x26", "#391 @ 133,52: 29x24", "#392 @ 69,429: 15x13", "#393 @ 124,426: 17x12", "#394 @ 946,966: 17x27", "#395 @ 342,844: 29x10", "#396 @ 405,521: 16x10", "#397 @ 801,680: 17x22", "#398 @ 438,675: 14x17", "#399 @ 646,477: 16x15", "#400 @ 745,450: 19x20", "#401 @ 143,719: 17x17", "#402 @ 415,720: 25x28", "#403 @ 623,440: 16x25", "#404 @ 417,159: 12x22", "#405 @ 868,532: 13x18", "#406 @ 436,138: 26x22", "#407 @ 57,914: 13x29", "#408 @ 709,49: 27x17", "#409 @ 279,122: 14x22", "#410 @ 379,848: 26x10", "#411 @ 943,362: 12x11", "#412 @ 68,326: 8x8", "#413 @ 366,377: 26x24", "#414 @ 728,765: 18x27", "#415 @ 13,579: 22x15", "#416 @ 634,705: 10x24", "#417 @ 300,501: 19x23", "#418 @ 291,360: 25x10", "#419 @ 17,397: 10x29", "#420 @ 582,282: 29x20", "#421 @ 214,632: 19x14", "#422 @ 737,812: 21x16", "#423 @ 813,327: 19x26", "#424 @ 991,264: 3x12", "#425 @ 845,423: 18x12", "#426 @ 233,856: 18x14", "#427 @ 855,80: 19x24", "#428 @ 725,471: 27x11", "#429 @ 211,607: 18x15", "#430 @ 519,419: 14x11", "#431 @ 520,119: 13x24", "#432 @ 838,267: 19x17", "#433 @ 908,278: 25x24", "#434 @ 391,357: 19x18", "#435 @ 352,835: 28x22", "#436 @ 739,497: 12x12", "#437 @ 406,276: 16x15", "#438 @ 342,150: 28x14", "#439 @ 34,737: 13x22", "#440 @ 27,895: 17x17", "#441 @ 237,596: 23x17", "#442 @ 41,745: 26x13", "#443 @ 849,237: 17x21", "#444 @ 666,255: 15x23", "#445 @ 755,221: 11x26", "#446 @ 541,905: 14x17", "#447 @ 871,261: 26x10", "#448 @ 541,329: 6x16", "#449 @ 438,889: 22x21", "#450 @ 976,339: 19x24", "#451 @ 63,317: 22x26", "#452 @ 249,908: 29x11", "#453 @ 954,73: 12x29", "#454 @ 601,617: 13x16", "#455 @ 831,284: 22x13", "#456 @ 908,941: 25x13", "#457 @ 609,755: 12x19", "#458 @ 810,730: 19x18", "#459 @ 870,295: 27x24", "#460 @ 696,657: 17x21", "#461 @ 43,854: 23x27", "#462 @ 317,549: 26x28", "#463 @ 772,289: 10x12", "#464 @ 841,275: 23x17", "#465 @ 800,500: 11x25", "#466 @ 162,712: 10x18", "#467 @ 687,590: 12x22", "#468 @ 549,187: 16x23", "#469 @ 681,764: 10x19", "#470 @ 179,345: 18x19", "#471 @ 87,792: 10x24", "#472 @ 925,524: 11x29", "#473 @ 938,891: 24x17", "#474 @ 157,732: 19x12", "#475 @ 374,522: 16x15", "#476 @ 732,432: 14x10", "#477 @ 209,306: 10x13", "#478 @ 367,850: 13x14", "#479 @ 159,134: 27x26", "#480 @ 482,95: 14x18", "#481 @ 845,52: 29x15", "#482 @ 627,626: 13x13", "#483 @ 485,840: 14x17", "#484 @ 842,148: 12x22", "#485 @ 837,170: 26x19", "#486 @ 545,32: 11x12", "#487 @ 742,508: 13x16", "#488 @ 711,566: 20x27", "#489 @ 782,372: 21x16", "#490 @ 268,720: 29x10", "#491 @ 36,28: 24x11", "#492 @ 364,124: 15x17", "#493 @ 918,948: 25x16", "#494 @ 39,627: 14x25", "#495 @ 541,891: 19x22", "#496 @ 279,629: 19x12", "#497 @ 988,746: 10x27", "#498 @ 703,83: 18x18", "#499 @ 341,135: 10x16", "#500 @ 770,590: 6x10", "#501 @ 506,846: 29x28", "#502 @ 768,658: 10x27", "#503 @ 916,730: 24x11", "#504 @ 290,754: 7x6", "#505 @ 6,749: 25x15", "#506 @ 897,150: 7x8", "#507 @ 340,777: 14x16", "#508 @ 328,141: 10x15", "#509 @ 310,639: 27x24", "#510 @ 170,184: 17x20", "#511 @ 25,734: 13x22", "#512 @ 756,361: 16x16", "#513 @ 390,806: 16x17", "#514 @ 884,560: 12x28", "#515 @ 383,733: 23x24", "#516 @ 702,90: 12x26", "#517 @ 476,971: 18x23", "#518 @ 143,410: 22x19", "#519 @ 442,822: 12x20", "#520 @ 619,387: 27x21", "#521 @ 771,176: 15x25", "#522 @ 683,310: 12x14", "#523 @ 270,240: 26x23", "#524 @ 943,33: 17x21", "#525 @ 336,772: 28x12", "#526 @ 734,562: 6x22", "#527 @ 684,501: 20x25", "#528 @ 839,524: 24x28", "#529 @ 610,180: 16x27", "#530 @ 816,728: 20x12", "#531 @ 790,654: 21x28", "#532 @ 316,34: 12x23", "#533 @ 571,543: 14x26", "#534 @ 11,328: 11x16", "#535 @ 858,699: 13x20", "#536 @ 954,915: 15x27", "#537 @ 917,270: 24x21", "#538 @ 222,243: 25x18", "#539 @ 181,40: 13x20", "#540 @ 576,388: 27x28", "#541 @ 489,320: 16x17", "#542 @ 90,81: 22x25", "#543 @ 6,689: 18x16", "#544 @ 694,284: 21x17", "#545 @ 232,447: 17x19", "#546 @ 410,341: 15x25", "#547 @ 318,18: 14x13", "#548 @ 695,100: 21x15", "#549 @ 442,954: 12x16", "#550 @ 388,520: 10x24", "#551 @ 686,836: 25x12", "#552 @ 550,562: 24x20", "#553 @ 344,383: 13x28", "#554 @ 714,62: 13x16", "#555 @ 382,689: 28x21", "#556 @ 207,452: 13x12", "#557 @ 335,13: 19x13", "#558 @ 448,239: 17x24", "#559 @ 318,833: 26x17", "#560 @ 77,896: 10x28", "#561 @ 461,668: 11x16", "#562 @ 765,456: 26x20", "#563 @ 602,724: 25x18", "#564 @ 942,828: 19x3", "#565 @ 93,955: 12x26", "#566 @ 713,346: 13x21", "#567 @ 641,785: 28x13", "#568 @ 646,554: 14x25", "#569 @ 953,897: 29x24", "#570 @ 758,61: 20x22", "#571 @ 611,271: 25x28", "#572 @ 753,458: 18x23", "#573 @ 316,829: 28x27", "#574 @ 537,963: 14x19", "#575 @ 107,763: 10x28", "#576 @ 931,856: 25x24", "#577 @ 312,451: 27x27", "#578 @ 83,910: 16x21", "#579 @ 795,472: 13x11", "#580 @ 945,313: 10x17", "#581 @ 339,950: 16x28", "#582 @ 110,404: 13x13", "#583 @ 856,61: 27x15", "#584 @ 579,730: 14x27", "#585 @ 235,964: 27x29", "#586 @ 610,212: 26x20", "#587 @ 865,114: 14x29", "#588 @ 190,611: 16x23", "#589 @ 414,762: 23x11", "#590 @ 45,871: 10x14", "#591 @ 288,5: 9x10", "#592 @ 59,737: 22x16", "#593 @ 116,599: 14x22", "#594 @ 300,513: 19x10", "#595 @ 8,46: 17x17", "#596 @ 107,96: 13x23", "#597 @ 757,800: 25x20", "#598 @ 157,261: 11x24", "#599 @ 440,302: 17x26", "#600 @ 352,25: 10x10", "#601 @ 449,906: 12x19", "#602 @ 665,717: 12x11", "#603 @ 264,284: 18x24", "#604 @ 904,213: 16x24", "#605 @ 504,416: 16x10", "#606 @ 16,60: 21x25", "#607 @ 620,621: 14x12", "#608 @ 221,585: 10x29", "#609 @ 653,619: 17x23", "#610 @ 80,909: 17x14", "#611 @ 216,643: 11x22", "#612 @ 420,260: 15x21", "#613 @ 775,746: 15x25", "#614 @ 413,56: 7x12", "#615 @ 324,651: 22x23", "#616 @ 649,690: 28x16", "#617 @ 821,329: 13x25", "#618 @ 312,548: 13x20", "#619 @ 951,179: 24x20", "#620 @ 338,561: 13x18", "#621 @ 968,93: 16x13", "#622 @ 14,630: 19x19", "#623 @ 240,582: 21x23", "#624 @ 437,165: 16x14", "#625 @ 9,857: 19x13", "#626 @ 331,27: 26x19", "#627 @ 929,744: 15x26", "#628 @ 384,618: 23x12", "#629 @ 492,723: 22x15", "#630 @ 455,548: 23x27", "#631 @ 690,308: 21x16", "#632 @ 834,501: 27x15", "#633 @ 441,24: 12x24", "#634 @ 429,324: 14x19", "#635 @ 74,378: 23x23", "#636 @ 968,246: 24x13", "#637 @ 510,805: 21x27", "#638 @ 825,689: 12x20", "#639 @ 274,493: 27x21", "#640 @ 422,837: 24x20", "#641 @ 432,524: 18x15", "#642 @ 103,925: 16x12", "#643 @ 261,438: 21x24", "#644 @ 420,445: 19x24", "#645 @ 940,413: 24x24", "#646 @ 436,882: 16x20", "#647 @ 383,602: 24x27", "#648 @ 899,454: 19x18", "#649 @ 542,652: 12x17", "#650 @ 768,629: 26x10", "#651 @ 121,504: 14x21", "#652 @ 11,846: 13x15", "#653 @ 80,132: 15x11", "#654 @ 944,482: 18x13", "#655 @ 622,747: 27x29", "#656 @ 864,23: 23x13", "#657 @ 260,450: 12x15", "#658 @ 901,900: 19x28", "#659 @ 19,477: 23x29", "#660 @ 44,427: 28x20", "#661 @ 794,330: 23x29", "#662 @ 218,621: 11x10", "#663 @ 617,980: 13x10", "#664 @ 208,182: 28x20", "#665 @ 530,321: 18x11", "#666 @ 946,348: 17x16", "#667 @ 858,899: 11x16", "#668 @ 695,877: 26x28", "#669 @ 291,232: 6x8", "#670 @ 57,165: 21x16", "#671 @ 413,336: 10x3", "#672 @ 688,485: 14x20", "#673 @ 178,49: 14x24", "#674 @ 216,506: 10x24", "#675 @ 224,439: 14x23", "#676 @ 579,258: 20x15", "#677 @ 313,160: 23x29", "#678 @ 607,825: 25x13", "#679 @ 320,523: 22x12", "#680 @ 50,36: 15x16", "#681 @ 134,183: 16x14", "#682 @ 462,193: 22x23", "#683 @ 900,803: 17x28", "#684 @ 659,671: 10x20", "#685 @ 823,767: 11x16", "#686 @ 509,112: 22x29", "#687 @ 533,911: 18x19", "#688 @ 166,32: 23x27", "#689 @ 62,554: 17x22", "#690 @ 44,123: 25x17", "#691 @ 894,975: 29x20", "#692 @ 251,153: 13x18", "#693 @ 702,268: 16x28", "#694 @ 769,68: 18x17", "#695 @ 161,533: 19x11", "#696 @ 1,963: 24x23", "#697 @ 506,892: 27x21", "#698 @ 201,265: 20x22", "#699 @ 781,949: 13x18", "#700 @ 374,780: 25x23", "#701 @ 971,784: 18x20", "#702 @ 864,620: 24x20", "#703 @ 772,555: 26x27", "#704 @ 671,500: 27x29", "#705 @ 852,469: 17x10", "#706 @ 154,718: 15x28", "#707 @ 286,543: 24x16", "#708 @ 306,390: 13x19", "#709 @ 856,331: 16x19", "#710 @ 309,249: 21x23", "#711 @ 943,910: 21x14", "#712 @ 233,450: 11x20", "#713 @ 785,128: 11x29", "#714 @ 418,51: 20x17", "#715 @ 876,608: 27x17", "#716 @ 825,482: 16x21", "#717 @ 659,720: 15x10", "#718 @ 207,686: 28x19", "#719 @ 798,796: 18x22", "#720 @ 199,633: 27x15", "#721 @ 228,733: 18x25", "#722 @ 623,716: 28x17", "#723 @ 93,184: 17x28", "#724 @ 441,348: 10x26", "#725 @ 324,315: 28x11", "#726 @ 71,658: 28x24", "#727 @ 530,155: 15x12", "#728 @ 436,468: 13x28", "#729 @ 113,544: 12x28", "#730 @ 306,426: 15x15", "#731 @ 507,849: 19x14", "#732 @ 877,632: 25x16", "#733 @ 198,670: 11x20", "#734 @ 563,290: 17x17", "#735 @ 584,725: 12x11", "#736 @ 957,981: 17x10", "#737 @ 353,179: 22x17", "#738 @ 274,432: 14x22", "#739 @ 778,619: 18x29", "#740 @ 385,265: 22x13", "#741 @ 69,911: 18x10", "#742 @ 624,398: 17x23", "#743 @ 967,481: 12x17", "#744 @ 780,276: 21x18", "#745 @ 661,481: 22x14", "#746 @ 334,349: 11x26", "#747 @ 168,203: 11x20", "#748 @ 469,318: 25x11", "#749 @ 485,688: 26x28", "#750 @ 865,754: 14x22", "#751 @ 717,88: 20x21", "#752 @ 333,385: 22x20", "#753 @ 904,625: 18x27", "#754 @ 823,735: 28x13", "#755 @ 216,593: 11x21", "#756 @ 312,278: 8x6", "#757 @ 781,518: 21x14", "#758 @ 366,187: 17x17", "#759 @ 592,103: 12x11", "#760 @ 521,755: 10x28", "#761 @ 245,708: 28x21", "#762 @ 865,632: 10x23", "#763 @ 655,413: 17x25", "#764 @ 69,862: 14x19", "#765 @ 865,357: 13x22", "#766 @ 684,651: 15x21", "#767 @ 521,793: 10x19", "#768 @ 34,46: 24x17", "#769 @ 471,716: 28x19", "#770 @ 59,162: 19x17", "#771 @ 308,276: 16x12", "#772 @ 549,188: 25x12", "#773 @ 823,541: 18x26", "#774 @ 858,242: 28x11", "#775 @ 483,973: 11x16", "#776 @ 902,206: 29x14", "#777 @ 610,832: 27x25", "#778 @ 116,63: 24x20", "#779 @ 388,701: 10x20", "#780 @ 807,914: 18x16", "#781 @ 330,578: 19x13", "#782 @ 117,351: 29x14", "#783 @ 258,345: 26x18", "#784 @ 790,122: 18x15", "#785 @ 842,779: 14x26", "#786 @ 376,107: 19x22", "#787 @ 206,309: 20x19", "#788 @ 310,185: 24x21", "#789 @ 345,888: 24x19", "#790 @ 651,272: 16x14", "#791 @ 847,224: 29x13", "#792 @ 650,882: 26x13", "#793 @ 207,603: 13x21", "#794 @ 372,389: 20x27", "#795 @ 270,951: 24x29", "#796 @ 350,878: 28x17", "#797 @ 494,705: 27x16", "#798 @ 415,359: 18x22", "#799 @ 944,951: 26x17", "#800 @ 919,375: 29x17", "#801 @ 882,857: 10x15", "#802 @ 69,902: 11x10", "#803 @ 840,882: 27x25", "#804 @ 349,246: 25x10", "#805 @ 0,865: 12x15", "#806 @ 585,375: 25x14", "#807 @ 683,756: 18x29", "#808 @ 659,880: 15x22", "#809 @ 365,811: 10x28", "#810 @ 570,804: 20x22", "#811 @ 826,727: 10x29", "#812 @ 235,228: 22x17", "#813 @ 100,768: 10x11", "#814 @ 381,634: 19x14", "#815 @ 119,720: 10x26", "#816 @ 943,199: 28x12", "#817 @ 956,806: 26x23", "#818 @ 469,666: 14x17", "#819 @ 643,780: 22x14", "#820 @ 764,767: 21x24", "#821 @ 727,463: 18x25", "#822 @ 243,154: 29x19", "#823 @ 649,179: 12x22", "#824 @ 823,714: 11x25", "#825 @ 516,683: 10x25", "#826 @ 444,717: 16x20", "#827 @ 551,811: 24x12", "#828 @ 79,912: 23x20", "#829 @ 861,666: 16x13", "#830 @ 126,743: 24x17", "#831 @ 392,613: 22x25", "#832 @ 308,700: 17x19", "#833 @ 480,476: 20x17", "#834 @ 481,838: 12x27", "#835 @ 438,455: 11x17", "#836 @ 643,473: 27x19", "#837 @ 464,749: 29x27", "#838 @ 589,749: 18x19", "#839 @ 764,278: 17x20", "#840 @ 64,613: 15x10", "#841 @ 223,388: 11x20", "#842 @ 498,885: 27x24", "#843 @ 494,680: 15x17", "#844 @ 20,571: 20x20", "#845 @ 440,328: 14x17", "#846 @ 956,687: 25x27", "#847 @ 428,182: 22x13", "#848 @ 551,369: 29x19", "#849 @ 105,122: 24x11", "#850 @ 72,379: 14x27", "#851 @ 829,24: 10x19", "#852 @ 318,853: 17x17", "#853 @ 632,328: 18x24", "#854 @ 927,529: 4x17", "#855 @ 809,905: 23x13", "#856 @ 773,448: 24x11", "#857 @ 839,567: 11x24", "#858 @ 164,782: 11x20", "#859 @ 112,534: 10x17", "#860 @ 412,805: 28x22", "#861 @ 206,725: 25x20", "#862 @ 211,47: 15x21", "#863 @ 946,481: 15x18", "#864 @ 162,536: 21x25", "#865 @ 622,325: 25x16", "#866 @ 526,575: 18x12", "#867 @ 792,663: 21x19", "#868 @ 906,346: 16x20", "#869 @ 472,272: 22x29", "#870 @ 71,613: 22x10", "#871 @ 452,77: 23x21", "#872 @ 274,50: 11x23", "#873 @ 815,568: 11x21", "#874 @ 281,27: 16x13", "#875 @ 280,351: 29x25", "#876 @ 278,955: 23x22", "#877 @ 184,957: 14x25", "#878 @ 424,160: 18x23", "#879 @ 639,908: 22x28", "#880 @ 816,324: 17x22", "#881 @ 175,647: 10x21", "#882 @ 821,764: 24x23", "#883 @ 776,185: 18x13", "#884 @ 291,610: 24x22", "#885 @ 80,354: 21x18", "#886 @ 526,441: 11x13", "#887 @ 710,48: 17x28", "#888 @ 459,441: 28x28", "#889 @ 668,823: 13x26", "#890 @ 515,583: 20x16", "#891 @ 245,66: 15x24", "#892 @ 456,241: 20x25", "#893 @ 711,38: 21x25", "#894 @ 749,642: 18x26", "#895 @ 288,215: 29x13", "#896 @ 827,765: 22x18", "#897 @ 614,773: 11x17", "#898 @ 872,677: 14x22", "#899 @ 57,877: 19x21", "#900 @ 366,761: 28x22", "#901 @ 611,455: 19x14", "#902 @ 312,687: 28x24", "#903 @ 133,883: 16x20", "#904 @ 934,880: 27x17", "#905 @ 726,63: 22x13", "#906 @ 221,789: 16x16", "#907 @ 647,620: 26x13", "#908 @ 270,598: 26x20", "#909 @ 20,639: 23x11", "#910 @ 880,633: 20x20", "#911 @ 321,658: 14x24", "#912 @ 454,875: 15x19", "#913 @ 746,143: 22x21", "#914 @ 918,786: 14x19", "#915 @ 339,890: 17x18", "#916 @ 258,515: 12x22", "#917 @ 767,674: 15x25", "#918 @ 293,329: 17x11", "#919 @ 400,684: 17x13", "#920 @ 989,766: 10x22", "#921 @ 142,621: 17x25", "#922 @ 752,74: 24x13", "#923 @ 375,790: 17x26", "#924 @ 348,988: 20x11", "#925 @ 823,329: 13x19", "#926 @ 824,373: 16x10", "#927 @ 611,576: 13x18", "#928 @ 268,363: 29x27", "#929 @ 309,385: 19x26", "#930 @ 862,212: 29x17", "#931 @ 646,610: 25x13", "#932 @ 201,42: 20x22", "#933 @ 844,580: 11x12", "#934 @ 416,44: 13x17", "#935 @ 385,239: 29x10", "#936 @ 673,702: 19x26", "#937 @ 502,450: 22x20", "#938 @ 979,892: 19x12", "#939 @ 644,37: 15x24", "#940 @ 156,595: 19x17", "#941 @ 949,197: 19x28", "#942 @ 520,787: 29x15", "#943 @ 866,913: 19x12", "#944 @ 911,780: 14x21", "#945 @ 78,165: 23x29", "#946 @ 942,424: 18x3", "#947 @ 271,620: 19x20", "#948 @ 424,50: 25x27", "#949 @ 408,206: 23x24", "#950 @ 45,526: 25x29", "#951 @ 211,421: 29x27", "#952 @ 615,516: 28x10", "#953 @ 807,339: 24x25", "#954 @ 585,494: 15x26", "#955 @ 222,674: 23x22", "#956 @ 185,442: 26x17", "#957 @ 725,560: 23x27", "#958 @ 918,789: 10x23", "#959 @ 151,213: 12x23", "#960 @ 760,346: 17x24", "#961 @ 594,200: 26x28", "#962 @ 339,363: 26x21", "#963 @ 562,296: 25x20", "#964 @ 266,83: 10x15", "#965 @ 275,513: 25x26", "#966 @ 530,917: 26x26", "#967 @ 770,739: 26x29", "#968 @ 433,126: 14x24", "#969 @ 324,313: 25x29", "#970 @ 764,522: 29x27", "#971 @ 527,326: 26x25", "#972 @ 143,584: 24x18", "#973 @ 159,350: 18x12", "#974 @ 868,101: 12x18", "#975 @ 421,466: 20x21", "#976 @ 512,699: 27x11", "#977 @ 318,633: 18x29", "#978 @ 175,557: 13x25", "#979 @ 68,138: 18x10", "#980 @ 301,242: 21x16", "#981 @ 43,851: 10x21", "#982 @ 560,672: 22x18", "#983 @ 7,747: 10x17", "#984 @ 427,318: 23x27", "#985 @ 213,719: 11x22", "#986 @ 579,721: 16x25", "#987 @ 894,145: 14x19", "#988 @ 940,826: 24x12", "#989 @ 967,43: 12x18", "#990 @ 729,588: 25x11", "#991 @ 709,264: 29x13", "#992 @ 176,952: 18x12", "#993 @ 332,114: 16x15", "#994 @ 158,335: 12x25", "#995 @ 839,759: 18x25", "#996 @ 662,831: 20x23", "#997 @ 510,104: 11x16", "#998 @ 706,70: 29x19", "#999 @ 833,275: 21x25", "#1000 @ 431,747: 18x14", "#1001 @ 50,865: 26x13", "#1002 @ 743,183: 10x5", "#1003 @ 809,32: 25x13", "#1004 @ 871,83: 10x27", "#1005 @ 529,116: 23x28", "#1006 @ 255,694: 15x18", "#1007 @ 492,76: 22x18", "#1008 @ 34,505: 19x29", "#1009 @ 86,162: 24x12", "#1010 @ 303,366: 10x11", "#1011 @ 560,389: 20x25", "#1012 @ 959,37: 11x10", "#1013 @ 786,383: 17x13", "#1014 @ 307,736: 21x17", "#1015 @ 890,10: 28x18", "#1016 @ 651,26: 15x24", "#1017 @ 783,544: 17x19", "#1018 @ 593,858: 10x11", "#1019 @ 594,715: 19x12", "#1020 @ 471,99: 24x20", "#1021 @ 764,583: 17x23", "#1022 @ 122,825: 27x20", "#1023 @ 434,81: 25x20", "#1024 @ 111,16: 28x20", "#1025 @ 890,326: 17x17", "#1026 @ 669,76: 11x25", "#1027 @ 774,28: 10x12", "#1028 @ 348,770: 20x25", "#1029 @ 358,471: 18x14", "#1030 @ 666,838: 22x19", "#1031 @ 707,609: 13x17", "#1032 @ 290,361: 27x25", "#1033 @ 946,205: 13x29", "#1034 @ 895,324: 23x22", "#1035 @ 704,618: 14x27", "#1036 @ 966,105: 25x14", "#1037 @ 255,422: 29x18", "#1038 @ 436,798: 13x12", "#1039 @ 317,498: 10x29", "#1040 @ 308,202: 14x12", "#1041 @ 615,628: 13x22", "#1042 @ 492,693: 28x29", "#1043 @ 92,922: 27x15", "#1044 @ 418,337: 27x26", "#1045 @ 580,490: 14x18", "#1046 @ 713,649: 12x10", "#1047 @ 421,274: 11x11", "#1048 @ 264,350: 28x16", "#1049 @ 205,608: 17x11", "#1050 @ 323,844: 25x13", "#1051 @ 537,919: 10x14", "#1052 @ 266,690: 16x21", "#1053 @ 117,729: 12x13", "#1054 @ 684,352: 23x11", "#1055 @ 489,741: 24x10", "#1056 @ 400,800: 27x27", "#1057 @ 88,947: 15x10", "#1058 @ 374,154: 18x29", "#1059 @ 254,374: 28x15", "#1060 @ 539,327: 12x27", "#1061 @ 912,208: 19x19", "#1062 @ 320,780: 28x23", "#1063 @ 262,357: 21x24", "#1064 @ 730,789: 12x29", "#1065 @ 505,819: 13x21", "#1066 @ 924,952: 26x26", "#1067 @ 939,752: 25x24", "#1068 @ 853,660: 26x23", "#1069 @ 704,700: 17x24", "#1070 @ 601,178: 22x17", "#1071 @ 275,523: 17x21", "#1072 @ 732,478: 16x16", "#1073 @ 806,758: 28x19", "#1074 @ 89,367: 12x10", "#1075 @ 678,304: 25x10", "#1076 @ 776,438: 13x27", "#1077 @ 691,895: 24x22", "#1078 @ 758,116: 25x28", "#1079 @ 345,851: 29x18", "#1080 @ 554,878: 15x12", "#1081 @ 674,693: 17x25", "#1082 @ 579,489: 19x23", "#1083 @ 87,596: 23x19", "#1084 @ 201,904: 13x12", "#1085 @ 5,333: 20x20", "#1086 @ 286,0: 16x19", "#1087 @ 73,906: 26x14", "#1088 @ 177,421: 10x19", "#1089 @ 65,362: 14x22", "#1090 @ 408,222: 19x24", "#1091 @ 883,191: 16x29", "#1092 @ 542,180: 12x17", "#1093 @ 512,674: 25x25", "#1094 @ 295,331: 8x5", "#1095 @ 867,118: 22x13", "#1096 @ 680,728: 26x26", "#1097 @ 199,580: 23x13", "#1098 @ 47,74: 18x29", "#1099 @ 887,317: 25x18", "#1100 @ 206,744: 29x10", "#1101 @ 158,595: 25x12", "#1102 @ 977,789: 14x28", "#1103 @ 835,274: 27x28", "#1104 @ 820,494: 10x10", "#1105 @ 584,96: 11x22", "#1106 @ 781,931: 12x23", "#1107 @ 32,312: 13x15", "#1108 @ 960,94: 23x18", "#1109 @ 389,703: 25x24", "#1110 @ 631,648: 24x18", "#1111 @ 298,573: 13x15", "#1112 @ 228,804: 21x27", "#1113 @ 462,350: 19x19", "#1114 @ 637,175: 14x24", "#1115 @ 444,161: 26x12", "#1116 @ 320,646: 29x21", "#1117 @ 516,777: 19x17", "#1118 @ 327,343: 17x27", "#1119 @ 873,538: 16x18", "#1120 @ 243,918: 13x10", "#1121 @ 568,218: 10x21", "#1122 @ 715,681: 20x29", "#1123 @ 558,802: 15x24", "#1124 @ 136,539: 14x29", "#1125 @ 882,124: 20x20", "#1126 @ 225,605: 17x22", "#1127 @ 352,761: 27x29", "#1128 @ 227,73: 28x15", "#1129 @ 528,953: 26x25", "#1130 @ 139,869: 23x27", "#1131 @ 155,401: 17x13", "#1132 @ 878,660: 16x22", "#1133 @ 876,483: 21x11", "#1134 @ 43,756: 18x22", "#1135 @ 589,760: 25x29", "#1136 @ 39,697: 17x24", "#1137 @ 321,866: 20x10", "#1138 @ 927,788: 29x14", "#1139 @ 740,142: 15x17", "#1140 @ 527,872: 24x24", "#1141 @ 189,115: 20x20", "#1142 @ 317,489: 24x20", "#1143 @ 346,573: 16x26", "#1144 @ 554,937: 27x11", "#1145 @ 268,134: 24x10", "#1146 @ 101,861: 13x13", "#1147 @ 274,240: 19x13", "#1148 @ 257,361: 28x15", "#1149 @ 684,950: 15x22", "#1150 @ 111,335: 18x19", "#1151 @ 146,564: 27x18", "#1152 @ 480,336: 11x25", "#1153 @ 321,187: 14x28", "#1154 @ 7,387: 27x21", "#1155 @ 667,503: 22x11", "#1156 @ 41,322: 20x21", "#1157 @ 822,902: 16x10", "#1158 @ 387,370: 25x26", "#1159 @ 854,493: 26x25", "#1160 @ 839,430: 24x19", "#1161 @ 299,231: 10x25", "#1162 @ 282,432: 17x28", "#1163 @ 924,188: 12x25", "#1164 @ 609,966: 11x17", "#1165 @ 950,692: 16x26", "#1166 @ 508,744: 17x28", "#1167 @ 214,631: 13x19", "#1168 @ 795,268: 26x19", "#1169 @ 752,657: 25x11", "#1170 @ 334,568: 24x24", "#1171 @ 301,703: 13x27", "#1172 @ 437,526: 10x16", "#1173 @ 288,246: 14x10", "#1174 @ 906,68: 27x12", "#1175 @ 138,562: 21x21", "#1176 @ 617,18: 13x11", "#1177 @ 273,279: 15x11", "#1178 @ 489,863: 21x14", "#1179 @ 780,297: 21x16", "#1180 @ 818,329: 7x11", "#1181 @ 626,561: 27x13", "#1182 @ 677,842: 13x19", "#1183 @ 532,429: 12x21", "#1184 @ 741,176: 18x17", "#1185 @ 604,601: 23x20", "#1186 @ 508,830: 19x28", "#1187 @ 32,871: 16x11", "#1188 @ 105,14: 14x16", "#1189 @ 548,282: 22x13", "#1190 @ 259,246: 18x13", "#1191 @ 187,950: 17x19", "#1192 @ 929,475: 20x29", "#1193 @ 546,320: 26x12", "#1194 @ 289,230: 12x15", "#1195 @ 309,162: 19x26", "#1196 @ 199,887: 29x27", "#1197 @ 200,536: 12x12", "#1198 @ 111,416: 16x23", "#1199 @ 903,977: 14x14", "#1200 @ 530,445: 20x21", "#1201 @ 612,764: 29x13", "#1202 @ 13,53: 23x28", "#1203 @ 799,395: 14x10", "#1204 @ 382,811: 21x10", "#1205 @ 697,762: 14x29", "#1206 @ 965,497: 18x26", "#1207 @ 696,646: 22x13", "#1208 @ 434,462: 15x13", "#1209 @ 441,561: 17x25", "#1210 @ 895,584: 12x29", "#1211 @ 334,866: 21x12", "#1212 @ 967,25: 16x20", "#1213 @ 64,32: 16x23", "#1214 @ 14,636: 25x13", "#1215 @ 423,0: 23x27", "#1216 @ 389,665: 16x21", "#1217 @ 669,20: 17x23", "#1218 @ 224,168: 10x24", "#1219 @ 394,674: 5x6", "#1220 @ 372,275: 20x25", "#1221 @ 312,381: 25x24", "#1222 @ 142,907: 18x13", "#1223 @ 385,351: 17x24", "#1224 @ 891,823: 19x14", "#1225 @ 593,582: 22x13", "#1226 @ 179,51: 25x15", "#1227 @ 297,870: 17x13", "#1228 @ 140,905: 24x19", "#1229 @ 487,83: 22x18", "#1230 @ 337,370: 28x17", "#1231 @ 838,505: 23x14", "#1232 @ 859,905: 12x23", "#1233 @ 141,879: 23x19", "#1234 @ 65,808: 23x19", "#1235 @ 925,272: 12x23", "#1236 @ 400,704: 17x15", "#1237 @ 715,925: 20x22", "#1238 @ 51,79: 19x11", "#1239 @ 101,858: 12x14", "#1240 @ 147,867: 11x26", "#1241 @ 412,939: 29x17", "#1242 @ 578,234: 18x19", "#1243 @ 558,234: 22x22", "#1244 @ 222,840: 12x29", "#1245 @ 105,405: 23x17", "#1246 @ 576,650: 18x25", "#1247 @ 436,777: 27x25"}}
fmt.Println("claims: ", d.GetOverlappingClaims())
//d.GetUnclaimedAreas()
case day4:
d = device{logEntries: pInputs.Day4()}
fmt.Println("the sleepy guard value is: ", d.GetGuardAndMinute())
fmt.Println("the guard value sleeping most often is: ", d.GetSleepiestMinute())
case day5:
d = device{polymerLength: 50000, polymers: pInputs.Day5()}
start := time.Now()
fmt.Println("the number of polymers is: ", d.GetReactions(""))
elapsed := time.Since(start)
fmt.Println("Getting reactions took %s", elapsed)
start = time.Now()
fmt.Println("the number of optimized polymers is: ", d.GetOptimizedReactions())
elapsed = time.Since(start)
fmt.Println("Getting optimized reactions took %s", elapsed)
}
}
func (d *device) Calibrate() {
var f int = 0
//for index, element := range someSlice {
for _, element := range d.frequencies {
f += element
}
d.SetFrequency(f)
}
func (d *device) Contains(f int) bool {
for _, v := range d.found {
if v == f {
return true
}
}
return false
}
func (d *device) CheckRepeats() int {
var f int = 0
var floop int = 0
d.found = append(d.found, f)
for floop < 1 {
for _, v := range d.frequencies {
f += v
if (d.Contains(f)) {
return f
} else {
d.found = append(d.found, f)
}
}
}
return f
}
func (d *device) SetFrequency(frequency int) {
d.frequency = frequency
}
func (d *device) Frequency() int {
return d.frequency
}
func (d *device) GetChecksum() int {
var two = 0
var three = 0
for _, boxId := range d.boxIds {
var m = make(map[string]bool)
var letters = strings.Split(boxId, "")
var twoCounted = false
var threeCounted = false
for _, l := range letters {
_, ok := m[l]
if !ok {
var count = strings.Count(boxId, l)
if count == 2 && !twoCounted {
two += 1
twoCounted = true
} else if count == 3 && !threeCounted {
three += 1
threeCounted = true
}
m[l] = true
}
}
}
return two * three
}
func (d *device) GetCommon() string {
for i := 1; i < len(d.boxIds); i++ {
var compareI = d.boxIds[i - 1];
for j := i; j < len(d.boxIds); j++ {
var count = 0
var compareJ = d.boxIds[j]
var s []string
// assume word sizes are the same
var iLtrs = strings.Split(compareI, "")
var jLtrs = strings.Split(compareJ, "")
for k := 0; k < len(iLtrs); k++ {
var iLtr = iLtrs[k]
var jLtr = jLtrs[k]
if iLtr != jLtr {
count += 1
if count == 2 {
break;
}
} else {
s = append(s, iLtr)
}
}
if count == 1 {
var idString = ""
for _, v := range s {
idString += v
}
return idString
}
}
}
return ""
}
func (d *device) GetOverlappingClaims() int {
// ........
// ...2222.
// ...2222.
// .11XX22.
// .11XX22.
// .111133.
// .111133.
// ........
// #1 @ 1,3: 4x4
var areas = make(map[string]int)
d.unclaimedAreas = make(map[string]int)
var overlaps = 0;
for _, claim := range d.claims {
var parts = strings.Split(claim, " @ ")
var claimId = parts[0]
var claimParts = strings.Split(parts[1], ": ")
var coords = strings.Split(claimParts[0], ",")
var area = strings.Split(claimParts[1], "x")
x, _ := strconv.Atoi(coords[0])
y, _ := strconv.Atoi(coords[1])
w, _ := strconv.Atoi(area[0])
h, _ := strconv.Atoi(area[1])
for i := x; i < x + w; i++ {
for j := y; j < y + h; j++ {
var iStr = strconv.Itoa(i)
var jStr = strconv.Itoa(j)
var claimed = iStr + "x" + jStr
_, ok := areas[claimed]
if !ok {
areas[claimed] = 1
} else if (areas[claimed] == 1) {
overlaps += 1
areas[claimed] += 1
} else {
areas[claimed] += 1
}
}
}
// FIXME: Day 3 Part 2 unresolved
//fmt.Println("claimid: ", claimId)
var hasOverlap = false
for i := x; i < x + w; i++ {
for j := y; j < y + h; j++ {
//var iStr = strconv.Itoa(i)
//var jStr = strconv.Itoa(j)
//var claimed = iStr + "x" + jStr
//fmt.Print(areas[claimed])
//_, ok := areas[claimed]
//if ok && areas[claimed] > 1 {
// hasOverlap = true
//}
}
}
//fmt.Println("")
hasOverlap = true
//fmt.Println("claimid, hasOverlap: ", claimId, hasOverlap)
if !hasOverlap {
//fmt.Println("unclaimed area: ", claimId)
_, ok := d.unclaimedAreas[claimId]
if !ok {
d.unclaimedAreas[claimId] = 1
}
}
}
return overlaps
}
func (d *device) GetUnclaimedAreas() string {
for unclaimedId, _ := range d.unclaimedAreas {
fmt.Println("unclaimed area: ", unclaimedId)
}
return ""
}
func (d *device) GetGuardAndMinute() int {
d.guardMinutes = make(map[string]int)
d.guardTimes = make(map[string]int)
sort.Strings(d.logEntries)
var guard string
var start int = 0
var end int = 0
for _, entry := range d.logEntries {
if strings.Contains(entry, "begins shift") {
guard = d.GetGuard(entry)
} else if strings.Contains(entry, "falls asleep") {
start = d.GetMinute(entry)
} else if strings.Contains(entry, "wakes up") {
end = d.GetMinute(entry)
// fmt.Println("setting ", guard, start, end)
d.SetMinutesFromRange(guard, start, end)
}
}
return d.GetSleepyGuard()
}
func (d *device) GetSleepyGuard() int {
var guard = 0
var minute = 0
var minutes = 0
for guardMinute, totalMinutes := range d.guardMinutes {
if totalMinutes > minutes {
minutes = totalMinutes
guard, _ = strconv.Atoi(guardMinute)
}
}
for guardTime, minuteCount := range d.guardTimes {
var parts = strings.Split(guardTime, "-")
var checkGuard, _ = strconv.Atoi(parts[0])
if (guard == checkGuard) {
// fmt.Println("checking ", guardTime, minuteCount, parts[0], parts[1])
if minuteCount > minute {
minute = minuteCount
minutes, _ = strconv.Atoi(parts[1])
}
}
}
return guard * minutes
}
func (d *device) GetSleepiestMinute() int {
var guard = 0
var minute = 0
var m = 0
for guardTime, minuteCount := range d.guardTimes {
var parts = strings.Split(guardTime, "-")
// fmt.Println("checking ", guardTime, minuteCount, parts[0], parts[1])
if minuteCount > m {
guard, _ = strconv.Atoi(parts[0])
minute, _ = strconv.Atoi(parts[1])
m = minuteCount
// fmt.Println("found", guard, minute)
}
}
return guard * minute
}
func (d *device) GetGuard(entry string) string {
var parts = strings.Split(entry, "#")
var guardParts = strings.Split(parts[1], " ")
return guardParts[0]
}
func (d *device) GetMinute(entry string) int {
var parts = strings.Split(entry, "]")
var timeParts = strings.Split(parts[0], ":")
var minute, _ = strconv.Atoi(timeParts[1])
return minute
}
func (d *device) SetMinutesFromRange(guard string, start int, end int) {
for i := start; i < end; i++ {
_, ok := d.guardMinutes[guard]
if !ok {
d.guardMinutes[guard] = 1
} else {
d.guardMinutes[guard] += 1
}
// fmt.Println("setting guard, start, end, i: ", guard, start, end, i)
_, ok = d.guardTimes[guard + "-" + strconv.Itoa(i)]
if !ok {
d.guardTimes[guard + "-" + strconv.Itoa(i)] = 1
} else {
d.guardTimes[guard + "-" + strconv.Itoa(i)] += 1
}
// fmt.Println("guard minute is now: ", guard, i, d.guardTimes[guard + "-" + strconv.Itoa(i)])
}
}
func (d *device) GetReactions(excludeUnit string) int {
// start on 2nd char, so we can compare to prev
// ignoring the case where the first character reacts, because KWwBbJt... shouldn't have that problem
var p [50000]string
excludeUnit = strings.ToLower(excludeUnit)
for i := 1; i < d.polymerLength; i++ {
// fmt.Println("checking: ", i, i - 1)
var j = i - 1
for {
if (j >= 1 && p[j] == "-") {
j -= 1
} else {
break
}
}
var k = i
if (i == 1) {
p[j] = d.polymers[j:j + 1]
if (strings.ToLower(p[j]) == excludeUnit) {
p[j] = "-"
}
}
if (p[k] == "-") {
continue
}
if (strings.ToLower(d.polymers[k:k + 1]) == excludeUnit) {
p[k] = "-"
continue
}
if Reactive(d.polymers[j:j + 1], d.polymers[k:k + 1]) {
p[j] = "-"
p[k] = "-"
// check surrounding pairs
for {
j -= 1
if (j < 0) {
break
}
for {
if (p[j] == "-") {
j -= 1
if (j < 0) {
break
}
} else {
break
}
}
k += 1
if (k + 1 > d.polymerLength) {
break
}
if (j < 0) {
break
}
if (strings.ToLower(d.polymers[k:k + 1]) == excludeUnit) {
p[k] = "-"
}
if !Reactive(d.polymers[j:j + 1], d.polymers[k:k + 1]) {
break
} else {
p[j] = "-"
p[k] = "-"
}
}
} else {
if (d.polymers[k:k + 1] == excludeUnit) {
p[k] = "-"
} else {
p[k] = d.polymers[k:k + 1]
}
}
}
var b strings.Builder
b.Grow(d.polymerLength)
for _, polymer := range p {
// fmt.Println("checking: ", polymer)
if polymer != "-" {
b.WriteString(polymer)
}
}
// fmt.Println(b.String())
return len(b.String())
}
func Reactive(p1 string, p2 string) bool {
if strings.ToLower(p1) == strings.ToLower(p2) {
if p1 == strings.ToLower(p1) && p2 == strings.ToUpper(p2) {
return true
}
if p1 == strings.ToUpper(p1) && p2 == strings.ToLower(p2) {
return true
}
}
return false
}
func (d *device) GetOptimizedReactions() int {
var optimized = make(map[string]int)
for i := 0; i < d.polymerLength; i++ {
var polymer = strings.ToLower(d.polymers[i:i+1])
_, ok := optimized[polymer]
if !ok {
var optimizedReactions = d.GetReactions(polymer)
optimized[polymer] = optimizedReactions
}
}
var optimCheck = 1000000
for _, optim := range optimized {
if optim < optimCheck {
optimCheck = optim
}
}
return optimCheck
}