Skip to content

Instantly share code, notes, and snippets.

@theglauber
Created December 7, 2019 02:42
Show Gist options
  • Save theglauber/4f2cd6e6dfa1738f27ad34e267cf1417 to your computer and use it in GitHub Desktop.
Save theglauber/4f2cd6e6dfa1738f27ad34e267cf1417 to your computer and use it in GitHub Desktop.
Advent of code 2019 day 6
YQ2)CYG
63M)X4N
7YF)LRN
K2B)PVC
394)195
W68)QNR
XDS)SX7
JWG)789
6RR)4R1
S9Y)M1X
VDC)R4V
7G4)4YZ
XK2)K4M
R7M)ZHC
Q14)ZS1
GJF)4RM
YQ2)K4G
T98)2GB
YRP)3Q9
SD7)XRN
DYR)GQZ
4NV)T6C
8LL)WLB
9GX)T7C
673)Q4F
V2F)B5Q
BZN)RPX
Y2T)X6B
P89)F2S
WFQ)JNL
JJ7)QK7
HYQ)RWS
Q97)V15
NHX)XND
MHP)P5L
PPL)H6G
KVV)535
8NK)9FG
B6X)6MG
MX2)T8M
7NC)V6V
ZP1)SN7
FY5)PJX
J9S)H1F
LRZ)VPY
PSG)S74
DGK)N44
QJ1)BRR
2XM)LVG
ZG1)QNQ
72L)QJ1
GNQ)XT4
1XJ)PKH
T3M)ZB7
JQS)B53
CNV)7PL
4MF)9YJ
9FG)RKT
WKZ)GNQ
TR5)NNB
91T)NCN
1K1)YYJ
7W7)8MQ
PTB)4FS
X7S)88Q
RRD)17D
PM3)8DL
5X9)BYV
1MX)7R4
6ZT)34D
514)9Q7
PW8)B6X
DJZ)MWR
JW5)JL1
8QJ)LYF
JKR)BGW
QDN)BPT
G83)DSM
W2G)R1S
PRH)K9W
S4P)XH3
4CK)FLF
LN4)CPB
L2J)CPX
B4G)V7Y
343)1SG
QVS)62F
9YX)LL1
Q24)S23
BFL)9PN
Q5H)7YF
HT1)9SG
DGJ)Z8Z
NJG)LQN
6DQ)211
PKL)4NV
91J)BBK
V8W)TFB
Q4F)644
RYB)SBJ
1PX)626
PV8)RHN
KZP)861
VCS)V29
ZWV)BGV
XF4)XC8
CZG)3C6
GVL)RWJ
MHC)KM8
RQR)C8L
YQN)T6Z
WQF)8NF
BNF)RZP
MTJ)7W4
1Z4)QF4
Y7T)FQG
RRP)914
J7D)Q4D
RWH)95J
PYM)XF3
JNF)PD1
RV6)514
956)3RJ
PSY)NW6
TV5)MPW
SPH)7RY
WSP)8V4
66Y)B5W
W6M)6T5
MB7)VX5
RX9)9Q5
731)Y7T
SCR)DXH
F8S)6HP
G34)XRW
QWC)Q57
GPQ)JJH
LTY)RX9
T8M)QXX
7JN)RGZ
T5V)771
9ZY)9V7
HCX)2H2
ZQH)4CL
1TJ)VSH
3G2)KWX
D3P)5RD
X16)91V
T73)3TN
PCZ)5HG
DRZ)Z9D
M5M)LCY
5T8)66Y
RW9)HR6
J4V)KTL
JL1)1GC
7JY)FT8
4MR)PVT
1Y3)LC1
VLG)LSP
PQD)FJF
LP7)4CB
BYW)8F8
ZWB)H35
9RX)CLD
BWY)7XZ
TB1)T3B
NDZ)2D5
R1K)VVM
LC1)8QX
L6L)G5N
8F7)BF2
7KD)MYW
N2H)Q1D
W5X)S98
49M)GD7
MRD)L9Z
QYP)4CT
SH3)VQZ
MHF)FP1
VJN)NFX
Z81)N5R
41H)8HW
Z5B)CNW
S3S)LP7
P2C)XW7
5F9)KWT
NL1)KQL
FLV)8QJ
77L)VCS
1PC)L1N
S45)JMX
1S6)K8C
D4D)CTB
5T4)KCM
SZP)XKL
3GX)343
PK7)ZDY
V84)ZJ7
JJZ)CH5
6Q2)4GX
SX7)5F9
535)BYM
XHM)533
4R1)B4G
V6V)RRR
1YY)1TF
G1X)GMY
N28)H96
Z1B)W2S
9JK)28M
G2R)WGV
KY2)QD3
XKQ)D4D
5T2)DQ4
QF8)V84
K7L)LRH
H3G)NF4
FWM)NFK
MRJ)96X
PXB)YQY
L9Z)S3S
XW7)R94
G2Q)XK2
SMW)Q5Q
MDK)7HP
T9R)KCF
DLB)SMW
4FS)2Z5
LYF)1MX
D1P)WRT
8FX)19X
VP2)66N
VVM)PNP
MDB)XXW
ZBF)ML7
57K)5T8
675)QF8
PFK)XSZ
CTB)T69
BBK)WCF
1JQ)Q7S
Z4H)3R8
45F)76H
PKS)1W6
MW9)J7M
GM4)4T4
6LG)977
KVZ)4CK
9LS)GX5
5VF)CK3
NLG)P6F
41N)KV7
RYK)56N
BYJ)64G
3VZ)K2Z
2DX)7K8
TKK)3GX
W7N)V7N
GKF)8G1
H1L)VSK
YM9)9RX
DWF)X75
KQ6)5T4
NGL)HS2
XQZ)4KN
J4Y)TWJ
18H)VJY
LVG)L1G
JX4)54Y
WWC)QH6
G2Z)1XV
RWS)HZ4
4NF)KLT
NFX)L41
PJ9)6Q2
KGW)J1R
7TX)KQS
3RK)98K
6NZ)7NT
9S3)DN4
8F8)2J5
ZNS)5H1
V6G)GXH
4KN)JND
2DG)63M
SCR)5XF
R94)G2Q
ZXP)5B9
PBB)ZS5
44V)DGJ
MQQ)K47
BFM)VH1
QC1)L6L
LMW)R1K
6BZ)8RT
VSH)CHX
QMB)91J
54Y)5YC
L41)GQ8
34D)N8D
FV4)86Q
6BD)P7R
S3D)7KD
D44)YYX
9D6)SPH
1K1)Y6Z
KRN)3RK
N44)5CR
QT7)PZH
WWM)LN4
7PR)MNH
861)M5J
LNY)G1J
677)ZWB
7R4)62B
DLX)L3P
S74)6MP
PJX)J7D
VRJ)LGH
9R6)43D
X8J)Z9X
4C9)DGT
VR4)TX4
8N8)K3G
M1X)L2J
BQ7)M8G
6DF)81M
7DV)PW8
DGF)8JJ
6S9)38Q
211)44V
BGV)G5G
JWY)S1X
N9N)CQK
TWJ)DBT
3C6)VWM
YM9)JL7
WP6)HQQ
HK3)XX6
XND)189
GZ6)151
MHC)JXD
NKY)2HG
S2W)956
XBG)71M
B78)LMW
91T)3GM
1YF)ZK7
LGH)9LS
JLF)VFP
VKD)XGR
17D)1NR
P2R)FFS
9QG)R7M
2J5)V1T
2GB)9R6
626)4BY
RX7)HCG
QVM)2H3
3NH)R6Z
1Z7)W7N
8LQ)MZJ
1HC)FP9
MVF)S9Y
QJM)NZX
H4K)MW9
8LZ)ZL7
LP3)Q24
WQ4)19T
2H6)QB3
XMM)DY6
1TC)NWC
KVR)7NQ
SQM)K7L
2Q6)WRR
38D)14S
RSB)45F
N5R)GTN
VJY)3WC
RQ8)RLJ
M3C)SZP
LQN)T6S
3FP)WRX
YQY)JQ9
LYF)6XV
SNJ)D1P
FYZ)8VN
RL3)V44
YTJ)BWY
K48)5YJ
J7M)WQF
DVF)JJZ
N1P)GJF
C5H)LHV
M3Q)B8N
XC8)CX2
ZQS)PKL
8FV)M25
CM6)7PR
4HL)BKH
Q7Z)SAN
ZR4)9TY
T5B)WQ4
27M)518
56K)WB9
KTL)MWK
CPX)FRG
S49)9DM
7W4)CQ1
FSX)HCX
N9K)SPV
HRM)42L
3M2)DBM
CVP)2GK
WSP)15F
3TT)YKB
YZ8)T5B
64H)731
P84)7DV
6Y5)3JX
GS3)XKQ
BF2)S7S
7TC)SQW
2WL)R1P
XV4)31N
RPX)NB4
MY2)3NG
2G4)PBW
PBW)RB9
K7B)MHF
Z8Z)JW5
KLT)7P5
4BY)N2H
5LQ)1YF
KM8)7V6
7Q8)JX4
JMX)QT7
QDY)RYB
6VJ)BQ7
NQY)5TJ
XB7)4HT
Y4W)FSX
M19)M9L
S2T)58V
33Z)PSG
FP1)743
WVQ)WFQ
TVT)4VQ
XX6)FM7
3VX)2LF
WHW)PDT
4VX)QZR
FJW)M14
5XZ)PQQ
VMJ)R2D
6NZ)8LZ
VFP)RWH
WS3)9JB
QTX)PDX
2H3)SPB
CH1)VMJ
JF6)DCR
NDT)H9W
CQ1)6RS
XT4)T98
MYW)SFC
8T3)N8R
T6C)CS7
S8V)7BC
HDC)6PR
25L)4VX
DRS)9Y7
2J7)KLP
COM)V73
LWD)3CQ
GFN)31V
L1G)SY3
Q8L)BZN
2HG)2J7
JXD)7JN
1W6)G83
5QG)KR8
D2L)V2F
8G1)8G7
CHX)6QK
CS7)2DG
9G7)24D
8Y1)PB8
5RD)GQ5
V73)C3L
4BG)9X1
CX2)NJG
RJL)JJ4
ZKL)Y7H
CJR)T5T
1XJ)Q5H
K9H)QW2
FJY)YS3
9SG)QVM
24D)KNM
SV9)NR3
NPB)5VS
5C2)PFF
QXX)MSF
LB3)DLW
NLN)48L
21W)77L
N4M)7YM
WQ5)1ZQ
6RS)YTB
K47)D79
PNP)M6M
896)BP9
HLJ)YFX
WWH)LP3
834)366
HF6)CQ6
CH5)1TC
WGJ)KVZ
JB5)855
C66)T4Z
LL1)1Y3
PVT)MBV
B55)W64
3H9)Z9Y
89H)Z91
Y5S)B6W
1F8)7SX
VP6)1L7
KKN)QJ5
LPW)421
JTF)MDF
H4M)3WV
V86)6TC
R4V)2W6
SP2)VCK
NP2)V68
PVC)98Z
B53)GQK
QDN)QTX
NZX)1ZC
4Q7)Q5K
6ZJ)V83
DW8)25C
743)6DQ
GTN)N9N
JWN)N9K
Y7H)3VZ
M6M)LT2
64H)DGK
19X)CZG
DWC)P1P
7NC)Q8L
PCS)Q4B
PNB)Z98
8SF)XR9
PZF)71D
WPD)QVP
2Z5)MZT
Q5K)6FN
L41)S3D
VSK)H3M
ZL7)8FV
XRH)JM9
899)3Z1
1KB)S2W
RKT)5X9
59T)TMV
R41)4BG
S4M)VR4
9QT)R1Q
3YD)238
Y7S)KFJ
1LT)KN4
VP6)QYP
69B)LGV
ZTQ)Y6P
Y93)1G4
56K)2KH
31V)9G7
MZJ)V8W
PGW)TF3
J8P)5T2
Y35)9ZJ
2GK)WS3
T4Z)NDZ
11Z)RQK
FBD)WWC
PZH)FZQ
3PP)575
5GB)2H6
M6D)ZV6
CTB)LDS
WLB)2GC
QHJ)6RR
9Q5)BFL
Z6M)VRX
SJR)RP8
5PT)3TT
FM6)N53
Y2V)352
TN5)KGW
CK3)D44
4QN)7JY
GQ5)H79
N8R)791
JM9)ZVN
1NS)DWF
JQ4)YH7
34H)6BZ
XXW)KQ6
7P5)75Y
CB1)HQF
CQ6)6DT
43M)RSB
BS5)72L
HYT)BWX
VX5)KVV
FR8)RB6
Y6Z)X11
7GB)D3P
5LQ)TC3
Q1M)PCF
WRX)HCP
977)6P7
1W2)BKP
S8H)JF7
98Z)S49
FQJ)V13
3WC)LTM
HRM)Z4H
5T3)3PP
JHP)SCL
B7W)PQD
6QK)T5V
CHG)LWD
2W6)XVJ
1NR)Q7Z
SPB)DYR
Q4D)QYX
4LT)43M
QYX)3QJ
KML)H2D
P4Y)59T
BYM)RYR
43D)JVR
Q9Y)G1X
QBL)7N6
XDC)5SB
7YM)PCS
1DB)TM3
FKF)VBX
XRN)Y32
2GB)BPZ
YMY)XB7
7Y2)YTJ
GSZ)12B
C93)9P3
8PH)Y2T
V83)4QT
BBS)T1V
ZQH)VKD
DYD)T73
YKB)XMY
CC3)BCW
7V6)P44
XJ9)D8S
HYB)KVR
DCR)XDS
14S)5LX
4YZ)N1K
LTX)4MR
8HN)QBL
WRR)9WQ
WVT)3ZS
L1P)LPJ
V7N)RYK
SYW)M3Q
8GD)YW4
PG4)S53
LHV)4HL
LYP)X2G
TX5)H47
B19)6LP
L9Z)SNV
PTB)NJV
3GM)16G
91V)JDK
S7S)7M2
7PL)J4V
44L)Y93
P89)YQN
8X1)YRP
W1K)69B
K9W)1V2
4KT)1S6
3NG)WY3
Q4D)ZQS
9GX)RJ1
B5W)NKY
7ZQ)7RC
1HC)J4R
VQZ)MHC
5YJ)J3H
2B3)YCG
9YX)394
4NV)LRZ
WXS)BM4
SZV)NGR
D44)PNB
Q37)T2W
PDT)HDC
NWC)TZN
1LT)5VF
19T)C71
44Z)NCH
WY3)N4M
QBR)P89
R1P)W2G
SYM)6ZJ
L3R)J6V
LJX)J8P
366)PG4
1L1)DW8
HQ2)4NF
FP9)BFM
9ZJ)DGW
575)LTX
DZT)MX3
Y6L)3NH
V63)W5X
FSX)2GF
LDS)PPL
DXH)RJL
CVP)MHP
QKF)TKK
PX7)Y7S
WR6)TN5
XH3)QMB
7F6)FYZ
BYT)X7S
PQQ)9YX
R6C)N9V
KXN)WSP
8P9)D6K
Q68)ZR4
JJ7)NHX
P6F)BJR
V2L)BWV
MZT)BS1
RYK)JF6
RSX)4KT
P1P)CB5
4PM)Y2V
2TX)7KG
6XL)JHP
H3M)6Y5
JB2)6K8
M4K)BP4
7FT)XT8
JBN)5RG
Z9X)QBR
2KH)Y35
66N)G2Z
QF4)899
6Q2)2WP
2D5)118
J4M)9XZ
LRH)9GM
V44)TV1
Y6P)BS5
SZX)25V
BQJ)D4K
PDY)5QB
NGR)X8J
FTQ)T2S
71M)493
5B9)76W
HS2)45J
N8D)7ZT
XKL)WWM
J6V)25L
8ZG)XWS
LRN)2W2
189)BYT
Z23)J9Y
4Y2)NLG
Y7X)SH3
ZB7)Q68
R1Q)MY2
HDC)SKL
VMD)5SG
29X)V25
SJ6)HRM
MWX)J9S
1BV)TQZ
PKL)7GB
8DL)GFN
5LX)WVQ
9TY)1DB
MRJ)Y4L
M9L)M1G
PB8)D5N
7GC)8RN
9H7)85N
Q1D)YVZ
WK6)1XJ
CB5)DRZ
BP9)KRN
33W)1Z7
9K7)4PM
6DT)G1M
HM8)PXB
KQS)XMM
KCM)YZ8
DBT)3H9
SCL)7Q8
MKC)XPK
ZT8)VC3
4T4)KP5
M4W)WKZ
JF7)5KD
QMR)1K1
S98)ZXP
K4M)XRH
Z9D)M19
J5M)XF2
62F)9XB
JDK)7X1
81M)6W7
QMS)PTB
7KG)W7Q
XKW)J21
PYD)SJR
151)PFK
7N6)B19
XPK)GS3
2GF)29M
4QT)834
GQ8)SNP
K71)677
C8L)99R
NF4)5XZ
GMY)PGW
TJH)JNF
7ZT)8N8
KNM)M85
MC5)WFY
1PD)MVF
3Z1)Z6M
195)F7C
MBV)CB1
3PC)QF2
J3H)J5M
H9R)PCZ
D8F)NPB
R1G)P84
GVJ)QMS
V83)2WL
4CB)J4Y
9Q7)RX7
46S)SYW
28M)MRD
2YN)1NS
XGR)1HC
KWT)CJ9
NMJ)QT4
BP4)9K7
PXB)HDK
71D)8VG
CK3)ZG1
LQ6)33W
T6S)SNJ
9JB)WZD
56N)CVP
FX4)FJW
YS3)4Q7
RF2)BNC
ZFV)T9R
88Q)PBB
PCF)GSZ
Y35)JJ7
352)LQ6
PVT)QVS
LCV)LYP
3TN)82Z
NW6)Q5Z
9BV)2TL
CYG)9BV
D6W)T3M
PY1)3PS
Y44)G34
XSZ)27C
RYR)GZ6
XF3)6ZT
V29)896
VBX)KKN
WFY)33Z
XF2)HYQ
K4G)ZTQ
J1V)Y44
5SB)WR1
SNV)FF2
8KC)MQX
ZS1)8X6
15F)9KP
193)JB5
43M)M95
1TJ)JQS
SNP)WVT
3FJ)WGJ
JND)P2C
8CD)CJ4
VSK)S2Q
J1R)PDY
F2S)XWP
7RC)3PC
914)FV4
9XZ)4C9
QW2)S3M
TM3)PZF
C53)VP6
WRT)2G4
ZDY)Z45
BCW)46X
CGR)1MM
DY6)HV3
YMG)TZ9
8JJ)NRW
HR6)K6H
3PS)SYM
96X)7W7
HKP)TYH
8HW)LJX
FGK)LPW
3CQ)Q1M
5VS)S8H
5TJ)4MF
RZP)KC3
MNH)7ZQ
QJ5)F8X
8VN)BNF
ZCW)9S3
1MM)V2L
BS1)NMJ
JJ4)1VD
5YC)WPK
MHM)MKC
4BH)VP2
4CT)FJY
JL7)HF6
BJR)BQJ
3DB)XV4
7HR)3WZ
K3G)BL2
VCK)YMG
6DF)FY5
Y4W)DGF
KJJ)59Q
771)WWH
KCF)TW5
YYX)7TX
DGW)PV8
KLP)XTP
Q7K)3VY
151)J5G
G6X)18H
8VG)6VJ
7HP)YY8
FRL)74J
X88)3FP
BKH)HPQ
JNL)4PW
NJV)91T
45J)BHR
BKP)CXG
16G)7F6
QZR)SV9
NNB)9QT
1G4)Z3H
J4R)T53
7X1)72N
RRR)RL3
644)DLB
B6W)7Y2
CGT)Z32
H79)QJM
PPF)D6W
QNQ)94Y
J9T)1TJ
X4N)6NZ
7W4)Z1L
G5N)FR8
HYQ)HLV
F13)7S3
7R7)C5H
RKF)G2G
M19)F9C
WZD)F8S
JLL)MB7
S5J)TR5
L1P)G77
FTQ)VDC
2H2)TB1
MPW)MDK
GC5)N1P
75Y)1L1
3PS)4BH
LSP)44G
X11)SS7
5MB)CH1
SCY)VMD
5D3)2B3
F3C)9ZY
4MP)RQR
TV1)SZH
42L)4ND
3P6)B18
9GM)41N
X2M)PK7
M95)H9R
TX4)4QZ
ZV6)FX4
DSM)PRH
ZZC)DWC
BNF)JWN
6P7)JLF
9QZ)G44
VC3)W7B
JB5)V88
ZP1)5VL
RWJ)B55
K4D)193
J21)ZNS
3VY)7GC
VTH)WXS
R98)PM3
V7Y)FPJ
72N)HT1
7S3)HK3
R1P)DZT
2TL)JB2
6LP)YFS
QH6)6VX
V88)6BD
7M2)YMY
CPB)7R7
R1S)RRP
35C)FZG
R98)KHK
GX5)RKF
S3S)MDB
38Q)NYQ
RHN)S4M
3LN)8KC
TL3)Q9Y
4QM)ZFV
XTP)DBF
9KP)H4M
Z91)8X1
QK7)1BR
58N)KZP
T3B)W9Y
BF6)NXD
BWV)BF6
XRW)X2M
WR1)GP3
JN8)SCR
SYN)YOU
XWS)P2R
KNY)2L7
G2G)BBS
6XV)HJG
Q7S)SP2
9PN)FM6
FPJ)ZZC
BPT)8NK
4PW)DVF
YDJ)XQZ
1VD)NK8
RLN)XDC
WCF)N28
FT8)VLG
3QJ)QDN
VKD)CC3
7RY)84L
CLD)3M2
9DM)XHM
FM7)FBC
L3R)BYJ
GQ5)K9H
Q5Z)G6X
D6K)8RR
HDK)49M
DLW)99D
2LF)W6M
FBF)J4M
5QB)GVJ
PKH)876
MDF)V63
CQK)PJT
1ZQ)WR6
BNC)DJZ
WGV)MWN
SZH)JN8
W89)HLJ
SBJ)58K
WB9)2TK
SPV)P1Y
YYJ)8CD
S23)5C2
6HP)58N
533)3YD
RP8)L5B
11J)GPQ
FF6)JWY
27C)887
LBJ)3CR
FLF)RRD
TTS)VQN
G5G)F3C
8RN)3CC
XKK)FGK
9XB)XBG
T9W)11J
72N)K2D
H9N)673
R56)HKX
MWR)5TG
6MG)RSX
RGZ)SJ6
VF4)WQ5
DLJ)TX5
NCH)M6D
Z9Y)VYS
Q57)8PH
VPY)FTQ
WQ4)MHM
K6H)FF6
H96)DBH
FN2)6RJ
791)2Q6
VH1)R56
KFJ)J96
8QX)HM8
L3P)3G2
95J)V6G
31N)J95
HQF)PJ9
7Y2)3MR
V68)2H5
T3M)FN2
R1G)D7R
HM8)CNV
5MB)6LG
RLJ)WPD
64G)W68
DN4)1DK
QKF)NDT
P5L)LBJ
SS7)NL1
P1L)G9Y
5P3)44Z
7BC)VWJ
T2S)1W2
S8H)TKZ
G5R)H3G
C25)LZJ
YDZ)2XM
98K)K7B
6W7)B78
1DK)Z81
MK4)CL7
BM4)PBJ
NRW)ZYF
D5N)W31
FZ9)K48
3LC)XKW
7BQ)ZT8
C5H)S4P
YFX)ZCW
PFF)L1P
R6Z)Q97
CS7)89H
F7C)W7W
887)HYB
DQ4)LCV
NCH)7NC
KHK)VTH
Q24)P5P
KR8)GKF
5C9)FBF
5VL)HP6
XG8)4LT
RWV)T9W
518)7TC
8MQ)Y1Y
25V)NH3
TFB)LFR
99R)3VX
YDV)19D
84L)L3R
J96)8SF
TJR)DLJ
P44)5D3
VWJ)4Y2
3JX)9QG
QD3)38D
TSH)FRL
Y1Y)X16
2H5)NN5
MQX)D2F
29M)C5T
HLV)1F9
7NQ)Z23
WFQ)77Z
FBC)D8F
LTM)1LT
6MP)QMR
C5T)1F8
77L)ZWD
V25)9QZ
6CG)KNY
NXD)JLL
XR9)XG5
PX8)HQ2
1SG)1YY
3R5)CM6
S53)MRJ
9X1)C5X
VVH)JQ4
KC3)B7W
LCY)P4Y
6VX)1PX
3WV)YQ2
675)R98
FJF)J9T
SFC)2DX
YPQ)8GD
MZL)RW9
5HG)S45
CHG)M5M
3ZS)GVL
WPK)9JK
NK8)Z5L
D7R)6CG
Q5Q)4HS
GP3)4BN
KQD)9S7
25C)XJ9
LN4)TV5
3CC)LCL
TZN)MQQ
BGW)G9M
9P3)MX2
T5V)8P9
3YD)S8V
D79)LNY
4VQ)8LL
RB9)H1L
CL7)FLV
JQ9)H4K
1ZC)TTS
RWM)KML
118)3LC
1F9)QDY
6K8)CGT
RQK)3LN
5H1)XG8
3D8)SRF
V77)DLX
TKZ)VRJ
FRP)1PD
GQK)41H
4K3)DRS
M14)1PC
2W2)Z5B
2L7)V86
PDX)CQZ
RTV)46S
Z5L)M23
NN5)4MP
L5B)MK4
YTB)R6C
QDZ)SZV
YMD)W89
W64)WK6
HCP)Q14
62B)3FJ
KP5)Y6L
9QT)YPQ
B8N)Z1J
DGT)57K
6T5)34H
K2D)5C9
46X)FWM
Y4L)KJJ
BHR)8ZG
G1J)THP
TW5)QHJ
6MP)YDJ
58V)Y7X
ZYF)V7W
86P)7BQ
VR1)29X
85N)T2P
PBJ)GDR
KWX)CYC
2GK)WHW
L8V)VR1
N1K)7HR
T7C)V77
H35)1KB
DRZ)LTY
1BR)YLD
QF2)6DF
T5T)WYL
3R8)QWC
1GC)KXN
HV3)Z1B
HCG)35C
QVP)YDV
YFS)W3V
C93)NLN
K2B)MTJ
NH3)KKF
KV7)PRC
855)2YN
Y32)ZWV
MWN)Q7K
G77)3D8
T6Z)K71
T1V)YMD
PJT)BM2
XC8)5P3
493)C66
YCG)8FX
CPX)XRP
TC3)PYD
4CL)PX7
SN7)RF2
76H)JRC
9XZ)7G4
5VF)9D6
SQW)PY1
3WZ)MC5
5KD)SQM
VH1)6XL
BWX)P1L
Z98)56K
7BC)8HN
936)8T3
ZHC)KX3
XRP)NGL
XWP)Q37
T69)JWG
RJ1)QC1
S1X)CGR
QSP)QKF
W3N)GC5
ZJ7)4QM
C71)5GB
876)21W
CQZ)5MB
YW4)6S9
SKL)Z3F
6PR)M4W
JRC)8LQ
DBF)64H
4QZ)1LH
NGR)TNF
7NT)FBD
HQQ)ZQH
D2L)RTV
N5R)YDZ
48L)QSP
Z1L)FKF
59Q)2TX
58K)DHB
J8P)F13
F8X)RLN
44G)7FT
LHV)J1V
481)HKP
7XZ)D1Z
4GX)GW8
1V2)9S8
ZWD)NP2
8GH)W3N
P1Y)4K3
ZVN)3DB
LPJ)C53
DBM)LB3
1L7)PSY
XG5)5LQ
M85)SZX
4RM)9GX
Z1J)R1G
77Z)1Z4
FWM)YM9
TYH)C93
9ZH)83V
LDG)9H7
KX3)C25
NCN)RQ8
RDJ)MWX
THP)675
W7Q)TSH
G63)917
FFS)LDG
MX3)PYM
S3M)5T3
9YJ)S5J
M1G)CJR
W7B)ZKL
9V7)LVS
9WQ)5PT
T2W)HYT
G44)27M
F9C)KQD
5CR)RV6
WYL)FQJ
QT4)3P6
NW6)JTF
VWM)8GH
5SG)3R5
XBG)G2R
H2D)9ZH
C3L)MZL
QH6)4QN
9R6)1JQ
Z32)5QG
J5G)NQY
JVR)XKK
W2S)G63
GW8)Y4W
S2Q)VJN
FQG)R41
238)44L
XMM)TJH
GM4)K2B
8JJ)PKS
R2D)8F7
CJ9)XF4
SY3)CHG
H1F)S2T
2TK)Y5S
YY8)X88
FZG)VF4
VLG)FRP
B5Q)8Y1
8RT)2RS
5RG)TL3
J9Y)L8V
8G7)WP6
JN8)TVT
Z3H)FZ9
12B)GM4
PBB)936
3MR)SD7
84L)1BV
Z45)VVH
QNR)G5R
K71)11Z
394)PPF
BF2)86P
XVJ)JKR
94Y)ZBF
6TC)JBN
YH7)W1K
DHB)47N
7K8)ZP1
H6G)QDZ
TF3)SYN
MSF)D2L
D8S)KY2
HJG)K4D
86Q)XL2
8V4)RWM
J95)SCY
GJF)PX8
HZ4)M3C
9S7)M4K
KNY)RWV
5H1)RDJ
VQN)H9N
T53)TJR
ZK7)DYD
8X6)481
7SX)BYW
COM)B
B)C
C)D
D)E
E)F
B)G
G)H
D)I
E)J
J)K
K)L
COM)B
B)C
C)D
D)E
E)F
B)G
G)H
D)I
E)J
J)K
K)L
K)YOU
I)SAN
#!/usr/bin/python
"""
https://adventofcode.com/2019/day/6
"""
import collections
class Node:
"""container for the tree nodes"""
def __init__(self):
self.parents = []
self.children = []
def add_child(self, child):
self.children.append(child)
def add_parent(self, parent):
self.parents.append(parent)
def __repr__(self):
return "Node: parents: {}, children: {}".format(
self.parents, self.children)
def read_data(datafile):
# if not found, will return a new "node"
tree = collections.defaultdict(Node)
def do_insert(parent, child):
nonlocal tree
pnode = tree[parent]
cnode = tree[child]
pnode.add_child(child)
cnode.add_parent(parent)
tree[parent] = pnode
tree[child] = cnode
with open(datafile) as data:
for line in data:
(parent, child) = line.rstrip().split(')')
do_insert(parent, child)
# validate and find the root
root = None
for k in tree.keys():
n = tree[k]
assert len(n.parents) < 2, "Node shouldn't have more than one parent"
if len(n.parents) == 0:
assert root is None, "Tree should have only one root"
root = k
return (root, dict(tree))
def hops_to_root(key, tree):
"""
Count distance to root, moving "up".
Assumes not more than one parent per node.
"""
node = tree[key]
hoopcount = 0
while len(node.parents) > 0:
assert len(node.parents) == 1, "node can't have multiple parents"
hoopcount += 1
node = tree[node.parents[0]]
return hoopcount
def all_hoops(tree):
hoopcount = 0
for k in tree.keys():
hoopcount += hops_to_root(k, tree)
return hoopcount
def main():
for datafile in ('day6-testdata.txt', 'day6-data.txt'):
(root, tree) = read_data(datafile)
print("{} -> {} orbits".format(datafile, all_hoops(tree)))
if __name__ == "__main__":
main()
#!/usr/bin/python
"""
https://adventofcode.com/2019/day/6#part2
"""
import collections
class Node:
"""container for the tree nodes"""
def __init__(self):
self.parents = []
self.children = []
def add_child(self, child):
self.children.append(child)
def add_parent(self, parent):
self.parents.append(parent)
def __repr__(self):
return "Node: parents: {}, children: {}".format(
self.parents, self.children)
def read_data(datafile):
# if not found, will return a new "node"
tree = collections.defaultdict(Node)
def do_insert(parent, child):
nonlocal tree
pnode = tree[parent]
cnode = tree[child]
pnode.add_child(child)
cnode.add_parent(parent)
tree[parent] = pnode
tree[child] = cnode
with open(datafile) as data:
for line in data:
(parent, child) = line.rstrip().split(')')
do_insert(parent, child)
# validate and find the root
root = None
for k in tree.keys():
n = tree[k]
assert len(n.parents) < 2, "Node shouldn't have more than one parent"
if len(n.parents) == 0:
assert root is None, "Tree should have only one root"
root = k
return (root, dict(tree))
def first_shared_ancestor(tree, key1, key2):
"""
Walk the path up to the root for each node,
and find the first common ancestor.
"""
path1 = path_to_root(key1, tree)
path2 = path_to_root(key2, tree)
common_ancestors = [value for value in path1 if value in path2]
return common_ancestors[0]
def path_to_root(key, tree):
"""
Walk up to the root and return the path as a list.
"""
node = tree[key]
path = []
while len(node.parents) > 0:
assert len(node.parents) == 1, "node can't have multiple parents"
parent = node.parents[0]
path.append(parent)
node = tree[parent]
return path
def hops_to_key(key1, key2, tree):
"""
Count distance between 2 keys, moving "up".
Assumes not more than one parent per node.
Returns None if no path exists.
"""
if key1 == key2:
return 0
else:
node = tree[key1]
hoopcount = 0
while len(node.parents) > 0:
assert len(node.parents) == 1, "node can't have multiple parents"
hoopcount += 1
if node.parents[0] == key2:
return hoopcount
node = tree[node.parents[0]]
return None
def hops_to_root(key, tree):
"""
Count distance to root, moving "up".
Assumes not more than one parent per node.
"""
node = tree[key]
hoopcount = 0
while len(node.parents) > 0:
assert len(node.parents) == 1, "node can't have multiple parents"
hoopcount += 1
node = tree[node.parents[0]]
return hoopcount
def all_hoops(tree):
hoopcount = 0
for k in tree.keys():
hoopcount += hops_to_root(k, tree)
return hoopcount
def main():
for datafile in ('day6-testdatab.txt', 'day6-data.txt'):
(root, tree) = read_data(datafile)
you = 'YOU'
santa = 'SAN'
waypoint = first_shared_ancestor(tree, 'YOU', 'SAN')
d1 = hops_to_key(you, waypoint, tree)
d2 = hops_to_key(santa, waypoint, tree)
distance = d1 + d2 - 2 # -2 because the initial hop doesn't conut
print("File: {} - distance = {}".format(datafile, distance))
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment