Advent-of-Code-2019-Day-6

  題目:Advent of Code 2019 Day 6
  使用語言:C#

  
  第六天的題目看起來是很標準的tree?看完題目的直覺是用Linked list處理,但Linked list應該是要存Pointer才對,我最後還是偷懶的直接存Value來處理了。
  這次算是在遞迴的條件判斷上花了不少時間,Part1直接從COM出發算全部路徑還好解決,Part2的從YOU出發算到SAN的最短路徑著實讓我腦袋打結好一陣子,還跑到stackoverflow好多次……

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
using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
public static List<int> _stepList = new List<int>();
public static List<OrbitObject> relationMap = new List<OrbitObject>();

public static void Main()
{
var mapData = new List<string>() {"797)67Y","W32)48L","J31)N9K","QQ3)NVL","MP6)JBY","8T3)H27","DRK)THF","BSN)7MD","Z2G)VRX","CVV)XDC","WVW)SV6","D3H)QMG","9BM)NTH","4T7)FQS","F58)D1Q","CR7)B7L","4W8)T9Z","5SB)5JB","DRJ)YQD","76X)X1Z","WC9)LNG","52C)W7J","9ZS)KM7","3RW)C8R","7RQ)TJW","HVN)ZNQ","SQK)CBT","GWC)N76","KBQ)W44","QD5)RVQ","SQF)N3K","RZ1)B2R","TB5)34W","J56)CQD","34Y)HLX","DTM)TD4","2RF)SQV","GJT)TFD","CNK)88B","PJD)GD8","4V8)FQN","HKH)6RS","7T4)2JT","DBM)DMQ","59X)137","HK7)B62","D34)K7Z","RR2)M74","Q13)FC5","1F1)8XJ","K1L)QZ9","T73)4VT","Z7S)59X","1MQ)GB6","BJT)4BZ","WW8)DT2","JYL)6SH","R2K)WC9","21H)4ZD","Z7Z)QWZ","F8N)LRZ","QZ9)9TD","3DP)VDT","GZK)ZGF","G3P)KLZ","7ZM)G3P","3VX)P4H","7T4)LNV","VVV)Q99","BYX)87K","4C1)9XS","SB3)4SV","FYV)JQ4","HQ4)ZMR","K7Z)LKT","TQM)BBH","9V5)PJD","7VB)H6L","66X)FDY","NT9)17R","K9Z)T26","1BX)VRN","TJD)5ST","QWZ)5CT","MD6)GJT","TT1)W3Y","B2R)444","MB8)NFN","FB1)4T3","V3Y)DJ7","2GQ)265","SLV)G3B","THF)DC1","HRR)LV1","QZ7)ZR5","VGS)ZCG","CRY)3L3","3N2)CZ4","Y1B)3WF","YK2)W5C","X15)8ZW","92C)3PV","7Z8)Y4B","PWF)NX2","GPR)QVR","TDL)TRM","W4X)8TH","23H)6KK","4X2)TXV","HQ9)52C","LRG)RWM","38N)YVB","W7F)BSM","3VC)FQC","PS7)Z7Z","2YX)QSG","9PB)4KF","VRX)K9Z","TRM)R2K","WYB)NRD","HJ2)5LM","ZRJ)WWL","7TW)WZR","CBX)7S2","V4N)FSN","17B)88D","F91)LWV","L54)9G4","592)YC1","J24)9KW","GNP)Y7T","KDP)22T","ZNQ)QFZ","8NW)MKC","VSJ)NTD","137)VQS","YB3)MP6","38W)DLK","CJJ)683","59N)GHZ","W3Y)P9Y","733)V2Q","WX6)4GM","RRP)HG8","L6L)YZZ","QRW)YZX","1FD)RMT","HSJ)5V9","RVQ)1KY","9K7)72H","V6S)75V","NB1)SDT","J5N)4R6","QD7)1SR","J6W)3FL","2GQ)FQM","J5N)2K9","2B4)R23","4L5)QXX","7J4)42R","6X7)H2X","8D1)LH7","592)J4Y","6CM)4GW","R6V)KSD","FDL)NKS","P4H)8RZ","46M)L1N","M64)M4K","6K3)KZ9","FH8)1SS","DJ7)BMS","MG1)RQ9","ZRH)5G1","TMT)VQG","11V)W7N","ZM5)QHZ","DSL)8GB","YK5)38P","C1Y)YYJ","H61)8N2","T7W)VVJ","THR)M7F","XXH)3H3","TVX)595","B2B)KBF","76Z)DGL","9PR)X23","ST7)G8Q","1FP)FH8","Q5F)7V2","XKP)2VC","47G)1ZG","QXX)8XD","MNG)KNF","RF3)XD8","K4F)PLX","66D)LXG","TQW)5SP","SBR)ZFT","NMH)8W7","N79)YBM","BK8)JY9","NKS)H8K","LQ5)SNS","TVR)N6T","QXP)M92","YMD)HM8","T84)25S","Q6K)M3K","R23)MZM","CTB)B9Z","DT2)718","9ZD)GXG","KKV)N5K","GBK)TKG","TRG)GMW","KFY)PLY","LSP)RG9","Z31)MBP","LXF)LFF","3JC)MS6","CRY)6ZK","67H)Z6Y","B9Z)674","TWJ)DW2","1PR)4WW","X1J)QZR","128)FLG","GTT)75S","67Y)HNK","H2L)ZRX","9V6)RF3","GRX)TDC","WJR)68N","129)QJ4","FY1)PWF","F5D)RQM","S7K)PVL","88B)C23","YV9)136","5C8)X6V","LDQ)1FD","N55)WYB","WZB)ZT8","SYH)QVB","FWZ)SFX","ZVJ)VXP","L5V)J31","8ZW)4HG","49B)J24","6LC)Z98","G83)4V8","BGX)J9B","6XF)MQJ","54P)BTC","83Z)KZP","BZZ)J9P","RL5)QXQ","YMQ)HH4","3XQ)64P","3BG)SBJ","X7P)N8Y","3HN)L4S","T1P)H61","ZJR)ZZR","1SH)JY7","KTB)LYF","ZLF)BXG","G3B)BRS","8JV)46M","KDX)TP4","DPC)T8P","VRQ)G56","2JZ)M64","YY2)1J2","VSJ)G7W","SJ3)L68","19W)SMN","KJX)GNP","7S3)RP1","VCS)MKK","8C6)7TR","NY3)2LY","9N2)GVQ","9Y1)K9W","PLX)V6S","38P)QNP","V2D)J4Q","TGL)NMG","2N2)NXX","ZBW)G5C","88Y)QTV","NPD)B9Y","NFR)HHP","9Z9)Y49","NTH)LG9","RG9)HHS","Y3P)D7W","D38)4JL","MF5)XGZ","4BB)DJJ","1XF)BZ4","F4Q)MHQ","7QN)FPZ","98T)DXP","MLJ)DMR","ZZC)7P2","5G1)7T4","J9B)VR4","W7K)1LP","8Z2)4K2","N1N)DS1","T73)TQW","RQV)HCS","T8P)6XS","CNK)9WG","3RP)43B","S2K)Z2G","Z3H)P8G","BZ4)QVP","W7J)BN5","ZNJ)91T","6V7)CLD","6SH)6L9","XLQ)YBC","BWN)6RL","DRK)NBG","5ST)LR7","BPM)DNV","3H7)WYV","WNF)BS9","FY1)6K9","3T2)3P4","B45)S1Q","BKX)9ZD","Y7T)9PR","BRS)92N","QLQ)75L","XMQ)XTF","N8Y)LSJ","4Q1)2MG","NT9)NRL","7NT)F18","NRD)CFJ","MDW)QXC","QMG)LCN","LSJ)L24","44J)V5Y","186)18R","91T)RM1","P4B)XVT","JN4)128","JXZ)6PZ","Q36)3RP","6K1)T2C","3S8)3VX","42R)QSD","3WF)66X","LB2)XXH","G3Y)SB3","44G)J99","HPK)2X5","7NH)HGJ","2W6)HTC","HM8)FS4","XFD)9FK","643)L1R","3SQ)VB6","8BQ)N5L","2X5)J3R","1ZS)8LF","21Z)SLK","YL7)FQH","RKK)DMZ","TNY)F96","Y2F)FRV","MN7)BZZ","38X)KWN","75F)8WP","ZR5)N7W","F65)2VB","5PT)84N","F9Y)HRR","SVL)RXH","RB6)NFR","QTV)8CV","58Z)BWN","FQN)BK8","WXC)MLY","683)HF6","T5X)6X6","BC5)WZB","J2H)SQF","DBM)LJQ","FQS)SWH","BFC)SLV","45B)7F8","Z12)6DS","DP1)3T2","SLK)BBN","34Q)6V7","X66)DCJ","V1V)X6C","MR9)Z9T","PMF)VP9","VCL)GNN","B7L)KQ2","95C)F58","2RF)YJJ","KNF)5X4","GJT)YZJ","N9K)XTN","T84)HZW","TJN)6QJ","TB5)Z7W","YKV)YMQ","W6T)1CV","1G3)5ZB","LXG)3MK","YJN)TTD","2Z7)KJN","HHS)KKV","KQ2)D3W","M32)3SK","528)49L","CVH)LB6","QSY)C6J","VQS)KFY","VPJ)95Q","2MG)GCK","B2N)9QV","6N5)5FX","F25)QJB","92Z)7QN","7XN)G62","WQ8)61N","X8F)HG1","6Z4)3YQ","MHQ)SAN","XR9)5XJ","891)H43","VTD)1BJ","48L)MV7","W7W)BQT","S9W)42J","7P2)ZV9","TW7)DXK","CBG)2JK","7H8)KRG","GDW)W4X","G8X)2NW","J99)Y5T","VP9)83G","D17)DKJ","1YF)W9J","RSH)T43","4SV)6V6","M7D)QRQ","3WC)CJJ","45R)45B","WFN)21H","4HG)8C6","NFN)BC5","XWF)BWG","NHR)ST7","H83)NXB","3SK)7GB","ZKW)D34","VDT)1SH","33V)N7F","M8Z)4W8","XPD)WXC","FRY)Z2V","JB4)WR2","YPF)8T3","C8R)LRK","V8L)WQ1","28R)Q7Y","C52)Z18","CBY)GLF","PXR)1F1","4XM)CFG","J8G)V11","RVN)9V6","FZQ)B4V","775)3HN","1B2)X42","VD7)6GY","5WS)91M","JJ2)3RW","3RG)8PX","H4W)KHD","B4Z)J56","8XP)ZHJ","FZ4)6DZ","3QM)1XJ","KQD)WDC","BNV)87P","GHZ)B2J","J4Y)PXR","BMM)LVJ","4JK)WZN","TTD)KNL","TW2)9JZ","6KK)DPC","RZV)FK8","3DR)VSR","PDP)76Z","N7H)X7P","J4L)7VB","2HT)DSL","MV7)ZL3","Q7Y)FHP","7BM)2HT","4KF)FX7","B62)DHN","FJ4)775","Z1V)XFQ","N6T)7MV","136)F4M","FBW)FGV","W5G)Q7R","2G5)21B","F76)LLY","VCX)WJB","BN5)B2N","ZVF)9HQ","BMJ)D17","1Q1)Y6J","6TV)MR9","9FQ)1MQ","FC4)VCT","V2C)YDS","8N2)T7W","N5K)RY7","YPH)WGN","RPY)TVY","6BQ)JJF","1SZ)KDP","1WL)DQW","ZXR)BT3","MS6)JN4","4ZD)DBM","3RL)BM4","4DK)SVL","YZ4)XR1","5R1)FMZ","8W7)JS1","KWN)GZK","SR5)L9J","JX6)X5V","YBC)3S8","H48)BTY","FL4)6WC","GB6)285","64P)B4Z","HCS)LK1","Q5F)R6V","JDC)HKH","PWR)916","RDW)TRJ","V11)9L8","HXY)9VS","RP1)CZD","B9Y)891","P1G)FRZ","QTV)B92","VB6)LYJ","3FL)7PW","QLM)L54","LYQ)6LC","Y5Q)MD6","KQ2)KJX","GQG)1K8","SY7)WK9","77W)K1H","65Z)RFV","H54)4P4","95Q)KTB","VMB)DZS","F3C)1N5","T26)7WW","MSL)CWB","QF5)6LN","TWH)MGK","73Z)7KR","VPP)LR8","129)CBX","G8Q)L5V","9V7)RLB","B2X)YPR","T2D)M3M","TT1)4QD","89C)JCX","T7S)7QJ","6WC)SXQ","Z3H)YPM","MBP)7Z8","D3W)G83","QXX)74K","SSB)V2D","QVM)ZBL","WZ1)Z6G","D8J)GQG","9CF)F1C","YDP)TWH","FZ9)T3M","ZTQ)V9X","RX7)7F1","L3H)6NF","BSM)TBV","Z2V)D6G","YS7)W32","LWV)7ZB","PSP)YJR","49C)DWM","88D)3SZ","LX9)G2Z","46D)GKR","Z7W)1PR","PWK)NY3","WDC)Z1V","ZGF)PBN","W28)HX3","5WQ)49B","DYK)B5C","4R6)HK3","HZ2)N7H","MN8)G4Y","SJW)B2X","4M5)6QW","YVC)PDW","D1Q)C97","3SZ)7FW","N6M)MF5","P53)XWC","G46)RDW","F6H)G9N","XTF)BNV","6LC)K8B","2XV)813","7TR)J26","HC4)K38","9QV)VG8","F7Y)58Z","N7W)V4N","YZX)35W","VCJ)1SN","R85)1FP","WHT)681","QCJ)RHP","2T5)ZTX","VXP)XKP","DVZ)2VX","RDF)6FN","DLR)RXK","M66)F8N","BQD)TW1","9L8)2BL","4T5)M36","8FJ)3PK","MLF)7TW","LR8)VZJ","TMH)P2Z","8TH)LFP","FB6)66D","3P2)4T5","BGZ)K4F","75V)F4Q","TP4)8K6","4JL)KGH","N5L)LFC","F5D)WN4","RMT)T5C","1JB)XSJ","MDB)WDX","Y4B)765","1BY)MDW","KYQ)48R","KDD)6K3","YZ2)517","DC1)V5V","JS1)6C9","FVR)3L7","CCQ)HQ9","LB6)JPM","SWH)W28","WVM)K8N","L7T)GPF","4X5)98T","J1V)97M","XHZ)FZQ","J2L)CQ1","Z9T)W7F","3XQ)F25","XYS)M66","PFM)92C","144)F91","7ZB)PFM","GPK)HXY","BBN)MLJ","1KY)3QM","7FW)8BQ","NP8)N2C","CLY)QLQ","HN5)VD7","1CV)H7D","QCJ)TDZ","G9N)HLN","WYK)8H7","NRL)QXS","XMF)WHQ","SQV)2G5","YQM)VZX","NMX)SR5","T4P)6VG","3SQ)S47","1BJ)Q36","QXS)51X","HX3)KGJ","28V)GGC","2VC)6BL","4Q8)RVX","CKW)GTT","JX4)XCB","NDH)Z8W","HJ2)S2K","S6Z)NMX","N76)6TV","RLD)Q8V","R1Q)K7V","FRV)RQK","FJF)RLS","KBF)SWF","VJP)Y2F","LW6)PMF","7MD)67H","456)S3D","DW4)23D","KVT)CVH","NGC)1YF","FX7)JX4","674)HBV","77G)7H8","MZ6)528","NX2)WGD","TZR)CLZ","YY7)4TQ","K8B)GR9","S1Z)WF2","H5F)CKS","W3R)J1V","DTH)28R","9SK)7NH","Q8V)X9B","WJB)4FK","5SP)VJP","3ZL)8Z2","C6J)H85","YR7)4JK","YS7)RVN","BPM)H83","Q1Y)ZWH","4JM)561","MVM)6X7","T6Q)TW2","TPT)47G","QVB)144","VSR)H48","GPS)FJF","RFB)T4B","VP7)3C9","2D8)FZ4","DWM)Y61","YJN)C52","1JB)ZG5","2K9)J7F","3MK)4XM","YB3)PS7","COM)WV2","PDW)T1P","4YP)Q13","BTC)ZBW","9FS)37V","87P)XP2","7F1)RTN","HKR)ZKW","NHL)2XV","PP4)CBG","SDT)9CF","HLN)GBK","Y21)GPS","H42)FJ4","FFZ)DDD","SF7)YZ2","LP4)VSK","FK8)W5G","RFF)2FM","517)FDL","9FK)TW7","83H)S1M","S4T)D8G","9TZ)89C","G7W)VMB","4TQ)V7H","JGP)Z95","V9X)VCS","8P7)DN2","WKZ)95C","L9J)Z8M","M36)FHD","BBH)T3G","XHZ)DP1","VZJ)39J","FVR)YV9","Z95)XK9","D5Y)HTZ","8JH)ZXS","B9D)VHJ","YQD)XPD","9Z8)ZRT","285)X66","F94)D5Y","C23)G3T","7SR)PWR","LK1)K79","X42)8JV","3K2)LSP","DHH)QF5","B92)H2L","7QJ)MPR","FYH)BYX","QCT)PFC","VQG)PQ8","KNL)4SC","QJB)YOU","YKH)YY2","S1M)T92","6PW)11V","HMT)CQY","FHD)MTV","Z6G)PVR","4Q1)6N5","N3M)38W","VCT)CCQ","9KW)BMF","QSG)4C1","J7T)GST","FVN)TY8","X6C)4YN","KRG)Q1Y","CDD)7FS","KDM)K1L","NXB)QR4","XFQ)FZN","1T4)KYQ","QVR)34Q","W6S)TSK","XLD)YKH","75R)TH8","T9Z)5NG","C97)YJF","PSZ)33Z","GNN)R49","36J)N3H","MYL)N1Z","WPP)RHG","2VX)T6Q","XP2)DG9","S21)Z1Q","NMG)YDV","SLV)BGZ","931)KQD","1DB)XGB","SXQ)WCX","K59)XBB","TXV)ZVF","DG9)Y3N","H27)3ZZ","XY8)ZZC","Q7R)V8L","W9J)WFN","8H7)J1X","QJ4)DXJ","GST)Q6K","YDS)JXP","GMW)83M","TFD)P3N","XTN)PKR","9HQ)5H6","BTB)685","3PN)D3H","6NT)F3C","JXP)77W","D8G)XHY","QZ9)L2J","75L)SQK","XWC)8YX","L1N)GS2","JQ8)31Y","TZQ)FVK","DN2)YPH","DW2)8NW","RRQ)2T5","S81)DT5","S3X)V3Y","XBB)FVR","BFV)9DQ","9PR)Z3Z","92N)PLM","B5C)NZR","3C9)LJ5","CQ1)HPK","LR7)BGX","37V)D61","LRK)SP9","JY1)HQ4","RQM)WKZ","8X9)TJQ","DS4)KWB","LG9)JXZ","HG8)MN8","KGJ)BYK","2JK)FMR","WB1)GB9","WGD)TT1","Z3Z)RTL","CDQ)6PW","8V8)2HD","CCC)W7K","YMQ)1WL","GRY)WB1","4QK)DS4","FQH)SSB","Z8W)648","GPD)Q5F","ZBL)LCK","6RL)ZTM","7MV)6Z4","QSY)B9D","N55)SVN","G62)1B2","91R)Q1L","G3P)GX2","PVL)1YW","J9B)JJ2","TNS)PHY","MGK)XZG","RFV)3XQ","1XJ)23H","G3T)Z5H","3RK)T1W","T92)MXC","XDC)HG6","WJQ)PRY","XCB)D8Z","K4R)K32","XYS)46D","RK4)931","7FS)442","RQ9)YV4","KFV)RDF","YC1)2B4","CBT)WHT","JGZ)RTB","C19)HYY","RM1)PDP","SFX)RK4","V5V)JYL","RXK)T57","17R)3DR","CQL)JK6","SP9)WVM","ZG5)T7N","QD7)YL7","ZFT)3RG","PLM)SH8","RP6)VPP","12T)K4R","G9F)KFV","MGG)72P","85L)DPB","GWP)L6L","NHD)WYK","XK8)9ND","T5X)ZXY","6QJ)8X9","4MY)RP6","WN4)W9L","7CW)JH8","1JN)R7V","7KR)Q1G","YHT)5WR","GLP)FHT","59X)TLM","8LS)RKB","4MY)LKV","NQW)VPJ","J7F)R1Q","WWL)77G","LH7)YVC","LR2)SVZ","826)2Z7","C8R)HJ2","8WP)GFJ","X23)FB6","RM1)76X","1Z6)BMJ","1FR)51P","LCK)VFT","ZL3)75R","KWB)L7T","6ZW)826","NZR)3K2","FQC)VHL","YPM)YPJ","2FM)CNL","4TQ)HTP","WGD)36J","PBN)9FQ","YVC)C2P","S49)YJN","QLX)SZC","Z8W)BFC","3ZZ)8D1","WJV)JDP","Z7W)QPK","VZL)9VZ","KLZ)K5Q","SWS)TPT","R68)VFM","SXM)J4L","L71)BTB","8GB)6D5","9WG)P6P","J52)SYH","D6G)T25","TBV)F9Y","R3Y)NHL","5XF)S84","VTZ)Z31","HZW)XMT","DGL)W6S","7TN)QJN","2JT)WJQ","XSJ)9XN","YG4)X15","JY7)DTM","B9Z)MGG","YJJ)Y8G","B4V)R6F","TFF)TDL","TNS)FYH","FDY)CCM","HG6)H2H","N5L)Z2N","FWZ)V1Z","CFG)GYM","23D)BJT","BGD)CLY","GXG)9FS","ZWH)T73","J24)D4X","88N)BGJ","LH7)K5Y","3MC)7S3","TJW)Z7S","ZK7)695","1DM)19W","51P)DVX","N1Z)1SZ","JPM)3N2","6D5)M32","VVJ)KDM","FHP)19S","WCX)VZL","4FK)5XF","DZQ)SWS","QRQ)J52","RHP)ZHT","5RR)92Z","3P4)D5N","1XJ)38N","YFB)C19","1MT)S6T","8K5)QD8","W86)NGC","ZV9)8FJ","GYM)GDP","7LS)HMT","LCN)S7K","K32)7RQ","NFR)S6Z","Q6K)CNK","LYF)RRP","8XJ)R6G","N1Y)DZQ","PQ8)H78","HYY)J2H","8MB)5R1","YDV)4GG","8YX)V62","84V)46L","LNV)KVC","6X6)TMH","BPL)33V","6V6)YMM","JZJ)QWP","4T3)VSJ","DNH)JX6","ZFT)VCX","KSD)YMD","HYR)F64","GLF)7Q6","FPT)84V","R6G)YK5","NNT)H4W","TJD)WKD","RWZ)VMM","NLW)85L","4YN)SQR","8N2)9ZS","N3K)YHT","2S1)SYL","CCM)5MS","GVQ)HC4","VM5)W3Q","WQ1)FWZ","RQK)GZM","HNK)8DX","D6J)GRY","TZQ)RZV","WHQ)SVY","WVM)3DP","Z7Z)PKM","C2K)N1Y","Z2N)9HB","CRZ)4YM","H78)MB8","8RH)8LW","NBG)2BG","XSW)TMT","561)LRG","1N5)4M5","FLW)YBZ","6RP)3QH","M92)R58","CZ7)RDL","FGV)ZPV","RXF)CDQ","9XS)W7W","9VZ)4X2","VRX)WPP","LYJ)VXH","681)YSC","PFC)5CQ","7G7)X8F","T57)FY1","Z8Z)BKX","Z5P)YDP","CQD)T1D","8HF)BSN","YZJ)HVJ","KRL)N55","4KR)4DK","P2D)KVT","RLC)YPF","GX2)4JM","V2Q)7F5","FQM)L2G","SGD)WC5","HTC)SJG","F1C)GDW","WDX)G21","HBV)CVV","7F5)1Z6","LNK)HFD","JB4)DFP","7S2)85B","S1Z)HKR","2LY)LX9","T2C)DGK","HLX)Z6L","4FM)NDH","TRJ)TQM","49L)JY1","MPR)3T6","CWM)9SK","52C)9BX","JBY)DVW","V9C)DLR","ZHT)86L","MBH)NG2","7SR)G4D","35M)MYL","NTD)QCT","2TX)1P3","8RZ)8VK","WYP)N2S","7Z8)2RF","SJG)29X","7WW)GDT","VRN)QZ7","7LG)YK2","765)XLD","P3N)TRG","GCK)RSH","TLM)GPK","M79)4FX","XGB)RL5","RXH)PKH","YHB)LR2","265)1G3","MCG)NHR","3PV)BPM","LM3)TFF","Y49)1BX","GB9)W1Q","GKR)45R","2LF)CHQ","595)X41","W2G)7CW","YB6)83Z","8LF)2W6","GJG)H42","PKR)3Z6","FLL)G7S","WZS)ZFJ","GB4)88N","8BK)CQM","9VS)W2G","5CT)YYD","G4Y)N79","KJN)Y1T","RY7)LBS","K16)FLL","YPF)LW6","SBJ)CRY","4DZ)186","4GG)5WQ","KDV)4DZ","Q1L)H54","R9Z)733","YPJ)GLT","LNP)WVW","XPD)21Z","9V2)HK7","4WW)37W","8K6)FBW","R3Y)LM3","5M2)VM5","ZNJ)DVZ","DVH)1NW","GLT)HM1","SLK)PWK","84N)6K1","GS2)88Y","K1H)GWP","4GW)ZRJ","DVX)PZG","VSF)5GL","WBS)4DV","8XD)S49","V6J)4T7","75S)YKR","GZM)BGD","NKS)LKD","29X)LYQ","JY9)2YX","HBY)73Z","BMF)LP4","T4B)KC2","87K)5M2","QZR)FLW","GR9)KRL","TXB)6NT","4FK)4MY","B31)2LX","TG1)4YP","BQT)LNK","TW1)RB6","3L7)T4P","Z8Z)N3M","6TF)CR7","LFC)R33","37W)1FL","CQY)J5N","S4G)VTD","ZT8)RZ1","5CQ)1FR","BXG)FB1","9G4)BPL","ZCG)F65","ZZR)2NC","WZR)59N","6C9)V2C","ZFJ)P1G","CWB)KYN","SY4)R85","DLK)9V2","2LX)VGN","5JB)GPR","QHZ)9K7","D8Z)2LF","395)NB1","1FL)FBF","5MS)4XD","HF6)49C","JL7)YDQ","33Z)TG1","CXL)X8Y","KYM)8XP","RTB)54P","LZ3)WJR","6DZ)969","FC5)XH7","DKJ)MCG","QCR)VCJ","W32)QXP","2XS)7LG","Z6G)KDX","H43)1SJ","R7V)G7M","YV4)8V8","D4X)1Q1","QSD)3KQ","SFX)M6F","DZ2)4DY","6K9)1DB","CZD)2TX","3Z6)RRQ","72H)3H7","7BM)QRW","P1G)NPF","85B)71W","FRV)MMC","21B)5RR","CSL)VCL","XGZ)CDD","2B4)V9C","QD5)T2M","VMM)456","G56)S1Z","NR6)C1N","NXX)HMR","H2H)XSW","D7W)GPD","JBY)ZNJ","WKD)KDV","7PN)MD2","GDT)G6Q","LV1)7XN","3KQ)RHW","SWF)XLQ","YDS)FL4","45R)Z8Z","K4F)K59","HLJ)QD5","11H)MX8","MKC)VH3","G21)NT9","QXQ)L6Q","VJ2)GFS","HWJ)P4B","B33)3P2","W28)2QR","C1N)8LS","9KW)PSZ","74K)6ZT","B23)WZ6","PPG)GJG","PKM)4QK","BS9)T7S","F96)39P","444)RM5","T6Q)BWD","S7K)M7D","YYD)M79","D1P)116","4DV)J6W","J7F)FRY","SVY)TZQ","8PX)1ZS","QFZ)NKW","FD8)YB6","CLY)X6W","1YW)RFB","648)3MC","7D7)8TJ","DT5)B33","T3M)5C8","31Y)FYV","T43)75F","H46)RFF","3BR)J8G","7S7)WBS","G9F)C39","2QR)12T","MKK)7LS","D1P)RX1","X8Y)CS3","7PN)CRZ","QMG)XNK","YMD)3JC","YSC)S21","DKZ)VWQ","C1Y)G9Y","DS1)Z4P","T2M)9BM","38X)XMF","MZM)DZ2","DXK)YQQ","HGJ)YZ4","VCL)7BM","ZPV)SN4","7J9)6XF","QWP)RKK","TSK)CQL","BMS)TVX","NPF)VJ2","KC2)NP8","MX8)YQM","TH8)RLD","KM7)F76","ZRT)XJR","VWQ)V6J","MKC)SY7","WGN)HLJ","CXL)4Q8","1LP)8RH","MQJ)KD7","7R8)R9Z","3H3)JL7","Y8G)LNP","4VT)P51","2NC)MLF","12H)HVN","HVJ)MN7","SZC)7J4","5X4)D1P","29N)NMH","8LW)L71","YYJ)G46","LDL)CQ3","KHG)6MS","RR2)83H","35D)38X","SV6)XMQ","KHD)MSL","FGB)XFD","ZS2)LXF","DMQ)FZ9","MMC)FGB","JW7)34Y","WGN)VRQ","LRZ)TB5","6NF)4FV","DMR)9N2","916)SY4","83G)WJV","65M)12H","9HB)WSL","L1R)5SB","G9Y)1BT","J26)91R","WR2)H46","2RC)K16","QJN)VVV","4QD)G3Y","XBV)35M","QPK)RR2","S72)T84","Q2B)5PT","39J)MBH","VFM)QSY","G2Z)KDD","Y94)ZS2","MTV)NPB","R49)B31","RVX)TZR","MD2)V1V","9TD)MDB","WYV)YFB","FRZ)C2K","DPB)CTJ","5JB)M8Z","4DY)WQ8","KGH)WZS","35W)3RK","1SN)PSP","VGN)5WS","BR8)8JH","N2Z)ZXR","TJY)29N","8JN)S81","4FV)3Y3","QFZ)F7Y","H7D)FFZ","TVY)BMM","8VK)395","N3H)X1J","6RS)HQH","42J)FCX","6TF)R3Y","4K2)7R8","BGJ)2JZ","7F8)G92","BMS)6CM","HTZ)ZM5","HQH)8P7","MXC)7LR","M3K)YKV","54P)TJD","FS4)28V","7PW)WNF","HMR)SGC","V5V)HBY","RM5)Z12","KZP)KCV","4P4)VWV","WZR)XYS","RNC)9Z8","QR4)JQ8","WSL)7S7","S81)DHH","NGC)7SR","6L9)8MB","DNH)44J","PVR)124","XZG)4X5","M6F)CB8","QJB)CZ7","DQW)XBV","PKH)RX7","GFS)7J9","W7N)DVH","96G)DQC","BWG)W6T","2BG)129","HHP)SJW","FGB)SBR","X6W)XHZ","5SB)MZ6","L5G)65M","WC5)1MT","3T6)CTB","YJF)JGZ","124)LB2","JDP)592","WV2)4D6","T7N)Y94","1SJ)ZTQ","CKS)KHG","1SR)4L5","6N5)3BR","22T)BQD","NBG)CSL","1ZG)DYK","P8G)DRK","LKD)RPY","7S3)9PB","ZTM)RNC","3QH)Y21","VXH)LDQ","NVL)QD7","TDC)TM4","W5C)YHB","19S)MS9","MNM)SJ3","8MT)XY8","6J1)GWC","T5C)KBQ","DC1)MVM","QXD)N8B","LKT)F5D","HM1)TNY","DQC)S9W","RTL)QGK","J1T)FPT","CZ7)2N2","674)FC4","FMR)NLW","TKG)1JN","1P3)GLP","HK3)VTZ","RHW)PG9","LJQ)7B2","5ZB)7ZM","LFP)PQW","TY8)YS7","4BZ)QLX","9BX)TNS","S84)3PN","GGC)S4T","L5G)WX6","25S)JZJ","WK9)L5G","LBS)9V5","K7V)8MT","7Q6)G8X","4GN)HXM","VH3)XK8","N8B)882","83M)YG4","P51)YR7","CS3)YY7","SVZ)N1N","X5V)G9F","G7M)GRX","39P)16T","YBM)JDC","WDC)8K5","HLN)W9F","QVP)XR9","442)VSF","YJR)LZ3","86L)6TF","P2Z)LDL","PQW)PPG","CB8)1JB","W9F)CHH","VSK)RG1","SXM)QCR","969)WYR","6VG)F69","MLY)3VC","RDL)ZRH","X1Z)TWJ","1BT)RXF","4FX)T2D","L2J)LB5","VHJ)MNM","Y3N)3BG","GD8)4KR","8TJ)C79","CFJ)QVM","4YM)SXM","71W)2S1","16T)NR6","D5N)PC7","S47)2RW","2Q3)QQ3","6FN)9Y1","PZG)6B3","XD8)2D8","C39)TJN","WYR)HWJ","HG1)RLC","CQM)7G7","WF2)NPD","VWV)643","JLZ)B2B","Z5H)BFV","LX9)1T4","CBG)3ZL","9HQ)8JN","F18)Q7J","F4M)W86","Q7J)YHM","6BQ)4FM","8CV)ZN4","YPR)NW2","VFT)FDW","DFP)JT7","Y6J)ZK7","C2P)CBY","3Y3)TVR","97M)JLZ","RG1)YB3","1J2)DLX","V7H)D6J","6B3)8BK","NW2)F94","PLY)D38","J3R)WYP","4GM)9TZ","D34)44G","QXC)B23","L68)797","HH4)1XF","N2S)ZJR","JJF)CXL","L24)Z5P","YHM)JB4","5FX)DW4","5WR)KYM","1SS)QCJ","9V5)RWZ","ZXY)FD8","VHL)6JG","RTN)Y5Q","JGP)H5F","2T5)7NT","LLY)TWZ","SYL)HSJ","BK8)3NR","VG8)D8J","Z18)T5X","G7S)N6M","9JZ)BR8","BM4)8HF","DXP)7D7","PG9)3SQ","P9Y)J7T","47G)TGL","9BX)JGP","HXM)7TN","JQ4)LQ5","6MS)VP7","2BL)3WC","T1W)WW8","YDQ)NQW","1FL)Z3H","JCX)WHG","6ZK)L3H","DZS)TXB","Z4P)6BQ","Y5T)9V7","5WQ)HN5","DGK)C1Y","FSN)ZLF","72P)DNH","19S)K14","QPK)FRL","6QW)VGS","5V9)2C7","BYK)RQV","1JN)XWF","34W)6RP","QFS)SF7","Y61)CKW","R33)NNT","MS9)4Q1","M74)FVN","RX1)S4G","116)4BB","YQQ)MC2","ZN4)1BY","RLS)BBC","B2J)11H","P6P)F6H","KD7)R9K","FCV)ZVJ","ZTX)HZ2","VMM)SGD","5H6)Q2B","L1R)9Z9","H83)FCV","F91)B45","L4S)PP4","2VB)R69","YB6)4GN","5ST)1DM","3L3)J2L","ZRX)2RC","5GL)S3X","7LR)N2Z","3RL)P2D","ZHJ)TJY","DCJ)2XS","PHY)96G","MDB)QFS","SH8)LZ7","VSF)CCC","XMT)35D","YKR)GB4","X41)Y3P","MN8)2Q3","LNG)NHD","K8N)DTH","H2X)J1T","5LM)Y1B","JT7)6J1","VR4)P53","813)JW7","CNL)QXD","PRY)MG1","S3D)R68","JGZ)PXX","1NW)S72","FYH)3RL","48R)CWM","2RW)6ZW","6DS)MNG","FD8)238","FZN)HYR","NHL)THR","Z98)65Z","TRM)QLM","K38)W3R","4D6)WZ1","BWD)2GQ","FRL)DKZ","WZ6)HC9","BBN)7PN","DJJ)DRJ","3YQ)17B","KCV)YTH"};
//P2 Example
//var mapData = new List<string>() {"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"};
//P1 Example
//var mapData = new List<string>() {"COM)B","B)C","C)D","D)E","E)F","B)G","G)H","D)I","E)J","J)K","K)L"};


// Build map
foreach(var relation in mapData)
{
var objects = relation.Split(")");
relationMap = UpdateMap(objects[0], objects[1], relationMap);
}

// Calculate checksum (P1)
//var comObject = relationMap.Where(x=>x.Name.Equals("COM")).Select(x=>x).FirstOrDefault();
//var result = CalculateCheckSum(comObject, 0);

// Get shortest path
var youObject = relationMap.Where(x=>x.Name.Equals("YOU")).Select(x=>x).FirstOrDefault();
var routeHistoryList = new List<OrbitObject>();
routeHistoryList.Add(youObject);
GetShortestPath(youObject, -1, routeHistoryList);

var result = _stepList.Min();

Console.WriteLine("Result: " + result);
}

