2019 Day 6 Complete!

This commit is contained in:
Brian Buller 2019-12-06 08:00:17 -06:00
parent d5fb449c31
commit 930491c840
4 changed files with 1171 additions and 0 deletions

985
2019/day06/input Normal file
View File

@ -0,0 +1,985 @@
PJK)X3G
ZM3)JGN
YYF)614
K5T)X18
2PT)2BR
4RF)VL2
QQN)7S4
X9S)HM9
NMG)DH5
TQD)SJD
2JD)SM4
5SD)4NG
W1R)XYJ
DXF)72L
CGN)T85
ZF4)ZZ1
91Q)Y69
SMB)QSZ
PVN)PP3
C4S)1VL
3BK)ZNZ
LYZ)92X
TPP)XPP
NTK)R7B
XMH)GBQ
LZW)49Y
28R)R1G
5SX)F2K
X21)WC7
JL7)ZKL
F1G)XF8
XJG)N8L
227)HBK
FG8)RMS
S5B)RXD
T71)LDZ
TYQ)2LW
1W2)BFQ
2X1)NCQ
SJL)TG5
64W)RKB
DRH)W45
ZTK)YC5
L1Y)VXS
SGD)F66
ZBG)YJ7
NC6)544
XKQ)8Z5
B5K)XFW
V3F)SF9
DC7)737
ZCJ)ZCB
JPX)FZS
PFB)TYQ
C22)HGM
C67)MDM
4W1)X87
TQX)7YM
2Y4)CLQ
R1G)M5V
HK5)56W
Y7B)8RN
LFR)FN6
RVW)7G3
SXH)97Y
H25)WHC
X8Y)3H8
97Y)77T
6VB)91Q
V7S)595
JFH)2JD
ZSL)HHS
3D6)T71
1BP)MCR
FBQ)2PB
7Q9)K1X
C81)6JF
YYQ)9FR
FBR)GZS
VXK)4BR
Z9L)DYJ
PRL)K2Y
Q68)R8F
WJC)WZ5
H3K)3NG
K9N)BG4
VXS)RLT
K1Q)R29
C76)TNL
RLV)PCY
Z4J)2GC
4F2)SC2
Y82)JKM
GZS)Q1Q
VB3)WRW
XW6)FK8
YG1)73H
KZQ)9FQ
R25)C13
FFZ)DTC
H99)Y82
N12)TRX
F5G)RLV
7VN)D7V
CRJ)GY4
C7S)YD3
V6S)CNH
82G)ZBV
KMM)YOU
27R)S8P
ZTK)2PT
8R4)HC5
V9D)ZSV
L25)N12
544)ZT7
62H)SBL
ZMG)M4P
Y77)SB7
G6R)2RZ
YPB)6ZG
WKT)FVM
126)ZPY
8KQ)KSF
G3Q)W3D
56F)RZX
KFC)LHG
75Y)BHL
921)95L
QRQ)SG4
8BW)KGK
5D5)YH2
4PK)9LQ
7J4)QQN
F8Q)SBM
14K)5NV
6NP)91L
JKM)HR1
9G9)Q7P
P74)BCK
DBC)K1H
CH7)Z9W
GBK)YFR
LLX)YG1
KFB)C53
7XJ)8Q8
54L)JMG
2PB)P2C
ZPY)V3S
NG6)WNM
R29)LN8
1DT)LTD
XLM)X12
3HQ)G3Q
95L)VM4
8RN)Q28
2GC)CVB
BHL)N5T
X9T)GBK
J27)G8G
LHG)RR3
FS5)XSF
6HN)WC8
WQR)G1C
X5M)SXQ
MCR)Q6W
F57)7W8
QKG)X4T
PL8)BZM
JM3)3KS
GYP)6S2
8V3)4TV
GSV)Y9V
JKM)5WX
VSM)3Q5
L7Q)L1C
MFX)T1R
GQ2)22M
4L4)W3W
TRX)45N
GLG)WKT
92T)KTL
1PB)TFX
C9N)88W
Z19)PTB
95K)NGQ
8H6)CHW
DC8)7NY
R8F)HHP
TFX)S9L
P61)4JD
KDW)GMS
961)J5R
C4H)35Y
BJQ)FDN
R79)P6J
QTH)B6J
K2Y)3RY
K47)NC6
GQR)C5W
6HN)LLX
Q7P)921
WPV)VLF
329)YPB
3XV)RR1
DTC)2CF
C9K)X43
5SB)X9T
9ZL)8V3
F5G)XMH
VD5)XG2
97R)SC9
NCQ)F2D
BML)2JY
N8G)DMN
6Y7)JXB
M4P)Z4J
PL1)M52
57Z)HSB
LP8)WXJ
X49)ZHJ
YQ4)LBF
TZN)26G
3NG)PLN
XLC)TBR
8ZV)77G
3SR)QR2
91B)J7Y
PWH)LJS
GG3)91S
2NJ)C23
MRG)V2D
77G)NBP
DBC)3N2
Q1Q)Z34
BH4)B5K
V5P)8Q7
35Y)39W
DMN)DKJ
GY4)HPQ
66L)S4M
FK8)W9R
W3W)X5M
YBW)X41
WPG)XQN
BKC)NBD
82C)8ZV
8LR)P74
XL9)F17
DKJ)V6X
836)FFB
RS8)K1Q
CY5)4PC
YFR)GTQ
QF6)ZLD
35K)5YW
P6J)Z8W
Z39)NJK
J8X)T8P
15H)YXX
K5M)3B4
FVY)L93
DS2)QP5
39W)WTS
NFM)LFR
4ZR)N8K
JGW)4XY
XSP)9YR
5WB)286
292)637
KTL)3CT
TQR)GPW
ZT7)7H2
6YX)VCC
G2X)HLX
7QT)33M
SXQ)6VY
1WQ)ZMG
G1C)35K
D7V)PZG
73H)NG6
TQD)6M6
GPW)YQ4
C67)C4H
G6F)9YS
YLZ)YBW
4XZ)KSG
11N)V9D
56W)8R4
S8P)PVN
XG2)Z7K
LBF)6KM
ZSV)VF3
QV6)JJN
2D9)VM8
TYB)NTG
Q94)QNF
4JD)J8X
5WB)MVZ
X12)KV2
79V)VP8
8VV)B6R
T42)8BW
C13)Z9L
WFY)HC7
3LK)RV9
6LP)W98
6LD)XLM
YBQ)GQ2
VF3)MLX
DQ7)66L
C53)5F1
5F1)YZY
3GQ)C67
M52)VWY
M89)9L5
HPQ)4W1
8Z5)7FX
F8Q)1TY
4FC)VN3
2DG)PL1
KT2)7QT
X3G)GH2
VFH)5ZL
3SN)ZW3
RTP)1KS
KGK)2NJ
8Z5)F57
91S)DC7
SLY)QBX
BKH)M89
637)6FC
V7K)L25
QCF)Q3X
4L1)X58
B2S)J5L
JJK)6PN
F4V)MHH
SC4)34G
5XC)GPJ
PTB)579
C3D)XCK
HDY)PCH
KTM)8XY
3KS)GYP
HHS)RD2
68B)YBQ
L1C)7C7
TKK)NWD
YD3)JKC
VM8)38W
S9X)H3K
VN3)WPG
2RZ)56F
PG2)Z3G
SJD)SKH
JKC)XJG
KTK)V6B
Z7L)64W
6KS)GR6
BZM)6NP
HSB)2T3
YC5)5WB
6RL)PFB
TL2)XSP
8NL)VV7
KZH)3BK
FN6)FG8
NQ6)YWV
4K3)WFZ
4VT)SZH
7C7)JKB
FJJ)WP9
FBZ)QRQ
88W)RD6
GPH)5VZ
F17)7FJ
VWY)TWJ
BRN)95K
R55)LP8
9K3)M4B
NWD)JSX
4NS)783
6VH)D6T
XYQ)BHN
3RY)MFX
KGR)QGX
1XH)MNS
1TY)15L
XWV)WJC
JJN)8B3
Y8L)Y7B
FFQ)3SG
F77)Z5Z
783)Q9R
HF2)RMK
WRW)JT4
6MS)FBQ
44G)BRN
FDN)289
4NJ)ZF6
WN8)Y77
66G)FMH
773)7HJ
M4B)Z7L
V88)52G
2HR)24V
3KH)VYY
77T)PG2
S8N)G6F
QY2)54G
F66)9KL
FLB)SFB
HLX)32D
S4M)VXK
XPP)DQ7
3SG)BH4
Z5S)XW6
92X)XLC
LQ4)3GQ
729)PRL
S3N)Z5S
29B)K47
WBQ)TKK
BJR)GC5
Y82)ZM3
GK1)62H
8Q7)ZR3
7YM)7Q9
4R4)FQ7
B6V)2HR
T95)LQ4
T99)6SL
COM)ZB8
4SC)SMZ
X87)GX6
ZKL)M72
7W8)WN8
64G)15F
34G)K9J
BSK)2MM
1ZV)4FC
Z5Z)CZC
LKS)N8G
XDC)P5D
RXD)B9R
2BR)BKC
HHP)85J
QX7)FWL
WTS)WBQ
ZLY)6T5
LP9)G65
9ZL)GG2
4JY)2FH
QJZ)384
6S2)ZLY
2W1)XL9
X4T)LKB
38W)2YD
RZX)NL6
2BW)ZF4
K6L)24D
TZM)SGD
2JY)K5T
MP9)GLG
8VV)TQX
MQJ)G2B
W9R)Y8L
6Y8)8NR
CNH)2X1
5Y4)QKG
TWJ)V7S
CNJ)9K3
5VZ)YYF
48Q)4L1
1VL)2W1
HSB)VC9
HKT)45Z
CP6)XY1
JKC)GM1
B1H)D6Q
4B9)8XW
DLX)15H
45Z)HNQ
289)75Y
2MM)GCH
NBD)FFZ
QGX)Q3V
N1F)9G9
P54)P9L
GC5)62Z
15L)11N
TK1)CCW
35W)8S3
4NG)4FZ
1P9)MND
5ZL)FVY
L5P)79V
VCC)WPV
8BG)9M4
24V)T95
YFR)F1G
FS5)H1M
JKB)YVS
N1K)7NP
LKR)S82
SLY)7R3
GTQ)L2N
L2N)4DJ
CGN)7S9
NJ7)7QH
WXB)KT2
R3T)78Q
XSF)QCF
T85)1W2
11N)29B
6SL)BQ2
1Y2)C81
B6J)5XC
GV4)LW1
FFB)1WQ
GPP)6LP
FYL)4R4
K9N)KZQ
ZB8)RRS
YP6)Q68
9FQ)1PB
7G3)2L3
KJK)NYV
WNM)9ZL
JMZ)QF6
38S)44G
JG6)LYZ
286)WXS
B4B)Y8Y
ZML)VRJ
Z2X)FVK
TNS)8BG
8S3)QLD
NBP)DRH
TKL)429
CC7)9DN
FYL)14D
LLX)3SZ
QQX)WF9
LJS)GMZ
7R3)2WR
4GT)4F2
9LQ)DBC
YPZ)4GT
9BK)SMB
QB9)P4L
3N2)ZQ9
7N8)F7L
BLG)B2S
1SF)W53
ZZ1)4B9
H4Q)KJK
ZXN)4SC
82C)8D8
15F)KGR
54G)XXH
J7Y)QJZ
SNM)SXH
BKH)8VV
SMB)KTK
ZS2)2KV
L2N)C76
Q1T)BJQ
GQR)SK6
QQK)TGL
LW1)FLB
3B4)J6L
V6B)57Z
Y1R)2DG
QQH)Z2Q
G8G)8KQ
8NR)K9N
6M6)3KH
J27)28R
85J)48Q
RLT)LKR
XY1)CGN
ZW3)N1K
QR2)6LD
88G)G6R
QGY)126
5XC)X9S
X5N)7VN
8D8)97R
PYX)KMM
N8K)7B8
MF9)PXY
8WW)4NS
JZ8)RVW
H1M)78C
QZV)3XV
YZY)66Z
WFZ)44F
3Q5)PPH
NTG)SNM
HBK)CM6
6JF)CH7
CVB)Y9X
F5G)TZN
95K)Y1R
614)54L
TPP)66G
4BR)8WW
YJ7)W1R
Q9R)773
YH2)SY4
2CF)3Q6
GK1)NPV
6PL)TL2
6RQ)X5N
TGK)52W
7HJ)SC4
7B8)L8S
MKR)88G
SC2)DLX
SF9)KFC
QSZ)KBD
VL2)S9X
LV6)HK5
FMJ)8R2
9YR)YLZ
N23)V3F
B6R)DXF
M5V)KZH
6VY)CRW
T3Z)MQJ
JVM)WFJ
33M)9G7
W45)VFH
YZY)1LY
HR1)QF5
JGN)QB9
991)F5G
78C)J27
8XW)5SB
BHN)4SY
LKB)BSK
3DL)GQR
9XC)B6V
L4C)PD6
LN8)82C
P2C)Z19
SNM)C3D
4SY)8NL
8Q8)4RF
QLD)NS6
C7M)6HN
PZG)TBV
D6T)KFB
DYJ)TLH
PQJ)729
Z7K)QQK
ZLD)Q49
JT4)6PL
49Y)WZ9
X43)VNS
3SZ)H25
ZF6)QGY
SCD)FMJ
6FC)RTP
RMS)GZC
VNS)961
Z2Q)NJ7
H3K)9XC
9J3)6VB
BRN)3HQ
NQY)GTK
D8W)F6F
GMS)LXG
L5Y)B1H
HC5)KTM
QVC)292
MCN)G2X
HC7)TNW
QBX)1XH
X1H)X5D
NPV)SLY
DYN)VD5
CCW)7CP
TG5)6Y7
6PL)CYJ
2LW)8H9
77T)ZXN
X5D)HJ2
S82)2BW
729)PL8
Y9V)8MW
PCH)LZW
XQN)3SN
WC7)ZML
V3S)JJK
T46)XG7
XF4)TPP
SH8)2Y4
WXT)892
P9L)V6S
PXY)JG4
CY5)MF9
X41)NQ6
B9R)9HH
M4P)91B
RD6)QQ4
SMZ)X49
4DJ)BKH
D6Q)F8Q
ZHJ)4ZZ
MDM)QXG
RMK)B5Z
27F)1Y2
J87)Z39
G65)5Y4
NGQ)LP9
Z34)MP9
VLN)YPZ
MHH)K6L
F7L)JZ8
9KL)8LZ
5XS)TK1
MNS)Z2X
2KZ)K5M
CZC)8LR
RS8)7XJ
M72)VHV
6PN)TKL
SG4)FBR
SC9)5WZ
N8L)ZTK
XG7)MKK
KB9)JL7
1GQ)82G
N4X)91W
F6F)NR4
44F)1SF
SZH)CNJ
V2D)F7M
Y77)RS8
VD3)7P7
LXG)S5B
QXG)KDW
2KV)T46
XXJ)1BP
ZNZ)MBB
BG4)Q94
B5Z)CVD
5WZ)T8K
2MM)FLH
CHW)V88
FZS)DS2
WZ5)LDJ
BFQ)MKR
Y1R)YLV
QLD)34L
737)GPH
QQX)1ZV
CRW)T42
73H)L9K
G2B)VJV
9G7)SH8
Z3G)T3Z
9YS)TGK
7NY)27R
8R2)WXT
GPH)FS5
KBD)7N8
HM9)68B
2YD)PD5
9YS)38S
Z8W)W8Z
3KH)X4V
6ZG)935
36T)QX7
9L5)SPK
VLF)4L4
XCK)GPP
66Z)FFQ
XXH)H4Q
FWL)TQD
9DN)YYQ
F7M)4XZ
7S4)BML
L58)FCC
739)XWV
YQ4)FJJ
3CT)JM3
KSG)NMG
6T5)JG6
T8K)X8Y
K6L)QQH
P74)9HY
JG4)9BK
9FR)836
TNW)6RL
RR3)HD6
26G)SCD
HC5)B98
72L)6G9
6G9)1DT
32D)FBZ
1TY)C7S
QQ4)43D
RV9)5D5
7P7)MCN
5YW)6YX
S99)6RQ
RR1)YBD
V6X)227
SBL)6Y8
6KM)X21
66Y)4VT
91L)4PK
PD5)4K3
Y8Y)L1Y
LHS)L4C
1LY)SAN
W8Z)L5Y
V6X)KS8
7FX)J87
YXX)B4B
CLQ)S8N
JGW)H99
WHC)SJL
XMH)V5P
VP8)BLG
BCK)R55
4PC)Q1T
TBV)N23
B66)JMZ
YLV)TNS
88G)4C6
RLT)Q76
RRS)WXZ
43D)WQR
ZR3)HDY
S2D)QQX
DTC)BJR
Q3X)YP6
7QH)PWH
WXJ)329
SCK)1GQ
QKG)GSV
ZHJ)HKT
BML)CY5
WFJ)46L
TLH)36T
VC9)QY2
2CF)NFM
Z4B)VYK
46L)5KV
GCH)X1H
14D)3DL
PD6)QZV
34L)LHS
X8Y)9HW
QF5)KB9
24D)WXB
GVR)D8W
PCY)PJK
1QW)L48
J5L)LKS
ZQ9)JPX
L9K)V7K
X4V)4ZR
SB7)8H6
VF3)HHD
2WR)QTH
PPH)W66
C23)ZKT
HGM)XDC
NS6)8GQ
X58)991
MLX)S3N
ZCB)14K
29Q)5SD
BH4)7D3
FVK)NPP
Y9X)N2Q
GH2)R79
HJ2)739
WXS)B66
SY4)59D
F2K)NTK
HHD)35W
935)4NJ
ZKT)C7M
V2D)C9K
HD6)2D9
B98)SCK
ZF6)7J4
PVN)L7Q
SBM)F77
3H8)29Q
F2D)W41
FLH)QV6
YT8)S99
GBQ)YT8
WXZ)6MS
C5W)WFB
KV2)66Y
TBR)L5P
NL6)3SR
SK6)ZCJ
VYY)P54
2L3)GV4
K1X)ZS2
7D3)Z4B
384)457
8R2)TGF
ZB8)CC7
KS8)TYB
RKB)2YT
K1H)XXJ
52W)S2D
WF9)P61
WP9)GG3
95M)8BB
W53)CP6
CM6)R25
GTK)TZM
Q28)D68
WC8)VD3
JMG)KCW
9HW)JFH
9HY)92T
8GQ)6KS
62Z)9WY
VRJ)81G
TGL)VLN
TGF)ZSL
XW6)XJS
TNL)XYQ
9G9)PQJ
VYK)4JY
GMZ)PQ1
NJK)L58
XF8)JVM
GQ2)GVR
N2Q)XKQ
SM4)TQR
C4S)QVC
Q76)LV6
FMH)3D6
7B8)C4S
VYY)2KZ
9L5)27F
7FJ)T99
GY4)JGW
YYQ)WFY
GV4)CRJ
457)VSM
7G3)1P9
SKH)DYN
4PK)9J3
7S9)C22
1KS)V6H
YVS)N4X
2YT)F4V
4ZZ)ZBG
FVM)PYX
8BB)1QW
PQ1)TCV
NR4)5SX
9WY)95M
SPK)DC8
W3D)VB3
L93)3LK
K9J)C9N
4C6)MRG
P5D)5XS
4XY)HF2
MFS)64G
T33)R3T
SFB)TV7
78Q)FYL
892)GK1
GG2)N1F
LTD)XF4
5WX)NQY
QNF)T33
CYJ)6VH
NTG)MFS

162
2019/day06/main.go Normal file
View File

@ -0,0 +1,162 @@
package main
import (
"fmt"
"strings"
helpers "git.bullercodeworks.com/brian/adventofcode/helpers"
)
func main() {
inp := helpers.StdinToStringSlice()
allObjects = make(map[string]*Object)
for _, v := range inp {
pts := strings.Split(v, ")")
var obj1, obj2 *Object
var ok bool
if obj1, ok = allObjects[pts[0]]; !ok {
obj1 = NewObject(pts[0])
allObjects[pts[0]] = obj1
}
if obj2, ok = allObjects[pts[1]]; !ok {
obj2 = NewObject(pts[1])
allObjects[pts[1]] = obj2
obj1.addMoon(pts[1])
}
obj2.setOrbiting(pts[0])
}
fmt.Println(len(allObjects), "total objects")
part1()
part2()
}
func part1() {
var ret int
for _, v := range allObjects {
ret += v.countOrbits()
}
fmt.Println("Part 1:", ret)
}
func part2() {
if _, ok := allObjects["YOU"]; !ok {
panic("Invalid input for part 2")
}
if _, ok := allObjects["SAN"]; !ok {
panic("Invalid input for part 2")
}
you := allObjects["YOU"]
youOrbits := you.getOrbitsList()
san := allObjects["SAN"]
sanOrbits := san.getOrbitsList()
min := -1
var minShared *Object
for _, yv := range youOrbits {
for _, sv := range sanOrbits {
if yv == sv {
ySteps := you.stepsTo(yv.Name)
sSteps := san.stepsTo(sv.Name)
if min == -1 || ySteps+sSteps < min {
min = ySteps + sSteps
minShared = yv
}
}
}
}
if minShared == nil {
panic("No shared object found!")
}
fmt.Println("Closest Ancestor: ", minShared.Name)
fmt.Println("Steps: ", min)
}
var allObjects map[string]*Object
type Object struct {
Name string
Moons []*Object
Orbits *Object
}
func NewObject(nm string) *Object {
return &Object{Name: nm}
}
func (o *Object) getOrbitsList() []*Object {
var ret []*Object
if o.Orbits == nil {
return ret
}
ret = append(ret, o.Orbits)
return append(ret, o.Orbits.getOrbitsList()...)
}
func (o *Object) stepsTo(nm string) int {
// First check if this is it
if o.Name == nm {
// If so, remove the last transfer
return -1
}
// Now check if it's a descendant of this
if ret := o.hasDesc(nm); ret != nil {
return ret.stepsTo(nm) + 1
}
// Ok, we must have to go up another level
if o.Orbits == nil {
fmt.Println(o.Name)
panic("Nothing else to check!")
}
return o.Orbits.stepsTo(nm) + 1
}
func (o *Object) OrbitsAround(nm string) bool {
if o.Orbits == nil {
return false
}
if o.Orbits.Name == nm {
return true
}
return o.Orbits.OrbitsAround(nm)
}
// hasDesc checks all moons to see if one is or has the requested moon
// and returns the object that does
func (o *Object) hasDesc(nm string) *Object {
for _, v := range o.Moons {
if v.Name == nm {
return v
}
if d := v.hasDesc(nm); d != nil {
return d
}
}
return nil
}
func (o *Object) countOrbits() int {
if o.Name == "COM" {
return 0
}
return o.Orbits.countOrbits() + 1
}
func (o *Object) setOrbiting(nm string) {
if v, ok := allObjects[nm]; !ok {
panic(fmt.Sprintf("Object not found (%s)", nm))
} else {
o.Orbits = v
}
}
func (o *Object) addMoon(nm string) {
if v, ok := allObjects[nm]; !ok {
panic(fmt.Sprintf("Object not found (%s)", nm))
} else {
for k := range o.Moons {
if o.Moons[k].Name == nm {
return
}
}
o.Moons = append(o.Moons, v)
}
}

11
2019/day06/testinput Normal file
View File

@ -0,0 +1,11 @@
COM)B
B)C
C)D
D)E
E)F
B)G
G)H
D)I
E)J
J)K
K)L

13
2019/day06/testinput2 Normal file
View File

@ -0,0 +1,13 @@
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