-
Notifications
You must be signed in to change notification settings - Fork 3
/
main.go
993 lines (977 loc) · 8.44 KB
/
main.go
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
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
package main
import (
"fmt"
"strings"
)
func main() {
part1()
part2()
}
func part1() {
lines := strings.Split(input, "\n")
pairs := make([][]string, len(lines))
for i, line := range lines {
pairs[i] = strings.Split(line, ")")
}
back := map[string]string{}
for _, pair := range pairs {
back[pair[1]] = pair[0]
}
depth := map[string]int{}
var search func(string) int
search = func(name string) int {
if d, ok := depth[name]; ok {
return d
}
d := 0
b, ok := back[name]
if ok {
d = search(b) + 1
}
depth[name] = d
return d
}
sum := 0
for k := range back {
sum += search(k)
}
fmt.Println(sum)
}
func part2() {
lines := strings.Split(input, "\n")
pairs := make([][]string, len(lines))
for i, line := range lines {
pairs[i] = strings.Split(line, ")")
}
back := map[string]string{}
edge := map[string][]string{}
for _, pair := range pairs {
back[pair[1]] = pair[0]
edge[pair[1]] = append(edge[pair[1]], pair[0])
edge[pair[0]] = append(edge[pair[0]], pair[1])
}
start := back["YOU"]
end := back["SAN"]
depth := 0
work := []string{start, ""}
seen := map[string]bool{}
for {
var cur string
cur, work = work[0], work[1:]
if cur == "" {
depth++
work = append(work, "")
continue
}
if seen[cur] {
continue
}
if cur == end {
break
}
seen[cur] = true
for _, e := range edge[cur] {
work = append(work, e)
}
}
fmt.Println(depth)
}
const input = `Z52)127
271)7TV
CJN)HYP
TCQ)65C
2R9)6QM
VND)VMR
1KM)47Y
Z83)CGH
8RF)17J
Q5D)S5F
WGK)HWX
QZH)671
RZ2)Z2F
6K1)9ZH
973)NL2
6YN)YFY
FCS)288
X8D)K15
QQY)2X8
95J)6QQ
W21)YN2
ZRC)9LQ
J23)2SW
F9T)G7L
GC4)5YL
QYS)152
9YX)5ZR
T8Q)Z4K
SK8)B8N
XQH)ZVG
XQZ)LHX
PSM)M9M
H1K)1WV
P81)ZCN
TGJ)44W
JNL)352
44W)2NZ
V5D)LPJ
VML)86P
5CK)4FB
53S)JKL
TQV)HJ8
9WS)S6K
5S9)43T
KKQ)KHD
S2N)YNN
RXB)5X6
T4G)ND4
9J3)JRY
T9C)3R1
7NF)F26
TL7)SMJ
521)4NS
YXH)8Z5
KWX)WF3
65C)NWB
3S7)SZ1
288)SDL
GWL)QLT
CYX)6RF
RFV)JKN
PND)3K9
CRT)V5D
ZY3)2V8
QDR)DLR
MXS)1X7
2KK)T44
P2L)8B4
GZ8)C71
SLZ)LQV
JTZ)WGK
1QG)3S7
YZN)9XL
HKG)X8D
RHS)VL1
X1Z)K51
KDP)XFP
P6B)YL6
237)76W
PV1)Z1M
DY6)GWL
1X7)WBM
8RF)XQZ
DPQ)RQ4
54D)9QW
YNN)LQ9
WTT)V79
2R3)Y1J
69B)GK3
Q4Z)2DK
F8R)5QG
KD1)HGK
J5N)9ZR
4GR)67G
HXT)R2T
NDY)9YH
QJH)62P
SLP)JCZ
SSS)TY9
BCF)93Q
CWV)SLP
1YG)Y5C
72D)KPT
6FY)JK6
WQ8)CPN
RCN)P6B
NBV)QJH
G7W)P9Q
K9B)S9G
G8X)14T
FTS)QLY
LNC)T8Q
2DK)51S
4FT)QHB
Z7W)KZ2
39B)LXJ
GNK)1PS
BCX)D82
FFC)6TP
3JC)SXQ
CTM)YXV
3Q4)763
L6C)YMM
GBL)S2T
SHB)Q3B
GLD)NGP
1R6)R3V
68P)LNL
QLT)4NJ
CLD)7G6
6S4)973
JSD)7FS
Y4P)488
HK9)X65
7WC)VVV
67S)DQP
HWX)9G7
68M)M7T
78F)BCF
JCZ)X4V
VNJ)FH2
82Z)MNC
3K9)7LZ
X1P)GZ5
PJ7)GVH
KH7)1YG
Z12)XG7
DPL)PYW
476)QKB
SPC)794
ZZD)LCB
CRC)B6M
Z9P)9YX
2X8)GMM
HKY)765
VSN)G5V
SL7)LF3
XLP)SLZ
8Z5)XDC
1PS)ZKF
CPZ)Q9J
38V)JJX
FF8)ZXT
43T)4DP
H6R)2CP
B57)YQD
1BT)QZH
74M)25B
D2F)FYK
P9Q)Q5D
ZZW)7V2
F6G)ZRZ
JK6)Y3J
YL6)97X
424)2CW
NPC)8Z8
RTC)PKX
NH4)PND
QLY)MXS
Q9J)Z84
ZRZ)GHQ
L1M)1GF
GBQ)N44
JQ3)PWM
6ZZ)K4D
67S)RR8
ZYM)YM1
69K)ZP6
TJS)HM1
P9W)Z8V
5NV)DZB
KHD)Q65
488)GH3
TML)H2G
C71)8HF
P9W)ZL7
GPM)MVP
S6K)3BJ
RVZ)9QB
2PS)BW7
NS9)V6B
L9R)NF5
V1S)FT5
DPR)87B
PZW)JVJ
T6D)TQ5
Z9D)THN
JGQ)M5X
1LY)WGR
H8Y)6KZ
LNL)G4X
R3V)719
9J7)DV9
HG9)476
6CP)XZS
GZ4)VML
V4G)LZ4
XZS)7NK
4LL)P81
S9G)Q4Z
62P)Z7F
B4V)TGJ
RLZ)ZFW
3R1)TL7
ZSX)CHL
7FH)229
4NS)9WS
2C4)W2C
ZBY)1NF
F8Y)GZ8
LZ4)355
KTH)8NJ
731)NZ1
THN)9GD
QV7)Z8W
71P)CYX
P3S)K4J
H2G)ZWD
XJ7)7KR
NH4)KDK
763)ZHP
1Q7)W3Q
RWJ)22Z
VNQ)FYT
2H9)T9C
2QM)LXV
BCT)M1F
HCM)YJY
C97)K6Q
671)89Z
9QB)14P
T5T)GDQ
76W)3ZN
ZFT)GL2
FVJ)T9D
794)J9J
86P)F5M
FN7)FRX
ZQ9)1F6
8B4)2N6
ZVG)781
S2T)JYM
LPJ)R4Y
Y4P)W34
6RF)MG1
ZCL)67L
P81)CJK
M1F)QFD
Z63)RZ2
GZ5)731
R2T)KDT
TTZ)9S5
4DP)128
78F)ZY3
SZ1)T6D
TR4)BSW
FQ6)FHT
Y1Y)PHY
TDC)85T
853)DZL
152)TML
6KZ)QYS
SXQ)6WT
B8N)4JF
6X3)J23
XZP)68P
F5M)DPR
FH2)7NF
8R6)18X
DJJ)W1W
WF3)GLD
BL6)2MQ
79G)PJ7
TBM)JTZ
TQJ)424
W6J)642
FH9)1KM
128)SK8
KX6)64R
5M9)XQ9
LQV)R2N
ZW3)FYJ
9PR)5NY
6YN)NCV
XP8)8W9
XV7)4J2
XTD)GR6
4TB)RJ4
KPT)B57
HXC)5HD
LNC)WMK
7LZ)NS9
HM1)9SY
WSL)CDZ
V1V)Z63
WGR)81T
2YF)ZK9
S5Q)34X
TGX)TQJ
LNQ)LLD
PVM)JF3
HKP)PV1
FQC)SK1
F26)GCT
GH3)ZDP
WFC)8V4
RX5)6W4
14P)H1K
RR8)GV7
R12)W69
YS2)X4J
TLV)LCJ
29X)PSM
K15)PMQ
HF4)XTC
3GN)W42
D6J)H7F
JF3)562
89Z)2KK
WMS)WTZ
7YV)FH9
229)QNR
9XL)PQQ
S6H)7KF
DQP)HG9
87B)LGW
SK1)GYB
Z9S)6SP
RZ4)TQV
562)5KN
V5X)GBL
N7H)XWL
9YH)Y1Y
N44)2QM
NSX)DL1
KDT)7Q6
CNH)QXY
HLL)R7Z
JV8)RVZ
16X)DY6
14T)38V
LCJ)ZYM
6WT)RHS
2KS)MZM
KV9)FJ1
SDH)521
8LZ)8Q4
9ZH)F8R
9ZR)B9X
4FR)XJ7
FRX)39B
L6N)BX2
TQ5)3RG
PRN)HHQ
GMX)413
DZL)6YN
S2N)NR8
6SP)16V
RTC)XTD
7KR)L1B
355)W71
ZPD)QDR
BW3)3FF
YJY)8R6
W9N)GBQ
D2M)7GG
DWV)HYQ
6TM)8XR
FYV)628
CJK)C5X
FYJ)J1C
2CP)23F
51S)ZCL
9LQ)L1M
RHS)L9R
QGJ)HXC
4ZY)PJR
1KL)QQY
FZV)BJF
1YL)54D
NLP)TJS
1KM)D39
91W)6X3
8PX)13W
ZP6)RCN
K5H)CRC
RP7)1XK
4L2)4D1
F4V)GZ4
8XF)42D
HCM)389
H28)RJC
389)CWT
XKB)4FR
JKL)P92
FT5)54H
C1Z)67S
LRC)4LL
QBV)4V7
TTR)19L
PS6)38X
M5X)DBQ
L1B)S5Q
D9T)2R3
WVQ)JSD
9GD)7YV
MG1)L86
PCZ)F4V
WJV)M99
K4J)GHX
Q3B)R25
D82)TXX
6JK)CHM
ZXT)HK9
V79)HPW
M7T)53S
Z21)XZX
R25)D6J
W8S)2YF
VBF)RXB
X4J)FQ6
352)M1Z
JTF)MSF
CMY)GMX
9SY)CXS
BX2)72D
422)MP7
RJC)6BD
MVP)WQ8
ZFW)Z7W
XDY)TDC
3K9)W6J
LV7)WYN
YFY)158
Z84)HCM
9S5)C1Z
DBQ)FQC
YV7)N5Z
LGW)34Q
MNC)V5X
NHG)XGZ
Z4K)YYP
2MQ)79T
44V)VG5
8W9)BG4
FYV)RQQ
979)K9B
YXK)HLX
W9X)PZW
PLD)PW8
XQ9)TR5
C16)77Q
XWL)P2L
4J2)C16
38Y)Z83
53G)F6G
GV7)NC8
277)B73
WJR)Y4P
781)FFH
5HD)46Q
WDV)HKY
M1Z)J1Y
4V7)QFJ
CLL)ZPD
G2P)2WN
3ZN)QCT
YTQ)LV7
JVJ)1WW
1WV)5V1
V1X)8VN
4QK)4ZY
CDZ)TTR
M9M)WCV
XDC)7SR
TR4)WMS
4FB)Z9P
QTZ)4K2
Z2F)KHT
CLK)JK4
MN5)Z9S
4PN)HK5
COM)8RF
DVY)HJV
4TL)MYK
7TB)3JC
KWJ)QBV
4JF)3PZ
X4G)78F
XLQ)ZM5
BSW)YOU
4RG)MWX
79T)JV8
2SW)S2F
R4Y)RSQ
6Y4)5S9
23F)NDY
182)M32
ZHP)V1V
MP7)KWJ
V5X)L6N
L6C)M19
642)SL7
Z1M)V1X
GYH)F95
FH2)5CK
6QQ)SVV
BJK)7ZL
YM1)MP6
CPN)P6J
W34)F8Y
VTD)D9T
HKP)LNC
SS8)B9H
NS9)CMY
NGP)HN1
BG7)NH4
R2N)WSL
5YL)VR2
ZCN)BDN
K51)CX9
HHQ)2H9
CWT)GGB
3BJ)CJN
XG7)PZM
GDQ)YPN
BJF)ZZD
3PZ)SS8
GFJ)JQ3
X3M)44F
6W4)X69
Q74)CTM
FFH)71P
5X6)44V
2N6)GJT
1W4)VSN
FYT)68M
BB1)4RG
DL1)ND8
JK4)WJR
M32)4L2
L3H)CWV
78L)CLK
127)1Q7
FKZ)V1S
22Z)YS2
NWB)8R4
5X8)2JB
ZKF)HKG
HPW)77Y
MXS)6Y4
ZQC)BX7
47Y)4ZP
CP8)38Y
HJV)Y4N
HK5)76F
8N2)29X
BDH)RS9
NR8)K5H
GYB)G2P
PZM)ZZW
G8X)4FT
ZM5)95J
PJR)PPF
BW7)KD1
SCK)H31
HGC)TGB
PZ6)DVY
JF3)V33
521)PQG
H7F)SAN
1XK)JC2
PQQ)W6F
MHN)XMG
SVV)H28
RJ4)DPL
7KF)YNZ
7NK)HF4
Y3J)PCT
X69)HGC
PKG)QPF
V33)DWV
TK8)8T1
YWK)69K
64R)FZV
PMQ)H8Y
KDK)NTK
WCV)92J
RQQ)TK8
R2N)GPM
YQK)NBV
ND4)TBC
V5D)WDV
HYQ)SSS
GMM)H8B
W1X)VNJ
TLW)BL6
Q65)ZJB
GHX)XQH
YGS)TLV
49H)6JK
5QG)RD5
HGP)PTC
V6B)SMM
W2C)2KS
S5F)1KL
F6D)NSX
18X)CP8
N5Z)TBM
F6G)D4Y
3Q4)XZP
C7K)BCT
Z4K)WTT
7FS)RWJ
CHM)GFJ
QPG)Z52
RF1)8N2
B73)YWK
QPF)T58
J1C)K4W
2NZ)N86
QHB)4LG
JTJ)WFZ
DPR)JTF
128)53G
ZDP)RFV
413)WJS
M19)CLL
ND8)1YL
CHL)277
VR2)78L
QGJ)P9W
PYW)YV7
VNQ)RP7
Z8V)FN7
LGW)PRN
17J)ZQ9
3RG)9BV
Y8S)KTH
F95)2R9
9G7)ZGN
JC2)6K1
GBL)JGQ
FZY)16X
8HF)975
K4D)KH7
YV7)JC1
QXY)4PN
BX7)WNT
38Y)FYV
7LZ)LNQ
8NJ)YGN
P2L)S2N
FHT)XP8
TBC)V81
34Q)KDP
1NF)V4G
WTZ)S39
NL2)PVM
W71)Q6D
9FB)L6C
NF5)JNL
2V8)V3F
W6F)FF8
92J)YGS
SQ7)FKZ
HN1)YQK
8T1)8PX
HLX)JTJ
2WN)3CY
1F6)79G
TXX)G8X
LQ9)1W4
ZWD)KQL
G7L)YTQ
BD2)4QK
9FB)1BT
8XR)W9N
1F4)8XF
JYM)6S4
TML)KKQ
HWX)S3Y
SND)TR4
42D)6TM
81T)QZG
S39)D8G
YQD)78P
YMM)5X8
JJX)FTS
Q74)SCK
278)X5Y
PJY)49H
S4R)9C4
H7N)Z12
M2B)RLZ
Y1J)QTZ
93Q)X1P
6BD)XKB
1GF)VL6
6TP)736
RD5)C97
B6M)D2F
37Q)S4R
8VN)BB1
S2F)YZN
G5V)M2B
LHX)YXK
PWM)P3S
ZG1)GNK
2JB)B4V
4XY)1NG
9C4)VV7
7NC)PZ6
WSL)271
FYK)S6H
KQL)7NC
PKX)BD2
FJ1)HLL
4TL)QPG
YGN)T2J
T44)XLQ
54H)PJY
87N)2PS
Z7F)SPC
FRX)ZSX
B9X)CB1
MZM)VNQ
WFZ)NHG
CX9)HK7
8V4)9GM
W69)TTZ
Z8W)4TB
7V2)T5T
7Q6)9J3
8R4)NPC
76F)MFJ
QCT)HMW
5KN)X4N
7TV)QV7
46Q)278
JC1)X3M
97X)N7H
WMK)ZBY
WCV)KX6
MFJ)82Z
19L)W21
G4X)7GP
5ZR)9J7
TR5)ZFT
D39)1F4
NTK)69B
KZ2)37Q
3CY)SND
LMH)VBF
RSQ)3YV
736)16S
Y5C)ZG1
85T)XLP
9YQ)TGX
765)FFC
158)TCQ
8S6)J5N
5CK)F9T
GVH)6ZZ
V81)WJV
1NG)3Q4
5NY)NCW
BJQ)CRT
MWX)PRV
YTQ)GC4
CXS)7FH
Q6D)PCZ
9S5)F6D
T58)BG7
MP6)RZ4
PHY)QGJ
ZGN)X4G
34X)HGP
4K2)5NV
4LG)853
SDL)V7L
C5X)XV7
PQG)87N
8W9)NLP
PPF)HKP
PL5)Q74
VL1)4XY
GC4)1QG
CGH)YXH
4DP)422
719)QFB
V7L)PS6
7T6)G7W
D4Y)3GN
9GM)T4G
YXK)CLD
D8G)ZQC
W6J)8LZ
13W)3W1
HK7)DPQ
43T)FVJ
YXV)W9X
H8B)RX5
6QM)HXT
QKB)PLD
78P)BW3
9QW)PL5
GR6)W1X
GHQ)ZRC
3W1)D8F
VV7)F3R
YYP)9PR
HJ8)SBC
M99)H6R
B9H)8S6
7GG)CNH
MZM)MHN
HN1)5M9
ZK9)MN5
7G6)182
XTC)2LV
PTC)4D9
LXV)9FB
P6J)7T6
GZ4)Z9D
PW8)SJF
JRY)RTC
NCW)SDH
3JC)237
ZJB)WFC
WYN)7WC
P92)BDH
NC8)1LY
NCV)DJJ
QNR)2C4
YN2)KV9
VNJ)H7N
67G)1R6
6S4)9YQ
K6Q)BFH
QFB)SHB
RQ4)RF1
W3Q)QSM
QFJ)PKG
XMG)FZY
MSF)LMH
SBC)979
F3R)GYH
7SR)NJC
7ZL)BCX
X4N)L3H
HMW)VTD
5V1)WVQ
S3Y)TLW
67L)4GR
L86)BJQ
ZL7)VND
4ZP)R12
44F)6FY
6X3)ZW3
LXJ)LRC
Y3J)6CP
LLD)4TL
4D9)SQ7
GL2)5HB
3YV)BJK
77Y)74M
LF3)C7K
GJT)91W
GK3)Y8S
K4W)XDY
KDK)KWX
SMM)CPZ
WBM)D2M
VMR)FCS
4NJ)W8S
BFH)X1Z
BG4)7TB
CPN)Z21`