public static void GetShortestPath(OrbitObject startObject, int distance, List<OrbitObject> routeHistoryList)
{
var routeList = relationMap
.Where(x=>x.SurroundedObjects
.Any(y=>y.Name.Equals(startObject.Name) && !routeHistoryList.Any(y=>y.Name.Equals(x.Name)))).ToList();
routeList.AddRange(startObject.SurroundedObjects
.Where(x=>!x.Name.Equals(startObject.Name)
&&!routeHistoryList.Any(y=>y.Name.Equals(x.Name))));

foreach(var surroudedObject in routeList)
{
routeHistoryList.Add(surroudedObject);
var distanceNow = distance;
if(surroudedObject.Name.Equals("SAN"))
{
Console.WriteLine("distanceNow: " + distanceNow);
_stepList.Add(distanceNow);
return;
};

if(_stepList.Count() > 0 && distanceNow > _stepList.Min()) return;

GetShortestPath(surroudedObject, distanceNow + 1, routeHistoryList);
}

return;
}

public static int CalculateCheckSum(OrbitObject startObject, int distance)
{
if(startObject.SurroundedObjects.Count().Equals(0)) return distance;

var totalDistance = distance;

foreach(var surroudedObject in startObject.SurroundedObjects)
totalDistance += CalculateCheckSum(surroudedObject, distance + 1);

return totalDistance;
}

public static List<OrbitObject> UpdateMap(string sourceObjectName, string targetObjectName, List<OrbitObject> map)
{
var sourceOrbitObject = map.Where(x=>x.Name.Equals(sourceObjectName)).Select(x=>x).FirstOrDefault();
var targetOrbitObject = map.Where(x=>x.Name.Equals(targetObjectName)).Select(x=>x).FirstOrDefault();

if(targetOrbitObject is null)
{
targetOrbitObject = new OrbitObject(targetObjectName);
map.Add(targetOrbitObject);
}

if(sourceOrbitObject is null)
{
sourceOrbitObject = new OrbitObject(sourceObjectName);
sourceOrbitObject.AddSurroudedObject(targetOrbitObject);
map.Add(sourceOrbitObject);
}
else
{
map.Where(x=>x.Name.Equals(sourceObjectName)).FirstOrDefault().AddSurroudedObject(targetOrbitObject);
}

return map;
}

public class OrbitObject
{
private List<OrbitObject> _surroundedObjects = new List<OrbitObject>();

public OrbitObject(string objectName)
{
Name = objectName;
check = false;
}
public string Name {get;}
public List<OrbitObject> SurroundedObjects
{
get { return _surroundedObjects; }
}

public bool check {get;set;}

public void AddSurroudedObject(OrbitObject newObject)
{
_surroundedObjects.Add(newObject);
}
}
}
Advent-of-Code-2019-Day-7 Advent-of-Code-2019-Day-5

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×