Complete Day 8

main
Wes Holland 1 year ago
parent 164127412d
commit 8795038285

@ -0,0 +1 @@
/target

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "day8"
version = "0.1.0"

@ -0,0 +1,6 @@
[package]
name = "day8"
version = "0.1.0"
edition = "2021"
[dependencies]

@ -0,0 +1,2 @@
Part 1
Steps: 12083

@ -0,0 +1,757 @@
Part 2
Moves: [Left, Left, Left, Right, Left, Right, Left, Right, Left, Left, Right, Right, Right, Left, Right, Right, Right, Left, Right, Right, Right, Left, Left, Left, Right, Left, Right, Left, Left, Right, Right, Left, Left, Right, Right, Left, Right, Left, Right, Left, Left, Right, Left, Right, Left, Right, Right, Left, Left, Right, Right, Right, Left, Right, Left, Left, Right, Right, Left, Right, Right, Right, Left, Right, Right, Left, Left, Left, Right, Right, Right, Left, Right, Right, Right, Left, Right, Right, Right, Left, Left, Left, Left, Right, Right, Left, Right, Right, Right, Left, Right, Left, Right, Right, Right, Left, Right, Right, Left, Left, Right, Left, Right, Left, Right, Right, Right, Left, Right, Right, Right, Left, Right, Right, Left, Right, Right, Right, Left, Left, Left, Left, Left, Left, Right, Left, Right, Right, Right, Left, Left, Left, Left, Right, Left, Right, Right, Right, Left, Right, Right, Right, Left, Right, Left, Right, Right, Left, Right, Left, Right, Left, Right, Left, Right, Left, Right, Right, Right, Left, Left, Right, Right, Left, Right, Left, Right, Right, Left, Right, Right, Left, Right, Right, Left, Left, Right, Left, Left, Left, Right, Right, Left, Right, Left, Left, Right, Right, Left, Right, Left, Right, Right, Left, Right, Right, Right, Left, Right, Right, Left, Left, Right, Left, Right, Left, Right, Left, Right, Right, Left, Left, Right, Left, Left, Right, Right, Left, Left, Left, Right, Left, Right, Left, Right, Right, Right, Left, Right, Right, Left, Left, Right, Right, Right, Left, Right, Left, Right, Left, Right, Right, Left, Left, Right, Left, Right, Left, Right, Left, Right, Right, Left, Right, Left, Right, Left, Right, Right, Left, Right, Right, Left, Left, Right, Right, Left, Right, Right, Right, Left, Right, Right, Right, Left, Left, Left, Right, Right, Right, Right]
0 : Node FSA => (RXT, BLP) : QuickNode { left: 344, right: 77 }
1 : Node JVA => (RMT, DPF) : QuickNode { left: 228, right: 647 }
2 : Node QXA => (VHC, PXF) : QuickNode { left: 518, right: 69 }
3 : Node KNA => (KTV, KPG) : QuickNode { left: 137, right: 435 }
4 : Node AAA => (MJJ, QBJ) : QuickNode { left: 306, right: 70 }
5 : Node FXA => (LBJ, JGT) : QuickNode { left: 494, right: 150 }
6 : Node MQF => (DDG, LSH) : QuickNode { left: 45, right: 294 }
7 : Node QJP => (PCT, XKJ) : QuickNode { left: 22, right: 158 }
8 : Node JXF => (PMG, NBN) : QuickNode { left: 107, right: 415 }
9 : Node JCK => (QCD, NRG) : QuickNode { left: 710, right: 173 }
10 : Node LPD => (NTM, NTM) : QuickNode { left: 671, right: 671 }
11 : Node DLN => (TXM, QRG) : QuickNode { left: 382, right: 401 }
12 : Node MTG => (KGC, DMM) : QuickNode { left: 90, right: 34 }
13 : Node KFV => (FXH, QLX) : QuickNode { left: 65, right: 390 }
14 : Node SCJ => (HQH, XSD) : QuickNode { left: 600, right: 116 }
15 : Node JKJ => (PMX, MHH) : QuickNode { left: 625, right: 542 }
16 : Node SJK => (JXM, GRQ) : QuickNode { left: 597, right: 149 }
17 : Node QXM => (HGC, SMX) : QuickNode { left: 147, right: 457 }
18 : Node XJS => (NRV, CCL) : QuickNode { left: 593, right: 120 }
19 : Node QLB => (RCH, QVQ) : QuickNode { left: 691, right: 679 }
20 : Node KDB => (QKT, BJB) : QuickNode { left: 283, right: 535 }
21 : Node FCX => (DXG, SGQ) : QuickNode { left: 355, right: 394 }
22 : Node PCT => (DXR, PTS) : QuickNode { left: 32, right: 533 }
23 : Node MGJ => (FKF, HNG) : QuickNode { left: 648, right: 29 }
24 : Node VBN => (RBK, JPL) : QuickNode { left: 175, right: 442 }
25 : Node TRH => (SRT, VJV) : QuickNode { left: 339, right: 246 }
26 : Node PGK => (SNP, QLP) : QuickNode { left: 299, right: 350 }
27 : Node XVK => (KFK, QQC) : QuickNode { left: 43, right: 113 }
28 : Node SXC => (XTB, DPQ) : QuickNode { left: 700, right: 277 }
29 : Node HNG => (VXF, MVH) : QuickNode { left: 608, right: 578 }
30 : Node QHT => (TTD, LBH) : QuickNode { left: 282, right: 652 }
31 : Node LMK => (QQT, QTP) : QuickNode { left: 369, right: 365 }
32 : Node DXR => (KCT, KQS) : QuickNode { left: 235, right: 292 }
33 : Node GHK => (JMM, VBN) : QuickNode { left: 102, right: 24 }
34 : Node DMM => (VQM, LTG) : QuickNode { left: 565, right: 186 }
35 : Node FBQ => (FSV, GHJ) : QuickNode { left: 410, right: 122 }
36 : Node KCN => (QVR, TDG) : QuickNode { left: 506, right: 459 }
37 : Node KBF => (XNM, HBL) : QuickNode { left: 397, right: 63 }
38 : Node KJP => (FKG, CJZ) : QuickNode { left: 678, right: 740 }
39 : Node JLH => (CKG, XLV) : QuickNode { left: 677, right: 86 }
40 : Node RJX => (KKN, RJH) : QuickNode { left: 129, right: 590 }
41 : Node PFS => (BVC, SXR) : QuickNode { left: 334, right: 393 }
42 : Node DHM => (HXV, FRV) : QuickNode { left: 212, right: 639 }
43 : Node KFK => (PLL, GQC) : QuickNode { left: 125, right: 563 }
44 : Node CNB => (KNS, HVP) : QuickNode { left: 168, right: 185 }
45 : Node DDG => (QTS, VRJ) : QuickNode { left: 261, right: 501 }
46 : Node QVT => (JCK, DJQ) : QuickNode { left: 9, right: 262 }
47 : Node LRB => (TXD, MPR) : QuickNode { left: 219, right: 574 }
48 : Node DMS => (QVD, MFS) : QuickNode { left: 172, right: 239 }
49 : Node PMJ => (LNN, NPJ) : QuickNode { left: 346, right: 93 }
50 : Node BXD => (MLL, QKQ) : QuickNode { left: 127, right: 381 }
51 : Node DGF => (FMX, PKP) : QuickNode { left: 456, right: 492 }
52 : Node RHQ => (RJH, KKN) : QuickNode { left: 590, right: 129 }
53 : Node MRG => (TNN, LLX) : QuickNode { left: 693, right: 58 }
54 : Node BBM => (VFP, VGF) : QuickNode { left: 177, right: 523 }
55 : Node PLP => (BBK, KFX) : QuickNode { left: 78, right: 270 }
56 : Node RSN => (SBN, DQF) : QuickNode { left: 643, right: 326 }
57 : Node XTP => (HMT, XNV) : QuickNode { left: 543, right: 532 }
58 : Node LLX => (KBF, TDV) : QuickNode { left: 37, right: 96 }
59 : Node KHR => (QGL, NCM) : QuickNode { left: 286, right: 288 }
60 : Node PFB => (SXR, BVC) : QuickNode { left: 393, right: 334 }
61 : Node NKP => (JTF, BJH) : QuickNode { left: 95, right: 479 }
62 : Node RPH => (RSN, VBM) : QuickNode { left: 56, right: 208 }
63 : Node HBL => (LVT, JXF) : QuickNode { left: 143, right: 8 }
64 : Node CBC => (LRB, QGN) : QuickNode { left: 47, right: 111 }
65 : Node FXH => (GCH, KBD) : QuickNode { left: 225, right: 577 }
66 : Node QTF => (KVL, DLS) : QuickNode { left: 342, right: 392 }
67 : Node RPQ => (FJB, RMD) : QuickNode { left: 450, right: 80 }
68 : Node SLD => (MSH, NSN) : QuickNode { left: 323, right: 715 }
69 : Node PXF => (QXM, HDF) : QuickNode { left: 17, right: 151 }
70 : Node QBJ => (RDQ, DJH) : QuickNode { left: 452, right: 337 }
71 : Node QPH => (RKJ, CSC) : QuickNode { left: 547, right: 76 }
72 : Node TVF => (JMC, MTV) : QuickNode { left: 426, right: 562 }
73 : Node MJM => (DLM, BQS) : QuickNode { left: 209, right: 257 }
74 : Node XQV => (LCD, QCL) : QuickNode { left: 311, right: 418 }
75 : Node KQH => (SJK, BPR) : QuickNode { left: 16, right: 626 }
76 : Node CSC => (BLD, PDP) : QuickNode { left: 126, right: 708 }
77 : Node BLP => (XVK, LJB) : QuickNode { left: 27, right: 154 }
78 : Node BBK => (DJT, LLJ) : QuickNode { left: 436, right: 123 }
79 : Node PSH => (GQH, RBQ) : QuickNode { left: 312, right: 360 }
80 : Node RMD => (XQV, KFT) : QuickNode { left: 74, right: 316 }
81 : Node TJJ => (QLV, HPG) : QuickNode { left: 106, right: 118 }
82 : Node STS => (BSB, TMP) : QuickNode { left: 146, right: 333 }
83 : Node FPN => (TCK, GLD) : QuickNode { left: 478, right: 453 }
84 : Node JPF => (VCS, CMQ) : QuickNode { left: 513, right: 685 }
85 : Node NVX => (TLD, GMD) : QuickNode { left: 115, right: 314 }
86 : Node XLV => (LKV, QNK) : QuickNode { left: 253, right: 99 }
87 : Node GSF => (CKS, BVB) : QuickNode { left: 325, right: 174 }
88 : Node QHR => (KTV, KPG) : QuickNode { left: 137, right: 435 }
89 : Node JRX => (FPN, DTC) : QuickNode { left: 83, right: 432 }
90 : Node KGC => (VQM, LTG) : QuickNode { left: 565, right: 186 }
91 : Node SSK => (NHP, NHP) : QuickNode { left: 686, right: 686 }
92 : Node GLN => (RMX, NGG) : QuickNode { left: 607, right: 338 }
93 : Node NPJ => (QRV, KTB) : QuickNode { left: 509, right: 588 }
94 : Node PCP => (XSF, BPL) : QuickNode { left: 189, right: 712 }
95 : Node JTF => (LSL, BHB) : QuickNode { left: 103, right: 414 }
96 : Node TDV => (HBL, XNM) : QuickNode { left: 63, right: 397 }
97 : Node FKV => (JVF, HKK) : QuickNode { left: 298, right: 676 }
98 : Node GSG => (QJP, CLF) : QuickNode { left: 7, right: 227 }
99 : Node QNK => (XNQ, CGQ) : QuickNode { left: 112, right: 483 }
100 : Node RQT => (QVQ, RCH) : QuickNode { left: 679, right: 691 }
101 : Node XNT => (RKM, XRV) : QuickNode { left: 332, right: 231 }
102 : Node JMM => (RBK, JPL) : QuickNode { left: 175, right: 442 }
103 : Node LSL => (NGH, KCN) : QuickNode { left: 706, right: 36 }
104 : Node QLQ => (TLV, KDN) : QuickNode { left: 508, right: 128 }
105 : Node KXR => (KRH, KRH) : QuickNode { left: 451, right: 451 }
106 : Node QLV => (GSR, BQV) : QuickNode { left: 541, right: 145 }
107 : Node PMG => (LPH, XFB) : QuickNode { left: 540, right: 727 }
108 : Node VNF => (LVQ, HHG) : QuickNode { left: 662, right: 259 }
109 : Node CSS => (RKK, RQN) : QuickNode { left: 378, right: 684 }
110 : Node HGR => (PVX, LFX) : QuickNode { left: 529, right: 567 }
111 : Node QGN => (MPR, TXD) : QuickNode { left: 574, right: 219 }
112 : Node XNQ => (GTJ, LXQ) : QuickNode { left: 630, right: 377 }
113 : Node QQC => (GQC, PLL) : QuickNode { left: 563, right: 125 }
114 : Node CKR => (KQH, HQD) : QuickNode { left: 75, right: 466 }
115 : Node TLD => (JLJ, VFL) : QuickNode { left: 464, right: 358 }
116 : Node XSD => (TTQ, LDQ) : QuickNode { left: 403, right: 497 }
117 : Node FXF => (BXS, LMQ) : QuickNode { left: 534, right: 424 }
118 : Node HPG => (GSR, BQV) : QuickNode { left: 541, right: 145 }
119 : Node LJC => (RNF, FNK) : QuickNode { left: 203, right: 591 }
120 : Node CCL => (DXF, HRM) : QuickNode { left: 391, right: 594 }
121 : Node FQR => (QBF, CLH) : QuickNode { left: 152, right: 471 }
122 : Node GHJ => (MPS, NRB) : QuickNode { left: 500, right: 667 }
123 : Node LLJ => (NVX, BTR) : QuickNode { left: 85, right: 281 }
124 : Node MCQ => (RTG, CTK) : QuickNode { left: 620, right: 527 }
125 : Node PLL => (DJD, FTV) : QuickNode { left: 445, right: 192 }
126 : Node BLD => (XGL, NDH) : QuickNode { left: 444, right: 428 }
127 : Node MLL => (NHV, PPJ) : QuickNode { left: 725, right: 210 }
128 : Node KDN => (LLS, DLN) : QuickNode { left: 420, right: 11 }
129 : Node KKN => (DCC, CCH) : QuickNode { left: 236, right: 702 }
130 : Node FHB => (TCJ, VLF) : QuickNode { left: 582, right: 664 }
131 : Node HCC => (RDN, TRJ) : QuickNode { left: 596, right: 206 }
132 : Node TGV => (TKF, CFG) : QuickNode { left: 711, right: 520 }
133 : Node TKB => (SVJ, KHH) : QuickNode { left: 713, right: 634 }
134 : Node QDN => (RXG, PFF) : QuickNode { left: 554, right: 293 }
135 : Node GQN => (RKT, NKK) : QuickNode { left: 538, right: 603 }
136 : Node FLV => (TLV, KDN) : QuickNode { left: 508, right: 128 }
137 : Node KTV => (LKK, VGH) : QuickNode { left: 636, right: 718 }
138 : Node XHQ => (JLX, SNS) : QuickNode { left: 638, right: 429 }
139 : Node MHN => (DHV, KMD) : QuickNode { left: 455, right: 495 }
140 : Node DLD => (SSQ, LDK) : QuickNode { left: 190, right: 680 }
141 : Node DKD => (CKR, JPC) : QuickNode { left: 114, right: 530 }
142 : Node SRD => (KPP, LFS) : QuickNode { left: 144, right: 660 }
143 : Node LVT => (PMG, NBN) : QuickNode { left: 107, right: 415 }
144 : Node KPP => (FLQ, XTX) : QuickNode { left: 223, right: 635 }
145 : Node BQV => (GLN, NQG) : QuickNode { left: 92, right: 696 }
146 : Node BSB => (KHR, FGL) : QuickNode { left: 59, right: 413 }
147 : Node HGC => (DBX, QTF) : QuickNode { left: 724, right: 66 }
148 : Node DSF => (RBQ, GQH) : QuickNode { left: 360, right: 312 }
149 : Node GRQ => (MVQ, RVP) : QuickNode { left: 583, right: 454 }
150 : Node JGT => (SFN, GQT) : QuickNode { left: 705, right: 188 }
151 : Node HDF => (SMX, HGC) : QuickNode { left: 457, right: 147 }
152 : Node QBF => (VKF, XHQ) : QuickNode { left: 368, right: 138 }
153 : Node QKM => (JTV, LPP) : QuickNode { left: 515, right: 458 }
154 : Node LJB => (QQC, KFK) : QuickNode { left: 113, right: 43 }
155 : Node NTH => (QQV, MHS) : QuickNode { left: 550, right: 207 }
156 : Node QTX => (FMX, PKP) : QuickNode { left: 456, right: 492 }
157 : Node HCQ => (FFT, CBC) : QuickNode { left: 656, right: 64 }
158 : Node XKJ => (DXR, PTS) : QuickNode { left: 32, right: 533 }
159 : Node BHH => (KPP, LFS) : QuickNode { left: 144, right: 660 }
160 : Node GRH => (QLQ, FLV) : QuickNode { left: 104, right: 136 }
161 : Node FNX => (MJX, PFZ) : QuickNode { left: 321, right: 744 }
162 : Node HQN => (CKS, BVB) : QuickNode { left: 325, right: 174 }
163 : Node SJV => (CGF, VKD) : QuickNode { left: 291, right: 627 }
164 : Node RDL => (QJV, MLX) : QuickNode { left: 264, right: 352 }
165 : Node MFR => (DMF, CFD) : QuickNode { left: 661, right: 669 }
166 : Node LPF => (SRD, BHH) : QuickNode { left: 142, right: 159 }
167 : Node HCP => (MPV, NVL) : QuickNode { left: 176, right: 440 }
168 : Node KNS => (VCD, LJL) : QuickNode { left: 330, right: 595 }
169 : Node CDX => (LLX, TNN) : QuickNode { left: 58, right: 693 }
170 : Node SGS => (KMC, RQK) : QuickNode { left: 242, right: 707 }
171 : Node HQS => (NKP, FRN) : QuickNode { left: 61, right: 197 }
172 : Node QVD => (VML, QHT) : QuickNode { left: 516, right: 30 }
173 : Node NRG => (LDS, SCH) : QuickNode { left: 522, right: 732 }
174 : Node BVB => (HCP, NVM) : QuickNode { left: 167, right: 416 }
175 : Node RBK => (QLB, RQT) : QuickNode { left: 19, right: 100 }
176 : Node MPV => (CGR, TSC) : QuickNode { left: 659, right: 443 }
177 : Node VFP => (JXP, QCM) : QuickNode { left: 361, right: 422 }
178 : Node QFS => (DFQ, FHB) : QuickNode { left: 302, right: 130 }
179 : Node FTK => (LSH, DDG) : QuickNode { left: 294, right: 45 }
180 : Node TJH => (KPL, KTR) : QuickNode { left: 229, right: 407 }
181 : Node HQF => (MQF, FTK) : QuickNode { left: 6, right: 179 }
182 : Node FGX => (HVP, KNS) : QuickNode { left: 185, right: 168 }
183 : Node DDK => (NTM, JNC) : QuickNode { left: 671, right: 480 }
184 : Node BJC => (SQK, RGB) : QuickNode { left: 375, right: 606 }
185 : Node HVP => (VCD, LJL) : QuickNode { left: 330, right: 595 }
186 : Node LTG => (RMV, CJC) : QuickNode { left: 230, right: 537 }
187 : Node BNR => (CSS, RBN) : QuickNode { left: 109, right: 689 }
188 : Node GQT => (LCN, DTK) : QuickNode { left: 289, right: 305 }
189 : Node XSF => (BGT, FCN) : QuickNode { left: 555, right: 336 }
190 : Node SSQ => (KTL, JMR) : QuickNode { left: 254, right: 720 }
191 : Node RNH => (BXH, BXH) : QuickNode { left: 247, right: 247 }
192 : Node FTV => (CMM, PBL) : QuickNode { left: 505, right: 699 }
193 : Node QRK => (TSF, QFS) : QuickNode { left: 322, right: 178 }
194 : Node CLR => (NFS, PGK) : QuickNode { left: 309, right: 26 }
195 : Node SRJ => (PFV, SHX) : QuickNode { left: 362, right: 585 }
196 : Node FQT => (QKT, BJB) : QuickNode { left: 283, right: 535 }
197 : Node FRN => (BJH, JTF) : QuickNode { left: 479, right: 95 }
198 : Node RCN => (NRV, CCL) : QuickNode { left: 593, right: 120 }
199 : Node QTM => (CKR, JPC) : QuickNode { left: 114, right: 530 }
200 : Node JHT => (HRC, NVR) : QuickNode { left: 717, right: 586 }
201 : Node KVB => (KRH, KKT) : QuickNode { left: 451, right: 581 }
202 : Node HJG => (GHN, GHN) : QuickNode { left: 348, right: 348 }
203 : Node RNF => (QFF, CKV) : QuickNode { left: 274, right: 646 }
204 : Node PTT => (VNT, FNX) : QuickNode { left: 389, right: 161 }
205 : Node GRB => (SVJ, KHH) : QuickNode { left: 713, right: 634 }
206 : Node TRJ => (PVJ, QKP) : QuickNode { left: 496, right: 318 }
207 : Node MHS => (FCV, JXD) : QuickNode { left: 400, right: 439 }
208 : Node VBM => (SBN, DQF) : QuickNode { left: 643, right: 326 }
209 : Node DLM => (VNH, SCJ) : QuickNode { left: 260, right: 14 }
210 : Node PPJ => (DMH, PHJ) : QuickNode { left: 447, right: 681 }
211 : Node QJN => (LSX, KBN) : QuickNode { left: 271, right: 572 }
212 : Node HXV => (SMH, BJP) : QuickNode { left: 308, right: 388 }
213 : Node GVL => (VMV, DKF) : QuickNode { left: 373, right: 587 }
214 : Node QCG => (FKV, NVD) : QuickNode { left: 97, right: 474 }
215 : Node FNM => (XRV, RKM) : QuickNode { left: 231, right: 332 }
216 : Node JQJ => (NVT, HGR) : QuickNode { left: 511, right: 110 }
217 : Node KVX => (GRG, PMJ) : QuickNode { left: 657, right: 49 }
218 : Node JLV => (SMG, RPH) : QuickNode { left: 609, right: 62 }
219 : Node TXD => (MFN, HQG) : QuickNode { left: 510, right: 734 }
220 : Node TLJ => (FHD, MHN) : QuickNode { left: 617, right: 139 }
221 : Node RPV => (GKH, BPT) : QuickNode { left: 486, right: 488 }
222 : Node CPR => (JLH, PLC) : QuickNode { left: 39, right: 491 }
223 : Node FLQ => (TPR, LGG) : QuickNode { left: 269, right: 673 }
224 : Node BTF => (HGR, NVT) : QuickNode { left: 110, right: 511 }
225 : Node GCH => (QPT, FDV) : QuickNode { left: 473, right: 612 }
226 : Node JCF => (GHM, NKS) : QuickNode { left: 576, right: 250 }
227 : Node CLF => (PCT, XKJ) : QuickNode { left: 22, right: 158 }
228 : Node RMT => (QKM, XCP) : QuickNode { left: 153, right: 556 }
229 : Node KPL => (DJB, VLV) : QuickNode { left: 238, right: 359 }
230 : Node RMV => (NMS, HCC) : QuickNode { left: 278, right: 131 }
231 : Node XRV => (VPH, PHH) : QuickNode { left: 301, right: 398 }
232 : Node HBB => (XKH, FBQ) : QuickNode { left: 672, right: 35 }
233 : Node PXB => (QBF, CLH) : QuickNode { left: 152, right: 471 }
234 : Node HMR => (PCP, LMJ) : QuickNode { left: 94, right: 665 }
235 : Node KCT => (PFS, PFB) : QuickNode { left: 41, right: 60 }
236 : Node DCC => (MBP, BJC) : QuickNode { left: 255, right: 184 }
237 : Node VFV => (VBD, HQS) : QuickNode { left: 571, right: 171 }
238 : Node DJB => (BQX, SLD) : QuickNode { left: 493, right: 68 }
239 : Node MFS => (VML, QHT) : QuickNode { left: 516, right: 30 }
240 : Node RPC => (PHR, JFD) : QuickNode { left: 641, right: 396 }
241 : Node RDS => (LFC, RNK) : QuickNode { left: 285, right: 387 }
242 : Node KMC => (RPR, NRL) : QuickNode { left: 404, right: 395 }
243 : Node CJD => (VJN, GKK) : QuickNode { left: 721, right: 668 }
244 : Node VST => (VCS, CMQ) : QuickNode { left: 513, right: 685 }
245 : Node VMC => (RPC, MCV) : QuickNode { left: 240, right: 521 }
246 : Node VJV => (XTP, DRK) : QuickNode { left: 57, right: 570 }
247 : Node BXH => (RXT, BLP) : QuickNode { left: 344, right: 77 }
248 : Node PNQ => (DSF, PSH) : QuickNode { left: 148, right: 79 }
249 : Node RJJ => (FXH, QLX) : QuickNode { left: 65, right: 390 }
250 : Node NKS => (QDQ, DPP) : QuickNode { left: 251, right: 328 }
251 : Node QDQ => (SJV, MRP) : QuickNode { left: 163, right: 433 }
252 : Node HQQ => (CJD, DVT) : QuickNode { left: 243, right: 687 }
253 : Node LKV => (CGQ, XNQ) : QuickNode { left: 483, right: 112 }
254 : Node KTL => (HFF, FPS) : QuickNode { left: 319, right: 558 }
255 : Node MBP => (RGB, SQK) : QuickNode { left: 606, right: 375 }
256 : Node MQQ => (HCQ, MDL) : QuickNode { left: 157, right: 730 }
257 : Node BQS => (SCJ, VNH) : QuickNode { left: 14, right: 260 }
258 : Node NRT => (FJD, HTS) : QuickNode { left: 371, right: 315 }
259 : Node HHG => (RTC, RPQ) : QuickNode { left: 503, right: 67 }
260 : Node VNH => (XSD, HQH) : QuickNode { left: 116, right: 600 }
261 : Node QTS => (QTG, MHD) : QuickNode { left: 714, right: 276 }
262 : Node DJQ => (NRG, QCD) : QuickNode { left: 173, right: 710 }
263 : Node MDX => (BPT, GKH) : QuickNode { left: 488, right: 486 }
264 : Node QJV => (QQP, VLJ) : QuickNode { left: 737, right: 279 }
265 : Node HBD => (HBB, CKC) : QuickNode { left: 232, right: 584 }
266 : Node GBF => (HJG, FPV) : QuickNode { left: 202, right: 698 }
267 : Node VDC => (JFJ, VNF) : QuickNode { left: 658, right: 108 }
268 : Node MPH => (PFV, SHX) : QuickNode { left: 362, right: 585 }
269 : Node TPR => (BXD, FVX) : QuickNode { left: 50, right: 364 }
270 : Node KFX => (DJT, LLJ) : QuickNode { left: 436, right: 123 }
271 : Node LSX => (VKN, STS) : QuickNode { left: 525, right: 82 }
272 : Node HJL => (KFX, BBK) : QuickNode { left: 270, right: 78 }
273 : Node QLT => (KGC, DMM) : QuickNode { left: 90, right: 34 }
274 : Node QFF => (BJM, QCG) : QuickNode { left: 560, right: 214 }
275 : Node DVM => (GCD, FSC) : QuickNode { left: 642, right: 446 }
276 : Node MHD => (JCF, JPJ) : QuickNode { left: 226, right: 313 }
277 : Node DPQ => (JJX, GNL) : QuickNode { left: 357, right: 654 }
278 : Node NMS => (TRJ, RDN) : QuickNode { left: 206, right: 596 }
279 : Node VLJ => (XJB, HSJ) : QuickNode { left: 372, right: 589 }
280 : Node JSP => (MHN, FHD) : QuickNode { left: 139, right: 617 }
281 : Node BTR => (GMD, TLD) : QuickNode { left: 314, right: 115 }
282 : Node TTD => (SPC, DFJ) : QuickNode { left: 383, right: 663 }
283 : Node QKT => (XPV, BVJ) : QuickNode { left: 650, right: 666 }
284 : Node MKK => (HCQ, MDL) : QuickNode { left: 157, right: 730 }
285 : Node LFC => (LSS, GQN) : QuickNode { left: 345, right: 135 }
286 : Node QGL => (RPG, HGJ) : QuickNode { left: 688, right: 601 }
287 : Node JDT => (FPN, DTC) : QuickNode { left: 83, right: 432 }
288 : Node NCM => (RPG, HGJ) : QuickNode { left: 688, right: 601 }
289 : Node LCN => (QLT, MTG) : QuickNode { left: 273, right: 12 }
290 : Node VGS => (VJV, SRT) : QuickNode { left: 246, right: 339 }
291 : Node CGF => (FXF, STT) : QuickNode { left: 117, right: 703 }
292 : Node KQS => (PFB, PFS) : QuickNode { left: 60, right: 41 }
293 : Node PFF => (DLD, MRJ) : QuickNode { left: 140, right: 485 }
294 : Node LSH => (QTS, VRJ) : QuickNode { left: 261, right: 501 }
295 : Node FGF => (MPH, SRJ) : QuickNode { left: 268, right: 195 }
296 : Node BJG => (TVF, BDN) : QuickNode { left: 72, right: 351 }
297 : Node HQR => (CXG, CPR) : QuickNode { left: 367, right: 222 }
298 : Node JVF => (RGM, NCG) : QuickNode { left: 580, right: 549 }
299 : Node SNP => (BLN, DFD) : QuickNode { left: 363, right: 303 }
300 : Node DQH => (GSC, CFT) : QuickNode { left: 481, right: 723 }
301 : Node VPH => (CRN, CHT) : QuickNode { left: 692, right: 631 }
302 : Node DFQ => (VLF, TCJ) : QuickNode { left: 664, right: 582 }
303 : Node DFD => (HQR, QDF) : QuickNode { left: 297, right: 477 }
304 : Node NJH => (RXG, PFF) : QuickNode { left: 554, right: 293 }
305 : Node DTK => (QLT, MTG) : QuickNode { left: 273, right: 12 }
306 : Node MJJ => (DJH, RDQ) : QuickNode { left: 337, right: 452 }
307 : Node GGB => (CFT, GSC) : QuickNode { left: 723, right: 481 }
308 : Node SMH => (RHQ, RJX) : QuickNode { left: 52, right: 40 }
309 : Node NFS => (SNP, QLP) : QuickNode { left: 299, right: 350 }
310 : Node LNV => (XLR, KQF) : QuickNode { left: 598, right: 683 }
311 : Node LCD => (FNM, XNT) : QuickNode { left: 215, right: 101 }
312 : Node GQH => (JDT, JRX) : QuickNode { left: 287, right: 89 }
313 : Node JPJ => (GHM, NKS) : QuickNode { left: 576, right: 250 }
314 : Node GMD => (VFL, JLJ) : QuickNode { left: 358, right: 464 }
315 : Node HTS => (KXR, KVB) : QuickNode { left: 105, right: 201 }
316 : Node KFT => (LCD, QCL) : QuickNode { left: 311, right: 418 }
317 : Node SGH => (NVR, HRC) : QuickNode { left: 586, right: 717 }
318 : Node QKP => (MQD, MLM) : QuickNode { left: 437, right: 487 }
319 : Node HFF => (MGM, KSX) : QuickNode { left: 461, right: 623 }
320 : Node HJM => (KBN, LSX) : QuickNode { left: 572, right: 271 }
321 : Node MJX => (VHC, PXF) : QuickNode { left: 518, right: 69 }
322 : Node TSF => (FHB, DFQ) : QuickNode { left: 130, right: 302 }
323 : Node MSH => (GFM, JHC) : QuickNode { left: 618, right: 653 }
324 : Node VBG => (HJM, QJN) : QuickNode { left: 320, right: 211 }
325 : Node CKS => (HCP, NVM) : QuickNode { left: 167, right: 416 }
326 : Node DQF => (LJC, KXM) : QuickNode { left: 119, right: 427 }
327 : Node FVP => (FJD, HTS) : QuickNode { left: 371, right: 315 }
328 : Node DPP => (SJV, MRP) : QuickNode { left: 163, right: 433 }
329 : Node FKM => (CSS, RBN) : QuickNode { left: 109, right: 689 }
330 : Node VCD => (FCH, GBX) : QuickNode { left: 709, right: 670 }
331 : Node DJV => (VMC, HVC) : QuickNode { left: 245, right: 566 }
332 : Node RKM => (VPH, PHH) : QuickNode { left: 301, right: 398 }
333 : Node TMP => (KHR, FGL) : QuickNode { left: 59, right: 413 }
334 : Node BVC => (TLJ, JSP) : QuickNode { left: 220, right: 280 }
335 : Node SRV => (HQS, VBD) : QuickNode { left: 171, right: 571 }
336 : Node FCN => (DHM, VDX) : QuickNode { left: 42, right: 343 }
337 : Node DJH => (FBG, MCQ) : QuickNode { left: 645, right: 124 }
338 : Node NGG => (RPL, DFV) : QuickNode { left: 421, right: 354 }
339 : Node SRT => (XTP, DRK) : QuickNode { left: 57, right: 570 }
340 : Node RMN => (QTD, JGS) : QuickNode { left: 399, right: 531 }
341 : Node MLH => (MQJ, VDR) : QuickNode { left: 622, right: 697 }
342 : Node KVL => (VFV, SRV) : QuickNode { left: 237, right: 335 }
343 : Node VDX => (FRV, HXV) : QuickNode { left: 639, right: 212 }
344 : Node RXT => (LJB, XVK) : QuickNode { left: 154, right: 27 }
345 : Node LSS => (RKT, NKK) : QuickNode { left: 538, right: 603 }
346 : Node LNN => (KTB, QRV) : QuickNode { left: 588, right: 509 }
347 : Node BCC => (CHL, QXP) : QuickNode { left: 484, right: 599 }
348 : Node GHN => (XBS, XBS) : QuickNode { left: 633, right: 633 }
349 : Node FCK => (FKM, BNR) : QuickNode { left: 329, right: 187 }
350 : Node QLP => (BLN, DFD) : QuickNode { left: 363, right: 303 }
351 : Node BDN => (JMC, MTV) : QuickNode { left: 426, right: 562 }
352 : Node MLX => (VLJ, QQP) : QuickNode { left: 279, right: 737 }
353 : Node RDH => (VNT, VNT) : QuickNode { left: 389, right: 389 }
354 : Node DFV => (JKJ, KDX) : QuickNode { left: 15, right: 370 }
355 : Node DXG => (JLV, MVL) : QuickNode { left: 218, right: 559 }
356 : Node TCF => (DSF, PSH) : QuickNode { left: 148, right: 79 }
357 : Node JJX => (MKM, TJJ) : QuickNode { left: 374, right: 81 }
358 : Node VFL => (GGB, DQH) : QuickNode { left: 307, right: 300 }
359 : Node VLV => (SLD, BQX) : QuickNode { left: 68, right: 493 }
360 : Node RBQ => (JDT, JRX) : QuickNode { left: 287, right: 89 }
361 : Node JXP => (QXB, QVT) : QuickNode { left: 411, right: 46 }
362 : Node PFV => (STX, XHF) : QuickNode { left: 644, right: 514 }
363 : Node BLN => (QDF, HQR) : QuickNode { left: 477, right: 297 }
364 : Node FVX => (QKQ, MLL) : QuickNode { left: 381, right: 127 }
365 : Node QTP => (DJV, GMN) : QuickNode { left: 331, right: 476 }
366 : Node JLP => (NJF, MFR) : QuickNode { left: 695, right: 165 }
367 : Node CXG => (PLC, JLH) : QuickNode { left: 491, right: 39 }
368 : Node VKF => (JLX, SNS) : QuickNode { left: 638, right: 429 }
369 : Node QQT => (GMN, DJV) : QuickNode { left: 476, right: 331 }
370 : Node KDX => (MHH, PMX) : QuickNode { left: 542, right: 625 }
371 : Node FJD => (KXR, KXR) : QuickNode { left: 105, right: 105 }
372 : Node XJB => (PHB, JTH) : QuickNode { left: 504, right: 602 }
373 : Node VMV => (RCN, XJS) : QuickNode { left: 198, right: 18 }
374 : Node MKM => (HPG, QLV) : QuickNode { left: 118, right: 106 }
375 : Node SQK => (GBF, JCS) : QuickNode { left: 266, right: 716 }
376 : Node PMT => (SGQ, DXG) : QuickNode { left: 394, right: 355 }
377 : Node LXQ => (GRB, TKB) : QuickNode { left: 205, right: 133 }
378 : Node RKK => (SSK, SSK) : QuickNode { left: 91, right: 91 }
379 : Node QDP => (QTD, JGS) : QuickNode { left: 399, right: 531 }
380 : Node VQC => (KQF, XLR) : QuickNode { left: 683, right: 598 }
381 : Node QKQ => (PPJ, NHV) : QuickNode { left: 210, right: 725 }
382 : Node TXM => (JLP, JCJ) : QuickNode { left: 366, right: 544 }
383 : Node SPC => (LRR, SXC) : QuickNode { left: 546, right: 28 }
384 : Node BHG => (KFL, BCC) : QuickNode { left: 430, right: 347 }
385 : Node QBK => (VNF, JFJ) : QuickNode { left: 108, right: 658 }
386 : Node BPB => (LBJ, JGT) : QuickNode { left: 494, right: 150 }
387 : Node RNK => (LSS, GQN) : QuickNode { left: 345, right: 135 }
388 : Node BJP => (RHQ, RJX) : QuickNode { left: 52, right: 40 }
389 : Node VNT => (MJX, MJX) : QuickNode { left: 321, right: 321 }
390 : Node QLX => (GCH, KBD) : QuickNode { left: 225, right: 577 }
391 : Node DXF => (RNH, RNH) : QuickNode { left: 191, right: 191 }
392 : Node DLS => (VFV, SRV) : QuickNode { left: 237, right: 335 }
393 : Node SXR => (TLJ, JSP) : QuickNode { left: 220, right: 280 }
394 : Node SGQ => (JLV, MVL) : QuickNode { left: 218, right: 559 }
395 : Node NRL => (XPP, XGM) : QuickNode { left: 728, right: 475 }
396 : Node JFD => (LVD, LTQ) : QuickNode { left: 736, right: 704 }
397 : Node XNM => (JXF, LVT) : QuickNode { left: 8, right: 143 }
398 : Node PHH => (CHT, CRN) : QuickNode { left: 631, right: 692 }
399 : Node QTD => (CTJ, LPF) : QuickNode { left: 470, right: 166 }
400 : Node FCV => (GTC, CKJ) : QuickNode { left: 640, right: 438 }
401 : Node QRG => (JLP, JCJ) : QuickNode { left: 366, right: 544 }
402 : Node DKS => (KPL, KTR) : QuickNode { left: 229, right: 407 }
403 : Node TTQ => (BFV, LVR) : QuickNode { left: 569, right: 417 }
404 : Node RPR => (XGM, XPP) : QuickNode { left: 475, right: 728 }
405 : Node DVS => (FTH, FFG) : QuickNode { left: 726, right: 619 }
406 : Node RRH => (NJH, QDN) : QuickNode { left: 304, right: 134 }
407 : Node KTR => (DJB, VLV) : QuickNode { left: 238, right: 359 }
408 : Node KQM => (BJV, MND) : QuickNode { left: 731, right: 553 }
409 : Node GKS => (BXH, QCZ) : QuickNode { left: 247, right: 743 }
410 : Node FSV => (MPS, NRB) : QuickNode { left: 500, right: 667 }
411 : Node QXB => (DJQ, JCK) : QuickNode { left: 262, right: 9 }
412 : Node FHX => (QFS, TSF) : QuickNode { left: 178, right: 322 }
413 : Node FGL => (QGL, NCM) : QuickNode { left: 286, right: 288 }
414 : Node BHB => (KCN, NGH) : QuickNode { left: 36, right: 706 }
415 : Node NBN => (LPH, XFB) : QuickNode { left: 540, right: 727 }
416 : Node NVM => (NVL, MPV) : QuickNode { left: 440, right: 176 }
417 : Node LVR => (CNB, FGX) : QuickNode { left: 44, right: 182 }
418 : Node QCL => (FNM, XNT) : QuickNode { left: 215, right: 101 }
419 : Node XRR => (MTB, HMR) : QuickNode { left: 738, right: 234 }
420 : Node LLS => (TXM, QRG) : QuickNode { left: 382, right: 401 }
421 : Node RPL => (JKJ, KDX) : QuickNode { left: 15, right: 370 }
422 : Node QCM => (QVT, QXB) : QuickNode { left: 46, right: 411 }
423 : Node QVF => (BQS, DLM) : QuickNode { left: 257, right: 209 }
424 : Node LMQ => (LMK, BVF) : QuickNode { left: 31, right: 524 }
425 : Node BLS => (CQK, GTG) : QuickNode { left: 611, right: 675 }
426 : Node JMC => (PLP, HJL) : QuickNode { left: 55, right: 272 }
427 : Node KXM => (RNF, FNK) : QuickNode { left: 203, right: 591 }
428 : Node NDH => (FHJ, GML) : QuickNode { left: 462, right: 468 }
429 : Node SNS => (VJK, FMJ) : QuickNode { left: 526, right: 739 }
430 : Node KFL => (QXP, CHL) : QuickNode { left: 599, right: 484 }
431 : Node FSD => (XNH, MJF) : QuickNode { left: 592, right: 548 }
432 : Node DTC => (GLD, TCK) : QuickNode { left: 453, right: 478 }
433 : Node MRP => (CGF, VKD) : QuickNode { left: 291, right: 627 }
434 : Node JHX => (CJD, DVT) : QuickNode { left: 243, right: 687 }
435 : Node KPG => (LKK, VGH) : QuickNode { left: 636, right: 718 }
436 : Node DJT => (NVX, BTR) : QuickNode { left: 85, right: 281 }
437 : Node MQD => (FQT, KDB) : QuickNode { left: 196, right: 20 }
438 : Node CKJ => (BLS, CGP) : QuickNode { left: 425, right: 729 }
439 : Node JXD => (GTC, CKJ) : QuickNode { left: 640, right: 438 }
440 : Node NVL => (CGR, TSC) : QuickNode { left: 659, right: 443 }
441 : Node PKV => (DBR, PGB) : QuickNode { left: 674, right: 579 }
442 : Node JPL => (QLB, RQT) : QuickNode { left: 19, right: 100 }
443 : Node TSC => (FMS, KRS) : QuickNode { left: 465, right: 448 }
444 : Node XGL => (GML, FHJ) : QuickNode { left: 468, right: 462 }
445 : Node DJD => (PBL, CMM) : QuickNode { left: 699, right: 505 }
446 : Node FSC => (BFG, NTH) : QuickNode { left: 539, right: 155 }
447 : Node DMH => (PBN, HND) : QuickNode { left: 690, right: 472 }
448 : Node KRS => (FQR, PXB) : QuickNode { left: 121, right: 233 }
449 : Node LLM => (GMX, VLX) : QuickNode { left: 651, right: 682 }
450 : Node FJB => (XQV, KFT) : QuickNode { left: 74, right: 316 }
451 : Node KRH => (QHR, QHR) : QuickNode { left: 88, right: 88 }
452 : Node RDQ => (MCQ, FBG) : QuickNode { left: 124, right: 645 }
453 : Node GLD => (VST, JPF) : QuickNode { left: 244, right: 84 }
454 : Node RVP => (HBD, RBC) : QuickNode { left: 265, right: 632 }
455 : Node DHV => (RJJ, KFV) : QuickNode { left: 249, right: 13 }
456 : Node FMX => (RFL, GSG) : QuickNode { left: 694, right: 98 }
457 : Node SMX => (DBX, QTF) : QuickNode { left: 724, right: 66 }
458 : Node LPP => (FSD, PHM) : QuickNode { left: 431, right: 528 }
459 : Node TDG => (MKK, MQQ) : QuickNode { left: 284, right: 256 }
460 : Node HPL => (BDN, TVF) : QuickNode { left: 351, right: 72 }
461 : Node MGM => (RDH, RDH) : QuickNode { left: 353, right: 353 }
462 : Node FHJ => (XFJ, GVL) : QuickNode { left: 507, right: 213 }
463 : Node TQB => (VFP, VGF) : QuickNode { left: 177, right: 523 }
464 : Node JLJ => (DQH, GGB) : QuickNode { left: 300, right: 307 }
465 : Node FMS => (FQR, PXB) : QuickNode { left: 121, right: 233 }
466 : Node HQD => (BPR, SJK) : QuickNode { left: 626, right: 16 }
467 : Node VXR => (XQX, VBG) : QuickNode { left: 573, right: 324 }
468 : Node GML => (XFJ, GVL) : QuickNode { left: 507, right: 213 }
469 : Node GCS => (RKJ, CSC) : QuickNode { left: 547, right: 76 }
470 : Node CTJ => (SRD, BHH) : QuickNode { left: 142, right: 159 }
471 : Node CLH => (XHQ, VKF) : QuickNode { left: 138, right: 368 }
472 : Node HND => (RDL, PXS) : QuickNode { left: 164, right: 621 }
473 : Node QPT => (RRH, CKQ) : QuickNode { left: 406, right: 613 }
474 : Node NVD => (HKK, JVF) : QuickNode { left: 676, right: 298 }
475 : Node XGM => (VFK, MLH) : QuickNode { left: 637, right: 341 }
476 : Node GMN => (HVC, VMC) : QuickNode { left: 566, right: 245 }
477 : Node QDF => (CXG, CPR) : QuickNode { left: 367, right: 222 }
478 : Node TCK => (JPF, VST) : QuickNode { left: 84, right: 244 }
479 : Node BJH => (LSL, BHB) : QuickNode { left: 103, right: 414 }
480 : Node JNC => (BPB, SLZ) : QuickNode { left: 386, right: 742 }
481 : Node GSC => (QVF, MJM) : QuickNode { left: 423, right: 73 }
482 : Node XHG => (SRJ, MPH) : QuickNode { left: 195, right: 268 }
483 : Node CGQ => (GTJ, LXQ) : QuickNode { left: 630, right: 377 }
484 : Node CHL => (TGV, HPX) : QuickNode { left: 132, right: 722 }
485 : Node MRJ => (LDK, SSQ) : QuickNode { left: 680, right: 190 }
486 : Node GKH => (VQC, LNV) : QuickNode { left: 380, right: 310 }
487 : Node MLM => (FQT, KDB) : QuickNode { left: 196, right: 20 }
488 : Node BPT => (LNV, VQC) : QuickNode { left: 310, right: 380 }
489 : Node BXT => (TKD, ZZZ) : QuickNode { left: 552, right: 741 }
490 : Node PMP => (NHP, KJP) : QuickNode { left: 686, right: 38 }
491 : Node PLC => (XLV, CKG) : QuickNode { left: 86, right: 677 }
492 : Node PKP => (RFL, GSG) : QuickNode { left: 694, right: 98 }
493 : Node BQX => (MSH, NSN) : QuickNode { left: 323, right: 715 }
494 : Node LBJ => (SFN, GQT) : QuickNode { left: 705, right: 188 }
495 : Node KMD => (KFV, RJJ) : QuickNode { left: 13, right: 249 }
496 : Node PVJ => (MQD, MLM) : QuickNode { left: 437, right: 487 }
497 : Node LDQ => (LVR, BFV) : QuickNode { left: 417, right: 569 }
498 : Node SLS => (PGB, DBR) : QuickNode { left: 579, right: 674 }
499 : Node VTP => (HQQ, JHX) : QuickNode { left: 252, right: 434 }
500 : Node MPS => (QTX, DGF) : QuickNode { left: 156, right: 51 }
501 : Node VRJ => (QTG, MHD) : QuickNode { left: 714, right: 276 }
502 : Node HBH => (HNG, FKF) : QuickNode { left: 29, right: 648 }
503 : Node RTC => (RMD, FJB) : QuickNode { left: 80, right: 450 }
504 : Node PHB => (LPD, LPD) : QuickNode { left: 10, right: 10 }
505 : Node CMM => (DMS, KFB) : QuickNode { left: 48, right: 575 }
506 : Node QVR => (MKK, MQQ) : QuickNode { left: 284, right: 256 }
507 : Node XFJ => (DKF, VMV) : QuickNode { left: 587, right: 373 }
508 : Node TLV => (DLN, LLS) : QuickNode { left: 11, right: 420 }
509 : Node QRV => (SCL, BSJ) : QuickNode { left: 517, right: 561 }
510 : Node MFN => (GHK, RRL) : QuickNode { left: 33, right: 614 }
511 : Node NVT => (LFX, PVX) : QuickNode { left: 567, right: 529 }
512 : Node FVL => (HMR, MTB) : QuickNode { left: 234, right: 738 }
513 : Node VCS => (TQB, BBM) : QuickNode { left: 463, right: 54 }
514 : Node XHF => (QBK, VDC) : QuickNode { left: 385, right: 267 }
515 : Node JTV => (FSD, PHM) : QuickNode { left: 431, right: 528 }
516 : Node VML => (TTD, LBH) : QuickNode { left: 282, right: 652 }
517 : Node SCL => (DKS, TJH) : QuickNode { left: 402, right: 180 }
518 : Node VHC => (QXM, HDF) : QuickNode { left: 17, right: 151 }
519 : Node LPV => (GMX, VLX) : QuickNode { left: 651, right: 682 }
520 : Node CFG => (BTF, JQJ) : QuickNode { left: 224, right: 216 }
521 : Node MCV => (PHR, JFD) : QuickNode { left: 641, right: 396 }
522 : Node LDS => (FGF, XHG) : QuickNode { left: 295, right: 482 }
523 : Node VGF => (QCM, JXP) : QuickNode { left: 422, right: 361 }
524 : Node BVF => (QQT, QTP) : QuickNode { left: 369, right: 365 }
525 : Node VKN => (TMP, BSB) : QuickNode { left: 333, right: 146 }
526 : Node VJK => (KQM, DHQ) : QuickNode { left: 408, right: 604 }
527 : Node CTK => (GSF, HQN) : QuickNode { left: 87, right: 162 }
528 : Node PHM => (MJF, XNH) : QuickNode { left: 548, right: 592 }
529 : Node PVX => (MHK, SXL) : QuickNode { left: 536, right: 628 }
530 : Node JPC => (KQH, HQD) : QuickNode { left: 75, right: 466 }
531 : Node JGS => (CTJ, LPF) : QuickNode { left: 470, right: 166 }
532 : Node XNV => (CLR, BLB) : QuickNode { left: 194, right: 649 }
533 : Node PTS => (KCT, KQS) : QuickNode { left: 235, right: 292 }
534 : Node BXS => (BVF, LMK) : QuickNode { left: 524, right: 31 }
535 : Node BJB => (XPV, BVJ) : QuickNode { left: 650, right: 666 }
536 : Node MHK => (VTP, KKX) : QuickNode { left: 499, right: 735 }
537 : Node CJC => (NMS, HCC) : QuickNode { left: 278, right: 131 }
538 : Node RKT => (PMT, FCX) : QuickNode { left: 376, right: 21 }
539 : Node BFG => (QQV, MHS) : QuickNode { left: 550, right: 207 }
540 : Node LPH => (HDD, DVM) : QuickNode { left: 629, right: 275 }
541 : Node GSR => (GLN, NQG) : QuickNode { left: 92, right: 696 }
542 : Node MHH => (VGS, TRH) : QuickNode { left: 290, right: 25 }
543 : Node HMT => (BLB, CLR) : QuickNode { left: 649, right: 194 }
544 : Node JCJ => (NJF, MFR) : QuickNode { left: 695, right: 165 }
545 : Node MDK => (RPV, MDX) : QuickNode { left: 221, right: 263 }
546 : Node LRR => (DPQ, XTB) : QuickNode { left: 277, right: 700 }
547 : Node RKJ => (PDP, BLD) : QuickNode { left: 708, right: 126 }
548 : Node MJF => (RXX, SGS) : QuickNode { left: 733, right: 170 }
549 : Node NCG => (NRT, FVP) : QuickNode { left: 258, right: 327 }
550 : Node QQV => (JXD, FCV) : QuickNode { left: 439, right: 400 }
551 : Node MJQ => (BCC, KFL) : QuickNode { left: 347, right: 430 }
552 : Node TKD => (MJJ, QBJ) : QuickNode { left: 306, right: 70 }
553 : Node MND => (MDK, KBG) : QuickNode { left: 545, right: 610 }
554 : Node RXG => (MRJ, DLD) : QuickNode { left: 485, right: 140 }
555 : Node BGT => (DHM, VDX) : QuickNode { left: 42, right: 343 }
556 : Node XCP => (LPP, JTV) : QuickNode { left: 458, right: 515 }
557 : Node TRS => (QPH, GCS) : QuickNode { left: 71, right: 469 }
558 : Node FPS => (MGM, KSX) : QuickNode { left: 461, right: 623 }
559 : Node MVL => (SMG, RPH) : QuickNode { left: 609, right: 62 }
560 : Node BJM => (NVD, FKV) : QuickNode { left: 474, right: 97 }
561 : Node BSJ => (TJH, DKS) : QuickNode { left: 180, right: 402 }
562 : Node MTV => (PLP, HJL) : QuickNode { left: 55, right: 272 }
563 : Node GQC => (FTV, DJD) : QuickNode { left: 192, right: 445 }
564 : Node CQL => (FTK, MQF) : QuickNode { left: 179, right: 6 }
565 : Node VQM => (RMV, CJC) : QuickNode { left: 230, right: 537 }
566 : Node HVC => (MCV, RPC) : QuickNode { left: 521, right: 240 }
567 : Node LFX => (MHK, SXL) : QuickNode { left: 536, right: 628 }
568 : Node BJQ => (LFC, RNK) : QuickNode { left: 285, right: 387 }
569 : Node BFV => (FGX, CNB) : QuickNode { left: 182, right: 44 }
570 : Node DRK => (HMT, XNV) : QuickNode { left: 543, right: 532 }
571 : Node VBD => (NKP, FRN) : QuickNode { left: 61, right: 197 }
572 : Node KBN => (STS, VKN) : QuickNode { left: 82, right: 525 }
573 : Node XQX => (HJM, QJN) : QuickNode { left: 320, right: 211 }
574 : Node MPR => (HQG, MFN) : QuickNode { left: 734, right: 510 }
575 : Node KFB => (MFS, QVD) : QuickNode { left: 239, right: 172 }
576 : Node GHM => (QDQ, DPP) : QuickNode { left: 251, right: 328 }
577 : Node KBD => (QPT, FDV) : QuickNode { left: 473, right: 612 }
578 : Node MVH => (FVL, XRR) : QuickNode { left: 512, right: 419 }
579 : Node PGB => (RVG, TRS) : QuickNode { left: 615, right: 557 }
580 : Node RGM => (NRT, FVP) : QuickNode { left: 258, right: 327 }
581 : Node KKT => (QHR, GNZ) : QuickNode { left: 88, right: 745 }
582 : Node TCJ => (RDS, BJQ) : QuickNode { left: 241, right: 568 }
583 : Node MVQ => (HBD, RBC) : QuickNode { left: 265, right: 632 }
584 : Node CKC => (XKH, FBQ) : QuickNode { left: 672, right: 35 }
585 : Node SHX => (XHF, STX) : QuickNode { left: 514, right: 644 }
586 : Node NVR => (RFF, GRH) : QuickNode { left: 605, right: 160 }
587 : Node DKF => (RCN, XJS) : QuickNode { left: 198, right: 18 }
588 : Node KTB => (BSJ, SCL) : QuickNode { left: 561, right: 517 }
589 : Node HSJ => (PHB, JTH) : QuickNode { left: 504, right: 602 }
590 : Node RJH => (DCC, CCH) : QuickNode { left: 236, right: 702 }
591 : Node FNK => (QFF, CKV) : QuickNode { left: 274, right: 646 }
592 : Node XNH => (SGS, RXX) : QuickNode { left: 170, right: 733 }
593 : Node NRV => (DXF, DXF) : QuickNode { left: 391, right: 391 }
594 : Node HRM => (RNH, GKS) : QuickNode { left: 191, right: 409 }
595 : Node LJL => (GBX, FCH) : QuickNode { left: 670, right: 709 }
596 : Node RDN => (PVJ, QKP) : QuickNode { left: 496, right: 318 }
597 : Node JXM => (MVQ, RVP) : QuickNode { left: 583, right: 454 }
598 : Node XLR => (HBH, MGJ) : QuickNode { left: 502, right: 23 }
599 : Node QXP => (HPX, TGV) : QuickNode { left: 722, right: 132 }
600 : Node HQH => (TTQ, LDQ) : QuickNode { left: 403, right: 497 }
601 : Node HGJ => (FCK, HGS) : QuickNode { left: 349, right: 701 }
602 : Node JTH => (LPD, DDK) : QuickNode { left: 10, right: 183 }
603 : Node NKK => (FCX, PMT) : QuickNode { left: 21, right: 376 }
604 : Node DHQ => (MND, BJV) : QuickNode { left: 553, right: 731 }
605 : Node RFF => (FLV, QLQ) : QuickNode { left: 136, right: 104 }
606 : Node RGB => (GBF, JCS) : QuickNode { left: 266, right: 716 }
607 : Node RMX => (DFV, RPL) : QuickNode { left: 354, right: 421 }
608 : Node VXF => (XRR, FVL) : QuickNode { left: 419, right: 512 }
609 : Node SMG => (RSN, VBM) : QuickNode { left: 56, right: 208 }
610 : Node KBG => (RPV, MDX) : QuickNode { left: 221, right: 263 }
611 : Node CQK => (BJG, HPL) : QuickNode { left: 296, right: 460 }
612 : Node FDV => (RRH, CKQ) : QuickNode { left: 406, right: 613 }
613 : Node CKQ => (QDN, NJH) : QuickNode { left: 134, right: 304 }
614 : Node RRL => (JMM, VBN) : QuickNode { left: 102, right: 24 }
615 : Node RVG => (QPH, GCS) : QuickNode { left: 71, right: 469 }
616 : Node FTT => (GRG, PMJ) : QuickNode { left: 657, right: 49 }
617 : Node FHD => (KMD, DHV) : QuickNode { left: 495, right: 455 }
618 : Node GFM => (MRG, CDX) : QuickNode { left: 53, right: 169 }
619 : Node FFG => (QRK, FHX) : QuickNode { left: 193, right: 412 }
620 : Node RTG => (GSF, HQN) : QuickNode { left: 87, right: 162 }
621 : Node PXS => (MLX, QJV) : QuickNode { left: 352, right: 264 }
622 : Node MQJ => (JHT, SGH) : QuickNode { left: 200, right: 317 }
623 : Node KSX => (RDH, PTT) : QuickNode { left: 353, right: 204 }
624 : Node VXP => (VBG, XQX) : QuickNode { left: 324, right: 573 }
625 : Node PMX => (TRH, VGS) : QuickNode { left: 25, right: 290 }
626 : Node BPR => (GRQ, JXM) : QuickNode { left: 149, right: 597 }
627 : Node VKD => (STT, FXF) : QuickNode { left: 703, right: 117 }
628 : Node SXL => (KKX, VTP) : QuickNode { left: 735, right: 499 }
629 : Node HDD => (GCD, FSC) : QuickNode { left: 642, right: 446 }
630 : Node GTJ => (GRB, TKB) : QuickNode { left: 205, right: 133 }
631 : Node CHT => (VXP, VXR) : QuickNode { left: 624, right: 467 }
632 : Node RBC => (CKC, HBB) : QuickNode { left: 584, right: 232 }
633 : Node XBS => (TKD, TKD) : QuickNode { left: 552, right: 552 }
634 : Node KHH => (CQL, HQF) : QuickNode { left: 564, right: 181 }
635 : Node XTX => (TPR, LGG) : QuickNode { left: 269, right: 673 }
636 : Node LKK => (LLM, LPV) : QuickNode { left: 449, right: 519 }
637 : Node VFK => (VDR, MQJ) : QuickNode { left: 697, right: 622 }
638 : Node JLX => (VJK, FMJ) : QuickNode { left: 526, right: 739 }
639 : Node FRV => (SMH, BJP) : QuickNode { left: 308, right: 388 }
640 : Node GTC => (CGP, BLS) : QuickNode { left: 729, right: 425 }
641 : Node PHR => (LTQ, LVD) : QuickNode { left: 704, right: 736 }
642 : Node GCD => (BFG, NTH) : QuickNode { left: 539, right: 155 }
643 : Node SBN => (KXM, LJC) : QuickNode { left: 427, right: 119 }
644 : Node STX => (QBK, VDC) : QuickNode { left: 385, right: 267 }
645 : Node FBG => (RTG, CTK) : QuickNode { left: 620, right: 527 }
646 : Node CKV => (BJM, QCG) : QuickNode { left: 560, right: 214 }
647 : Node DPF => (XCP, QKM) : QuickNode { left: 556, right: 153 }
648 : Node FKF => (MVH, VXF) : QuickNode { left: 578, right: 608 }
649 : Node BLB => (PGK, NFS) : QuickNode { left: 26, right: 309 }
650 : Node XPV => (MJQ, BHG) : QuickNode { left: 551, right: 384 }
651 : Node GMX => (FTT, KVX) : QuickNode { left: 616, right: 217 }
652 : Node LBH => (DFJ, SPC) : QuickNode { left: 663, right: 383 }
653 : Node JHC => (CDX, MRG) : QuickNode { left: 169, right: 53 }
654 : Node GNL => (TJJ, MKM) : QuickNode { left: 81, right: 374 }
655 : Node DSM => (FTH, FFG) : QuickNode { left: 726, right: 619 }
656 : Node FFT => (QGN, LRB) : QuickNode { left: 111, right: 47 }
657 : Node GRG => (NPJ, LNN) : QuickNode { left: 93, right: 346 }
658 : Node JFJ => (HHG, LVQ) : QuickNode { left: 259, right: 662 }
659 : Node CGR => (FMS, KRS) : QuickNode { left: 465, right: 448 }
660 : Node LFS => (XTX, FLQ) : QuickNode { left: 635, right: 223 }
661 : Node DMF => (TCF, PNQ) : QuickNode { left: 356, right: 248 }
662 : Node LVQ => (RTC, RPQ) : QuickNode { left: 503, right: 67 }
663 : Node DFJ => (SXC, LRR) : QuickNode { left: 28, right: 546 }
664 : Node VLF => (RDS, BJQ) : QuickNode { left: 241, right: 568 }
665 : Node LMJ => (BPL, XSF) : QuickNode { left: 712, right: 189 }
666 : Node BVJ => (BHG, MJQ) : QuickNode { left: 384, right: 551 }
667 : Node NRB => (QTX, DGF) : QuickNode { left: 156, right: 51 }
668 : Node GKK => (RMN, QDP) : QuickNode { left: 340, right: 379 }
669 : Node CFD => (PNQ, TCF) : QuickNode { left: 248, right: 356 }
670 : Node GBX => (DSM, DVS) : QuickNode { left: 655, right: 405 }
671 : Node NTM => (BPB, BPB) : QuickNode { left: 386, right: 386 }
672 : Node XKH => (GHJ, FSV) : QuickNode { left: 122, right: 410 }
673 : Node LGG => (BXD, FVX) : QuickNode { left: 50, right: 364 }
674 : Node DBR => (RVG, TRS) : QuickNode { left: 615, right: 557 }
675 : Node GTG => (BJG, HPL) : QuickNode { left: 296, right: 460 }
676 : Node HKK => (NCG, RGM) : QuickNode { left: 549, right: 580 }
677 : Node CKG => (LKV, QNK) : QuickNode { left: 253, right: 99 }
678 : Node FKG => (RMT, DPF) : QuickNode { left: 228, right: 647 }
679 : Node QVQ => (DKD, QTM) : QuickNode { left: 141, right: 199 }
680 : Node LDK => (KTL, JMR) : QuickNode { left: 254, right: 720 }
681 : Node PHJ => (PBN, HND) : QuickNode { left: 690, right: 472 }
682 : Node VLX => (KVX, FTT) : QuickNode { left: 217, right: 616 }
683 : Node KQF => (HBH, MGJ) : QuickNode { left: 502, right: 23 }
684 : Node RQN => (SSK, PMP) : QuickNode { left: 91, right: 490 }
685 : Node CMQ => (TQB, BBM) : QuickNode { left: 463, right: 54 }
686 : Node NHP => (FKG, FKG) : QuickNode { left: 678, right: 678 }
687 : Node DVT => (GKK, VJN) : QuickNode { left: 668, right: 721 }
688 : Node RPG => (FCK, HGS) : QuickNode { left: 349, right: 701 }
689 : Node RBN => (RKK, RQN) : QuickNode { left: 378, right: 684 }
690 : Node PBN => (RDL, PXS) : QuickNode { left: 164, right: 621 }
691 : Node RCH => (QTM, DKD) : QuickNode { left: 199, right: 141 }
692 : Node CRN => (VXP, VXR) : QuickNode { left: 624, right: 467 }
693 : Node TNN => (KBF, TDV) : QuickNode { left: 37, right: 96 }
694 : Node RFL => (QJP, CLF) : QuickNode { left: 7, right: 227 }
695 : Node NJF => (DMF, CFD) : QuickNode { left: 661, right: 669 }
696 : Node NQG => (RMX, NGG) : QuickNode { left: 607, right: 338 }
697 : Node VDR => (JHT, SGH) : QuickNode { left: 200, right: 317 }
698 : Node FPV => (GHN, BRB) : QuickNode { left: 348, right: 719 }
699 : Node PBL => (DMS, KFB) : QuickNode { left: 48, right: 575 }
700 : Node XTB => (JJX, GNL) : QuickNode { left: 357, right: 654 }
701 : Node HGS => (FKM, BNR) : QuickNode { left: 329, right: 187 }
702 : Node CCH => (BJC, MBP) : QuickNode { left: 184, right: 255 }
703 : Node STT => (LMQ, BXS) : QuickNode { left: 424, right: 534 }
704 : Node LTQ => (SLS, PKV) : QuickNode { left: 498, right: 441 }
705 : Node SFN => (LCN, DTK) : QuickNode { left: 289, right: 305 }
706 : Node NGH => (QVR, TDG) : QuickNode { left: 506, right: 459 }
707 : Node RQK => (RPR, NRL) : QuickNode { left: 404, right: 395 }
708 : Node PDP => (NDH, XGL) : QuickNode { left: 428, right: 444 }
709 : Node FCH => (DSM, DVS) : QuickNode { left: 655, right: 405 }
710 : Node QCD => (SCH, LDS) : QuickNode { left: 732, right: 522 }
711 : Node TKF => (BTF, JQJ) : QuickNode { left: 224, right: 216 }
712 : Node BPL => (BGT, FCN) : QuickNode { left: 555, right: 336 }
713 : Node SVJ => (CQL, HQF) : QuickNode { left: 564, right: 181 }
714 : Node QTG => (JPJ, JCF) : QuickNode { left: 313, right: 226 }
715 : Node NSN => (GFM, JHC) : QuickNode { left: 618, right: 653 }
716 : Node JCS => (HJG, FPV) : QuickNode { left: 202, right: 698 }
717 : Node HRC => (GRH, RFF) : QuickNode { left: 160, right: 605 }
718 : Node VGH => (LLM, LPV) : QuickNode { left: 449, right: 519 }
719 : Node BRB => (XBS, BXT) : QuickNode { left: 633, right: 489 }
720 : Node JMR => (HFF, FPS) : QuickNode { left: 319, right: 558 }
721 : Node VJN => (RMN, QDP) : QuickNode { left: 340, right: 379 }
722 : Node HPX => (TKF, CFG) : QuickNode { left: 711, right: 520 }
723 : Node CFT => (QVF, MJM) : QuickNode { left: 423, right: 73 }
724 : Node DBX => (KVL, DLS) : QuickNode { left: 342, right: 392 }
725 : Node NHV => (PHJ, DMH) : QuickNode { left: 681, right: 447 }
726 : Node FTH => (QRK, FHX) : QuickNode { left: 193, right: 412 }
727 : Node XFB => (DVM, HDD) : QuickNode { left: 275, right: 629 }
728 : Node XPP => (MLH, VFK) : QuickNode { left: 341, right: 637 }
729 : Node CGP => (CQK, GTG) : QuickNode { left: 611, right: 675 }
730 : Node MDL => (FFT, CBC) : QuickNode { left: 656, right: 64 }
731 : Node BJV => (KBG, MDK) : QuickNode { left: 610, right: 545 }
732 : Node SCH => (FGF, XHG) : QuickNode { left: 295, right: 482 }
733 : Node RXX => (KMC, RQK) : QuickNode { left: 242, right: 707 }
734 : Node HQG => (GHK, RRL) : QuickNode { left: 33, right: 614 }
735 : Node KKX => (JHX, HQQ) : QuickNode { left: 434, right: 252 }
736 : Node LVD => (SLS, PKV) : QuickNode { left: 498, right: 441 }
737 : Node QQP => (XJB, HSJ) : QuickNode { left: 372, right: 589 }
738 : Node MTB => (LMJ, PCP) : QuickNode { left: 665, right: 94 }
739 : Node FMJ => (KQM, DHQ) : QuickNode { left: 408, right: 604 }
740 : Node CJZ => (DPF, RMT) : QuickNode { left: 647, right: 228 }
741 : Node ZZZ => (QBJ, MJJ) : QuickNode { left: 70, right: 306 }
742 : Node SLZ => (JGT, LBJ) : QuickNode { left: 150, right: 494 }
743 : Node QCZ => (BLP, RXT) : QuickNode { left: 77, right: 344 }
744 : Node PFZ => (PXF, VHC) : QuickNode { left: 69, right: 518 }
745 : Node GNZ => (KPG, KTV) : QuickNode { left: 435, right: 137 }
Ghosties:
20513 -> Ghost { current: 743, step: 41026, exit_step1: 20513, exit_step2: 41026 }
18827 -> Ghost { current: 740, step: 37654, exit_step1: 18827, exit_step2: 37654 }
17141 -> Ghost { current: 744, step: 34282, exit_step1: 17141, exit_step2: 34282 }
22199 -> Ghost { current: 745, step: 44398, exit_step1: 22199, exit_step2: 44398 }
12083 -> Ghost { current: 741, step: 24166, exit_step1: 12083, exit_step2: 24166 }
13207 -> Ghost { current: 742, step: 26414, exit_step1: 13207, exit_step2: 26414 }
LCM: 13385272668829

@ -0,0 +1,9 @@
RL
AAA = (BBB, CCC)
BBB = (DDD, EEE)
CCC = (ZZZ, GGG)
DDD = (DDD, DDD)
EEE = (EEE, EEE)
GGG = (GGG, GGG)
ZZZ = (ZZZ, ZZZ)

@ -0,0 +1,5 @@
LLR
AAA = (BBB, BBB)
BBB = (AAA, ZZZ)
ZZZ = (ZZZ, ZZZ)

@ -0,0 +1,10 @@
LR
11A = (11B, XXX)
11B = (XXX, 11Z)
11Z = (11B, XXX)
22A = (22B, XXX)
22B = (22C, 22C)
22C = (22Z, 22Z)
22Z = (22B, 22B)
XXX = (XXX, XXX)

@ -0,0 +1,748 @@
LLLRLRLRLLRRRLRRRLRRRLLLRLRLLRRLLRRLRLRLLRLRLRRLLRRRLRLLRRLRRRLRRLLLRRRLRRRLRRRLLLLRRLRRRLRLRRRLRRLLRLRLRRRLRRRLRRLRRRLLLLLLRLRRRLLLLRLRRRLRRRLRLRRLRLRLRLRLRRRLLRRLRLRRLRRLRRLLRLLLRRLRLLRRLRLRRLRRRLRRLLRLRLRLRRLLRLLRRLLLRLRLRRRLRRLLRRRLRLRLRRLLRLRLRLRRLRLRLRRLRRLLRRLRRRLRRRLLLRRRR
MQF = (DDG, LSH)
QJP = (PCT, XKJ)
JXF = (PMG, NBN)
JCK = (QCD, NRG)
LPD = (NTM, NTM)
DLN = (TXM, QRG)
MTG = (KGC, DMM)
KFV = (FXH, QLX)
SCJ = (HQH, XSD)
JKJ = (PMX, MHH)
SJK = (JXM, GRQ)
CJZ = (DPF, RMT)
QXM = (HGC, SMX)
XJS = (NRV, CCL)
QLB = (RCH, QVQ)
KDB = (QKT, BJB)
FCX = (DXG, SGQ)
PCT = (DXR, PTS)
MGJ = (FKF, HNG)
VBN = (RBK, JPL)
TRH = (SRT, VJV)
PGK = (SNP, QLP)
XVK = (KFK, QQC)
SXC = (XTB, DPQ)
HNG = (VXF, MVH)
QHT = (TTD, LBH)
LMK = (QQT, QTP)
DXR = (KCT, KQS)
FSA = (RXT, BLP)
GHK = (JMM, VBN)
DMM = (VQM, LTG)
FBQ = (FSV, GHJ)
KCN = (QVR, TDG)
KBF = (XNM, HBL)
KJP = (FKG, CJZ)
JLH = (CKG, XLV)
RJX = (KKN, RJH)
PFS = (BVC, SXR)
DHM = (HXV, FRV)
KFK = (PLL, GQC)
CNB = (KNS, HVP)
DDG = (QTS, VRJ)
QVT = (JCK, DJQ)
LRB = (TXD, MPR)
DMS = (QVD, MFS)
PMJ = (LNN, NPJ)
BXD = (MLL, QKQ)
DGF = (FMX, PKP)
RHQ = (RJH, KKN)
MRG = (TNN, LLX)
BBM = (VFP, VGF)
PLP = (BBK, KFX)
RSN = (SBN, DQF)
XTP = (HMT, XNV)
LLX = (KBF, TDV)
KHR = (QGL, NCM)
PFB = (SXR, BVC)
NKP = (JTF, BJH)
RPH = (RSN, VBM)
HBL = (LVT, JXF)
CBC = (LRB, QGN)
FXH = (GCH, KBD)
QTF = (KVL, DLS)
RPQ = (FJB, RMD)
SLD = (MSH, NSN)
PXF = (QXM, HDF)
QBJ = (RDQ, DJH)
QPH = (RKJ, CSC)
TVF = (JMC, MTV)
MJM = (DLM, BQS)
XQV = (LCD, QCL)
KQH = (SJK, BPR)
CSC = (BLD, PDP)
BLP = (XVK, LJB)
BBK = (DJT, LLJ)
PSH = (GQH, RBQ)
RMD = (XQV, KFT)
TJJ = (QLV, HPG)
STS = (BSB, TMP)
FPN = (TCK, GLD)
JPF = (VCS, CMQ)
NVX = (TLD, GMD)
XLV = (LKV, QNK)
GSF = (CKS, BVB)
QHR = (KTV, KPG)
JRX = (FPN, DTC)
KGC = (VQM, LTG)
SSK = (NHP, NHP)
GLN = (RMX, NGG)
NPJ = (QRV, KTB)
PCP = (XSF, BPL)
JTF = (LSL, BHB)
TDV = (HBL, XNM)
FKV = (JVF, HKK)
GSG = (QJP, CLF)
QNK = (XNQ, CGQ)
RQT = (QVQ, RCH)
XNT = (RKM, XRV)
JMM = (RBK, JPL)
LSL = (NGH, KCN)
QLQ = (TLV, KDN)
KXR = (KRH, KRH)
QLV = (GSR, BQV)
PMG = (LPH, XFB)
VNF = (LVQ, HHG)
CSS = (RKK, RQN)
HGR = (PVX, LFX)
QGN = (MPR, TXD)
XNQ = (GTJ, LXQ)
QQC = (GQC, PLL)
CKR = (KQH, HQD)
TLD = (JLJ, VFL)
XSD = (TTQ, LDQ)
FXF = (BXS, LMQ)
ZZZ = (QBJ, MJJ)
HPG = (GSR, BQV)
LJC = (RNF, FNK)
CCL = (DXF, HRM)
FQR = (QBF, CLH)
GHJ = (MPS, NRB)
LLJ = (NVX, BTR)
MCQ = (RTG, CTK)
PLL = (DJD, FTV)
BLD = (XGL, NDH)
MLL = (NHV, PPJ)
KDN = (LLS, DLN)
KKN = (DCC, CCH)
FHB = (TCJ, VLF)
HCC = (RDN, TRJ)
TGV = (TKF, CFG)
TKB = (SVJ, KHH)
QDN = (RXG, PFF)
GQN = (RKT, NKK)
FLV = (TLV, KDN)
KTV = (LKK, VGH)
XHQ = (JLX, SNS)
MHN = (DHV, KMD)
DLD = (SSQ, LDK)
DKD = (CKR, JPC)
SRD = (KPP, LFS)
LVT = (PMG, NBN)
KPP = (FLQ, XTX)
BQV = (GLN, NQG)
BSB = (KHR, FGL)
HGC = (DBX, QTF)
DSF = (RBQ, GQH)
GRQ = (MVQ, RVP)
JGT = (SFN, GQT)
HDF = (SMX, HGC)
QBF = (VKF, XHQ)
QKM = (JTV, LPP)
LJB = (QQC, KFK)
NTH = (QQV, MHS)
QTX = (FMX, PKP)
HCQ = (FFT, CBC)
XKJ = (DXR, PTS)
BHH = (KPP, LFS)
GRH = (QLQ, FLV)
FNX = (MJX, PFZ)
HQN = (CKS, BVB)
SJV = (CGF, VKD)
RDL = (QJV, MLX)
MFR = (DMF, CFD)
LPF = (SRD, BHH)
HCP = (MPV, NVL)
KNS = (VCD, LJL)
CDX = (LLX, TNN)
SGS = (KMC, RQK)
HQS = (NKP, FRN)
QVD = (VML, QHT)
NRG = (LDS, SCH)
BVB = (HCP, NVM)
RBK = (QLB, RQT)
MPV = (CGR, TSC)
VFP = (JXP, QCM)
QFS = (DFQ, FHB)
FTK = (LSH, DDG)
TJH = (KPL, KTR)
HQF = (MQF, FTK)
FGX = (HVP, KNS)
DDK = (NTM, JNC)
BJC = (SQK, RGB)
HVP = (VCD, LJL)
LTG = (RMV, CJC)
BNR = (CSS, RBN)
GQT = (LCN, DTK)
XSF = (BGT, FCN)
SSQ = (KTL, JMR)
RNH = (BXH, BXH)
FTV = (CMM, PBL)
QRK = (TSF, QFS)
CLR = (NFS, PGK)
SRJ = (PFV, SHX)
FQT = (QKT, BJB)
FRN = (BJH, JTF)
RCN = (NRV, CCL)
QTM = (CKR, JPC)
JHT = (HRC, NVR)
KVB = (KRH, KKT)
HJG = (GHN, GHN)
RNF = (QFF, CKV)
PTT = (VNT, FNX)
GRB = (SVJ, KHH)
TRJ = (PVJ, QKP)
MHS = (FCV, JXD)
VBM = (SBN, DQF)
DLM = (VNH, SCJ)
PPJ = (DMH, PHJ)
QJN = (LSX, KBN)
HXV = (SMH, BJP)
GVL = (VMV, DKF)
QCG = (FKV, NVD)
FNM = (XRV, RKM)
JQJ = (NVT, HGR)
KVX = (GRG, PMJ)
JLV = (SMG, RPH)
TXD = (MFN, HQG)
TLJ = (FHD, MHN)
RPV = (GKH, BPT)
CPR = (JLH, PLC)
FLQ = (TPR, LGG)
BTF = (HGR, NVT)
GCH = (QPT, FDV)
JCF = (GHM, NKS)
CLF = (PCT, XKJ)
RMT = (QKM, XCP)
KPL = (DJB, VLV)
RMV = (NMS, HCC)
XRV = (VPH, PHH)
HBB = (XKH, FBQ)
PXB = (QBF, CLH)
HMR = (PCP, LMJ)
KCT = (PFS, PFB)
DCC = (MBP, BJC)
VFV = (VBD, HQS)
DJB = (BQX, SLD)
MFS = (VML, QHT)
RPC = (PHR, JFD)
RDS = (LFC, RNK)
KMC = (RPR, NRL)
CJD = (VJN, GKK)
VST = (VCS, CMQ)
VMC = (RPC, MCV)
VJV = (XTP, DRK)
BXH = (RXT, BLP)
PNQ = (DSF, PSH)
RJJ = (FXH, QLX)
NKS = (QDQ, DPP)
QDQ = (SJV, MRP)
HQQ = (CJD, DVT)
LKV = (CGQ, XNQ)
KTL = (HFF, FPS)
MBP = (RGB, SQK)
MQQ = (HCQ, MDL)
BQS = (SCJ, VNH)
NRT = (FJD, HTS)
HHG = (RTC, RPQ)
VNH = (XSD, HQH)
QTS = (QTG, MHD)
DJQ = (NRG, QCD)
MDX = (BPT, GKH)
QJV = (QQP, VLJ)
HBD = (HBB, CKC)
GBF = (HJG, FPV)
VDC = (JFJ, VNF)
MPH = (PFV, SHX)
TPR = (BXD, FVX)
KFX = (DJT, LLJ)
LSX = (VKN, STS)
HJL = (KFX, BBK)
QLT = (KGC, DMM)
QFF = (BJM, QCG)
DVM = (GCD, FSC)
MHD = (JCF, JPJ)
DPQ = (JJX, GNL)
NMS = (TRJ, RDN)
VLJ = (XJB, HSJ)
JSP = (MHN, FHD)
BTR = (GMD, TLD)
TTD = (SPC, DFJ)
QKT = (XPV, BVJ)
MKK = (HCQ, MDL)
LFC = (LSS, GQN)
QGL = (RPG, HGJ)
JDT = (FPN, DTC)
NCM = (RPG, HGJ)
LCN = (QLT, MTG)
VGS = (VJV, SRT)
CGF = (FXF, STT)
KQS = (PFB, PFS)
PFF = (DLD, MRJ)
LSH = (QTS, VRJ)
FGF = (MPH, SRJ)
BJG = (TVF, BDN)
HQR = (CXG, CPR)
JVF = (RGM, NCG)
SNP = (BLN, DFD)
DQH = (GSC, CFT)
JVA = (RMT, DPF)
VPH = (CRN, CHT)
DFQ = (VLF, TCJ)
DFD = (HQR, QDF)
NJH = (RXG, PFF)
DTK = (QLT, MTG)
MJJ = (DJH, RDQ)
GGB = (CFT, GSC)
SMH = (RHQ, RJX)
NFS = (SNP, QLP)
LNV = (XLR, KQF)
LCD = (FNM, XNT)
GQH = (JDT, JRX)
JPJ = (GHM, NKS)
GMD = (VFL, JLJ)
HTS = (KXR, KVB)
KFT = (LCD, QCL)
SGH = (NVR, HRC)
QKP = (MQD, MLM)
HFF = (MGM, KSX)
HJM = (KBN, LSX)
MJX = (VHC, PXF)
TSF = (FHB, DFQ)
MSH = (GFM, JHC)
VBG = (HJM, QJN)
CKS = (HCP, NVM)
DQF = (LJC, KXM)
FVP = (FJD, HTS)
DPP = (SJV, MRP)
FKM = (CSS, RBN)
VCD = (FCH, GBX)
DJV = (VMC, HVC)
RKM = (VPH, PHH)
TMP = (KHR, FGL)
BVC = (TLJ, JSP)
SRV = (HQS, VBD)
FCN = (DHM, VDX)
DJH = (FBG, MCQ)
NGG = (RPL, DFV)
SRT = (XTP, DRK)
RMN = (QTD, JGS)
MLH = (MQJ, VDR)
KVL = (VFV, SRV)
VDX = (FRV, HXV)
RXT = (LJB, XVK)
LSS = (RKT, NKK)
LNN = (KTB, QRV)
BCC = (CHL, QXP)
GHN = (XBS, XBS)
FCK = (FKM, BNR)
QLP = (BLN, DFD)
BDN = (JMC, MTV)
MLX = (VLJ, QQP)
RDH = (VNT, VNT)
DFV = (JKJ, KDX)
DXG = (JLV, MVL)
TCF = (DSF, PSH)
JJX = (MKM, TJJ)
VFL = (GGB, DQH)
VLV = (SLD, BQX)
RBQ = (JDT, JRX)
JXP = (QXB, QVT)
PFV = (STX, XHF)
BLN = (QDF, HQR)
FVX = (QKQ, MLL)
QTP = (DJV, GMN)
JLP = (NJF, MFR)
CXG = (PLC, JLH)
VKF = (JLX, SNS)
QQT = (GMN, DJV)
KDX = (MHH, PMX)
FJD = (KXR, KXR)
XJB = (PHB, JTH)
VMV = (RCN, XJS)
MKM = (HPG, QLV)
SQK = (GBF, JCS)
PMT = (SGQ, DXG)
LXQ = (GRB, TKB)
RKK = (SSK, SSK)
QXA = (VHC, PXF)
QDP = (QTD, JGS)
VQC = (KQF, XLR)
QKQ = (PPJ, NHV)
TXM = (JLP, JCJ)
SPC = (LRR, SXC)
BHG = (KFL, BCC)
QBK = (VNF, JFJ)
BPB = (LBJ, JGT)
RNK = (LSS, GQN)
BJP = (RHQ, RJX)
VNT = (MJX, MJX)
QLX = (GCH, KBD)
DXF = (RNH, RNH)
DLS = (VFV, SRV)
SXR = (TLJ, JSP)
SGQ = (JLV, MVL)
NRL = (XPP, XGM)
JFD = (LVD, LTQ)
XNM = (JXF, LVT)
PHH = (CHT, CRN)
QTD = (CTJ, LPF)
FCV = (GTC, CKJ)
QRG = (JLP, JCJ)
DKS = (KPL, KTR)
TTQ = (BFV, LVR)
RPR = (XGM, XPP)
DVS = (FTH, FFG)
RRH = (NJH, QDN)
KTR = (DJB, VLV)
KQM = (BJV, MND)
GKS = (BXH, QCZ)
FSV = (MPS, NRB)
QXB = (DJQ, JCK)
FHX = (QFS, TSF)
FGL = (QGL, NCM)
BHB = (KCN, NGH)
KNA = (KTV, KPG)
NBN = (LPH, XFB)
NVM = (NVL, MPV)
LVR = (CNB, FGX)
QCL = (FNM, XNT)
XRR = (MTB, HMR)
LLS = (TXM, QRG)
AAA = (MJJ, QBJ)
RPL = (JKJ, KDX)
QCM = (QVT, QXB)
QVF = (BQS, DLM)
LMQ = (LMK, BVF)
BLS = (CQK, GTG)
JMC = (PLP, HJL)
KXM = (RNF, FNK)
NDH = (FHJ, GML)
SNS = (VJK, FMJ)
KFL = (QXP, CHL)
FSD = (XNH, MJF)
DTC = (GLD, TCK)
MRP = (CGF, VKD)
JHX = (CJD, DVT)
KPG = (LKK, VGH)
DJT = (NVX, BTR)
MQD = (FQT, KDB)
CKJ = (BLS, CGP)
JXD = (GTC, CKJ)
NVL = (CGR, TSC)
PKV = (DBR, PGB)
JPL = (QLB, RQT)
TSC = (FMS, KRS)
XGL = (GML, FHJ)
DJD = (PBL, CMM)
FSC = (BFG, NTH)
DMH = (PBN, HND)
KRS = (FQR, PXB)
LLM = (GMX, VLX)
FJB = (XQV, KFT)
KRH = (QHR, QHR)
RDQ = (MCQ, FBG)
GLD = (VST, JPF)
RVP = (HBD, RBC)
DHV = (RJJ, KFV)
FMX = (RFL, GSG)
SMX = (DBX, QTF)
LPP = (FSD, PHM)
TDG = (MKK, MQQ)
HPL = (BDN, TVF)
MGM = (RDH, RDH)
FHJ = (XFJ, GVL)
TQB = (VFP, VGF)
JLJ = (DQH, GGB)
FMS = (FQR, PXB)
HQD = (BPR, SJK)
VXR = (XQX, VBG)
GML = (XFJ, GVL)
GCS = (RKJ, CSC)
CTJ = (SRD, BHH)
CLH = (XHQ, VKF)
HND = (RDL, PXS)
QPT = (RRH, CKQ)
NVD = (HKK, JVF)
XGM = (VFK, MLH)
GMN = (HVC, VMC)
QDF = (CXG, CPR)
TCK = (JPF, VST)
BJH = (LSL, BHB)
JNC = (BPB, SLZ)
GSC = (QVF, MJM)
XHG = (SRJ, MPH)
CGQ = (GTJ, LXQ)
CHL = (TGV, HPX)
MRJ = (LDK, SSQ)
GKH = (VQC, LNV)
MLM = (FQT, KDB)
BPT = (LNV, VQC)
BXT = (TKD, ZZZ)
PMP = (NHP, KJP)
PLC = (XLV, CKG)
FXA = (LBJ, JGT)
PKP = (RFL, GSG)
BQX = (MSH, NSN)
LBJ = (SFN, GQT)
KMD = (KFV, RJJ)
PVJ = (MQD, MLM)
LDQ = (LVR, BFV)
SLS = (PGB, DBR)
VTP = (HQQ, JHX)
MPS = (QTX, DGF)
VRJ = (QTG, MHD)
HBH = (HNG, FKF)
RTC = (RMD, FJB)
PHB = (LPD, LPD)
CMM = (DMS, KFB)
QVR = (MKK, MQQ)
XFJ = (DKF, VMV)
TLV = (DLN, LLS)
QRV = (SCL, BSJ)
MFN = (GHK, RRL)
NVT = (LFX, PVX)
FVL = (HMR, MTB)
VCS = (TQB, BBM)
XHF = (QBK, VDC)
JTV = (FSD, PHM)
VML = (TTD, LBH)
SCL = (DKS, TJH)
VHC = (QXM, HDF)
LPV = (GMX, VLX)
CFG = (BTF, JQJ)
MCV = (PHR, JFD)
LDS = (FGF, XHG)
VGF = (QCM, JXP)
BVF = (QQT, QTP)
VKN = (TMP, BSB)
VJK = (KQM, DHQ)
CTK = (GSF, HQN)
PHM = (MJF, XNH)
PVX = (MHK, SXL)
JPC = (KQH, HQD)
JGS = (CTJ, LPF)
XNV = (CLR, BLB)
PTS = (KCT, KQS)
BXS = (BVF, LMK)
BJB = (XPV, BVJ)
MHK = (VTP, KKX)
CJC = (NMS, HCC)
RKT = (PMT, FCX)
BFG = (QQV, MHS)
LPH = (HDD, DVM)
GSR = (GLN, NQG)
MHH = (VGS, TRH)
HMT = (BLB, CLR)
JCJ = (NJF, MFR)
MDK = (RPV, MDX)
LRR = (DPQ, XTB)
RKJ = (PDP, BLD)
MJF = (RXX, SGS)
NCG = (NRT, FVP)
QQV = (JXD, FCV)
MJQ = (BCC, KFL)
TKD = (MJJ, QBJ)
MND = (MDK, KBG)
RXG = (MRJ, DLD)
BGT = (DHM, VDX)
XCP = (LPP, JTV)
TRS = (QPH, GCS)
FPS = (MGM, KSX)
MVL = (SMG, RPH)
BJM = (NVD, FKV)
BSJ = (TJH, DKS)
MTV = (PLP, HJL)
GQC = (FTV, DJD)
CQL = (FTK, MQF)
VQM = (RMV, CJC)
SLZ = (JGT, LBJ)
HVC = (MCV, RPC)
LFX = (MHK, SXL)
BJQ = (LFC, RNK)
BFV = (FGX, CNB)
DRK = (HMT, XNV)
VBD = (NKP, FRN)
KBN = (STS, VKN)
XQX = (HJM, QJN)
MPR = (HQG, MFN)
KFB = (MFS, QVD)
GHM = (QDQ, DPP)
KBD = (QPT, FDV)
MVH = (FVL, XRR)
PGB = (RVG, TRS)
RGM = (NRT, FVP)
KKT = (QHR, GNZ)
TCJ = (RDS, BJQ)
MVQ = (HBD, RBC)
CKC = (XKH, FBQ)
SHX = (XHF, STX)
NVR = (RFF, GRH)
DKF = (RCN, XJS)
KTB = (BSJ, SCL)
HSJ = (PHB, JTH)
RJH = (DCC, CCH)
FNK = (QFF, CKV)
XNH = (SGS, RXX)
NRV = (DXF, DXF)
HRM = (RNH, GKS)
LJL = (GBX, FCH)
RDN = (PVJ, QKP)
JXM = (MVQ, RVP)
XLR = (HBH, MGJ)
QXP = (HPX, TGV)
HQH = (TTQ, LDQ)
HGJ = (FCK, HGS)
JTH = (LPD, DDK)
NKK = (FCX, PMT)
DHQ = (MND, BJV)
RFF = (FLV, QLQ)
RGB = (GBF, JCS)
RMX = (DFV, RPL)
VXF = (XRR, FVL)
SMG = (RSN, VBM)
KBG = (RPV, MDX)
QCZ = (BLP, RXT)
CQK = (BJG, HPL)
FDV = (RRH, CKQ)
CKQ = (QDN, NJH)
RRL = (JMM, VBN)
RVG = (QPH, GCS)
FTT = (GRG, PMJ)
FHD = (KMD, DHV)
GFM = (MRG, CDX)
FFG = (QRK, FHX)
RTG = (GSF, HQN)
PXS = (MLX, QJV)
MQJ = (JHT, SGH)
KSX = (RDH, PTT)
VXP = (VBG, XQX)
PMX = (TRH, VGS)
BPR = (GRQ, JXM)
VKD = (STT, FXF)
SXL = (KKX, VTP)
HDD = (GCD, FSC)
GTJ = (GRB, TKB)
CHT = (VXP, VXR)
RBC = (CKC, HBB)
XBS = (TKD, TKD)
KHH = (CQL, HQF)
XTX = (TPR, LGG)
LKK = (LLM, LPV)
VFK = (VDR, MQJ)
JLX = (VJK, FMJ)
FRV = (SMH, BJP)
GTC = (CGP, BLS)
PHR = (LTQ, LVD)
GCD = (BFG, NTH)
SBN = (KXM, LJC)
STX = (QBK, VDC)
FBG = (RTG, CTK)
CKV = (BJM, QCG)
DPF = (XCP, QKM)
FKF = (MVH, VXF)
BLB = (PGK, NFS)
XPV = (MJQ, BHG)
GMX = (FTT, KVX)
LBH = (DFJ, SPC)
JHC = (CDX, MRG)
GNL = (TJJ, MKM)
DSM = (FTH, FFG)
FFT = (QGN, LRB)
GRG = (NPJ, LNN)
JFJ = (HHG, LVQ)
CGR = (FMS, KRS)
LFS = (XTX, FLQ)
DMF = (TCF, PNQ)
LVQ = (RTC, RPQ)
DFJ = (SXC, LRR)
VLF = (RDS, BJQ)
LMJ = (BPL, XSF)
BVJ = (BHG, MJQ)
NRB = (QTX, DGF)
GKK = (RMN, QDP)
CFD = (PNQ, TCF)
GBX = (DSM, DVS)
NTM = (BPB, BPB)
XKH = (GHJ, FSV)
LGG = (BXD, FVX)
DBR = (RVG, TRS)
GTG = (BJG, HPL)
HKK = (NCG, RGM)
CKG = (LKV, QNK)
FKG = (RMT, DPF)
QVQ = (DKD, QTM)
LDK = (KTL, JMR)
PHJ = (PBN, HND)
PFZ = (PXF, VHC)
VLX = (KVX, FTT)
KQF = (HBH, MGJ)
RQN = (SSK, PMP)
CMQ = (TQB, BBM)
NHP = (FKG, FKG)
DVT = (GKK, VJN)
RPG = (FCK, HGS)
RBN = (RKK, RQN)
PBN = (RDL, PXS)
RCH = (QTM, DKD)
CRN = (VXP, VXR)
TNN = (KBF, TDV)
RFL = (QJP, CLF)
NJF = (DMF, CFD)
NQG = (RMX, NGG)
VDR = (JHT, SGH)
FPV = (GHN, BRB)
PBL = (DMS, KFB)
XTB = (JJX, GNL)
HGS = (FKM, BNR)
CCH = (BJC, MBP)
STT = (LMQ, BXS)
LTQ = (SLS, PKV)
SFN = (LCN, DTK)
NGH = (QVR, TDG)
RQK = (RPR, NRL)
PDP = (NDH, XGL)
FCH = (DSM, DVS)
QCD = (SCH, LDS)
TKF = (BTF, JQJ)
BPL = (BGT, FCN)
SVJ = (CQL, HQF)
QTG = (JPJ, JCF)
NSN = (GFM, JHC)
JCS = (HJG, FPV)
HRC = (GRH, RFF)
VGH = (LLM, LPV)
BRB = (XBS, BXT)
JMR = (HFF, FPS)
VJN = (RMN, QDP)
HPX = (TKF, CFG)
CFT = (QVF, MJM)
DBX = (KVL, DLS)
NHV = (PHJ, DMH)
FTH = (QRK, FHX)
XFB = (DVM, HDD)
XPP = (MLH, VFK)
CGP = (CQK, GTG)
MDL = (FFT, CBC)
GNZ = (KPG, KTV)
BJV = (KBG, MDK)
SCH = (FGF, XHG)
RXX = (KMC, RQK)
HQG = (GHK, RRL)
KKX = (JHX, HQQ)
LVD = (SLS, PKV)
QQP = (XJB, HSJ)
MTB = (LMJ, PCP)
FMJ = (KQM, DHQ)

@ -0,0 +1,93 @@
use super::lexer::*;
use std::fmt;
#[derive(Copy, Clone, PartialEq, Eq, Debug, Ord, PartialOrd)]
pub enum Move {
Left,
Right
}
impl Move {
pub fn parse_moves(list: &str) -> Vec<Self> {
list.chars()
.map(
|x| match x {
'L' => Self::Left,
'R' => Self::Right,
_ => panic!()
})
.collect()
}
}
#[derive(Copy, Clone, PartialEq, Eq, Debug, Ord, PartialOrd)]
pub struct Node {
pub name: [u8; 3],
pub left: [u8; 3],
pub right: [u8; 3],
}
impl Node {
pub fn from_tokens<'a>(toks: &mut impl Iterator<Item = &'a Token>) -> Self {
let name_str = expect_keyword(toks).unwrap();
let _eq = expect_special(toks).unwrap();
let _paren = expect_special(toks).unwrap();
let left_str = expect_keyword(toks).unwrap();
let _comma = expect_special(toks).unwrap();
let right_str = expect_keyword(toks).unwrap();
let _paren = expect_special(toks).unwrap();
let name = name_str.as_bytes().try_into().unwrap();
let left = left_str.as_bytes().try_into().unwrap();
let right = right_str.as_bytes().try_into().unwrap();
Self {
name,
left,
right,
}
}
}
impl fmt::Display for Node {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Node {}{}{} => ({}{}{}, {}{}{})",
self.name[0] as char, self.name[1] as char, self.name[2] as char,
self.left[0] as char, self.left[1] as char, self.left[2] as char,
self.right[0] as char, self.right[1] as char, self.right[2] as char,
)
}
}
pub fn sorted_graph_add_node(list: &mut Vec<Node>, node: Node) {
let pos = list.binary_search(&node).unwrap_or_else(|idx| idx);
list.insert(pos, node);
}
pub fn sorted_graph_get_node_idx_by_name(list: &Vec<Node>, name: [u8;3]) -> usize {
list.binary_search_by_key(&name, |x| x.name).unwrap()
}
pub fn unsorted_graph_get_node_idx_by_name(list: &Vec<Node>, name: [u8;3]) -> usize {
list.iter().position(|x| x.name == name).unwrap()
}
#[derive(Default, Copy, Clone, PartialEq, Eq, Debug, Ord, PartialOrd)]
pub struct QuickNode {
pub left: u16,
pub right: u16,
}
impl QuickNode {
pub fn from_node_elem(list: &Vec<Node>, idx: usize) -> Self {
let item = list[idx];
let left_idx = unsorted_graph_get_node_idx_by_name(&list, item.left);
let right_idx = unsorted_graph_get_node_idx_by_name(&list, item.right);
QuickNode {
left: left_idx as u16,
right: right_idx as u16,
}
}
}

@ -0,0 +1,59 @@
use std::io::{Lines, StdinLock};
/// A simple, but panic-y reader for stdin
pub fn simple_stdin() -> SimpleStdinLines {
SimpleStdinLines::new()
}
pub struct SimpleStdinLines {
pub inner: Lines<StdinLock<'static>>,
}
impl SimpleStdinLines {
pub fn new() -> Self {
Self { inner: std::io::stdin().lines() }
}
}
impl Iterator for SimpleStdinLines {
type Item = String;
fn next(&mut self) -> Option<Self::Item> {
self.inner.next().transpose().unwrap()
}
}
/// A simple, but panic-y parser of arguments
pub fn simple_args() -> SimpleArgs {
SimpleArgs::init()
}
pub struct SimpleArgs {
args: Vec<String>,
}
impl SimpleArgs {
pub fn init() -> Self {
Self { args: std::env::args().collect() }
}
pub fn get_flag(&self, name: &str) -> bool {
self.args.iter().any(|x| x == name)
}
pub fn get_value(&self, name: &str, default: &str) -> String {
let pos = self.args.iter().position(|x| x == name);
if let Some(idx) = pos {
if let Some(s) = self.args.iter().nth(idx + 1) {
s.clone()
}
else {
String::from(default)
}
}
else {
String::from(default)
}
}
}

@ -0,0 +1,72 @@
const RADIX: u32 = 10;
#[derive(Clone, Debug)]
pub enum Token {
Special(char),
Keyword(String),
}
pub fn tokenize_line(input: &str) -> Vec<Token> {
let mut vals = vec![];
let mut idx = 0;
while idx < input.len() {
let c = input.chars().nth(idx).unwrap();
if is_special_char(c) {
vals.push(Token::Special(c));
idx = idx + 1;
}
else if is_keyword_char(c) {
let end = match input.chars().skip(idx)
.position(|x| !is_keyword_char(x)) {
Some(pos) => idx + pos,
None => input.len(),
};
vals.push(Token::Keyword(String::from(&input[idx..end])));
idx = end;
}
else {
idx = idx + 1;
}
}
vals
}
fn is_special_char(c: char) -> bool {
match c {
'(' => true,
')' => true,
'=' => true,
',' => true,
_ => false
}
}
fn is_keyword_char(c: char) -> bool {
match c {
'a'..='z'|'A'..='Z'|'0'..='9' => true,
_ => false
}
}
pub fn expect_keyword<'a>(iter: &mut impl Iterator<Item = &'a Token>) -> Option<String> {
if let Some(Token::Keyword(k)) = iter.next() {
Some(k.clone())
}
else {
None
}
}
pub fn expect_special<'a>(iter: &mut impl Iterator<Item = &'a Token>) -> Option<char> {
if let Some(Token::Special(c)) = iter.next() {
Some(*c)
}
else {
None
}
}

@ -0,0 +1,23 @@
mod lexer;
mod input_tools;
mod common;
mod part1;
mod part2;
use input_tools::*;
use part1::puzzle1;
use part2::puzzle2;
fn main() {
let args = simple_args();
let verbose = args.get_flag("-v");
let part = args.get_value("-p", "1");
match part.as_str() {
"1" => puzzle1(verbose),
"2" => puzzle2(verbose),
_ => println!("Nothing to do")
}
}

@ -0,0 +1,66 @@
use crate::common::*;
use crate::lexer::*;
use crate::input_tools::*;
pub fn puzzle1(verbose: bool) {
println!("Part 1");
let mut input = simple_stdin();
let line1 = input.next().unwrap();
let moves = Move::parse_moves(&line1);
if verbose {
println!("Moves: {:?}", moves);
}
let _line2 = input.next().unwrap();
let mut graph = vec![];
for line in input {
let tokens = tokenize_line(&line);
let node = Node::from_tokens(&mut tokens.iter());
sorted_graph_add_node(&mut graph, node);
}
let mut quick_graph = [QuickNode::default(); 750];
for i in 0..graph.len() {
quick_graph[i] = QuickNode::from_node_elem(&graph, i);
}
let target = sorted_graph_get_node_idx_by_name(&graph, ['Z' as u8, 'Z' as u8, 'Z' as u8]) as u16;
let mut current = sorted_graph_get_node_idx_by_name(&graph, ['A' as u8, 'A' as u8, 'A' as u8]) as u16;
let mut jumps = 0;
let move_count = moves.len();
if verbose {
for (i, n) in graph.iter().enumerate() {
println!("{} : {} : {:?}", i, n, quick_graph[i]);
}
println!("Start: {:?}, Target: {:?}", current, target);
}
while current != target {
let move_idx = jumps % move_count;
match moves[move_idx] {
Move::Left => {
current = quick_graph[current as usize].left
},
Move::Right => {
current = quick_graph[current as usize].right
},
}
jumps += 1;
if verbose {
if jumps % 65536 == 0 {
println!("{}", jumps);
}
}
}
println!("Steps: {}", jumps);
}

@ -0,0 +1,161 @@
use crate::common::*;
use crate::lexer::*;
use crate::input_tools::*;
#[derive(Clone, Debug)]
pub struct Ghost {
current: usize,
step: usize,
exit_step1: usize,
exit_step2: usize,
}
impl Ghost {
pub fn new(start: usize) -> Self {
Self {
current: start,
step: 0,
exit_step1: 0,
exit_step2: 0,
}
}
pub fn advance(&mut self, graph: &[QuickNode; 750], next: Move, target: u16) {
self.step += 1;
match next{
Move::Left => {
self.current = graph[self.current].left as usize;
},
Move::Right => {
self.current = graph[self.current].right as usize;
}
}
if self.current >= target as usize {
if self.exit_step1 == 0 {
self.exit_step1 = self.step;
}
else if self.exit_step2 == 0 {
self.exit_step2 = self.step;
}
}
}
pub fn has_exited(&self) -> bool {
self.exit_step1 != 0 && self.exit_step2 != 0
}
}
pub fn all_exited(ghosts: &Vec<Ghost>) -> bool {
ghosts.iter().all(|x| x.has_exited())
}
pub fn all_targets_hit(current_state: &Vec<u16>, target: u16) -> bool {
*current_state.iter().min().unwrap() >= target
}
pub fn advance_all(ghosts: &mut Vec<Ghost>, graph: &[QuickNode; 750], next_move: Move, target: u16) {
for g in ghosts.iter_mut() {
if !g.has_exited() {
g.advance(graph, next_move, target);
}
}
}
pub fn gcd(mut a: usize, mut b: usize) -> usize {
if a == b { return a; }
if b > a {
(a, b) = (b, a);
}
while b > 0 {
(a, b) = (b, a%b);
}
a
}
pub fn lcm(a: usize, b: usize) -> usize {
(a*b)/gcd(a,b)
}
pub fn puzzle2(verbose: bool) {
println!("Part 2");
if verbose {
println!("");
}
let mut input = simple_stdin();
let line1 = input.next().unwrap();
let moves = Move::parse_moves(&line1);
if verbose {
println!("Moves: {:?}", moves);
}
let _line2 = input.next().unwrap();
let mut graph = vec![];
for line in input {
let tokens = tokenize_line(&line);
let node = Node::from_tokens(&mut tokens.iter());
graph.push(node);
}
let (mut a, nota): (Vec<Node>, Vec<Node>) = graph.iter().partition(|x| x.name[2] == 'A' as u8);
let (mut z, mut notz): (Vec<Node>, Vec<Node>) = nota.iter().partition(|x| x.name[2] == 'Z' as u8);
let start_count = a.len();
let regular_count = notz.len();
let target = start_count as u16 + regular_count as u16;
if start_count != z.len() { panic!("wrong number of starts") }
graph.clear();
graph.append(&mut a);
graph.append(&mut notz);
graph.append(&mut z);
let mut quick_graph = [QuickNode::default(); 750];
for i in 0..graph.len() {
quick_graph[i] = QuickNode::from_node_elem(&graph, i);
}
if verbose {
for (i, n) in graph.iter().enumerate() {
println!("{} : {} : {:?}", i, n, quick_graph[i]);
}
}
let mut jumps = 0;
let move_count = moves.len();
let mut ghosts: Vec<Ghost> = (0..start_count).map(|x| Ghost::new(x)).collect();
while !all_exited(&ghosts) {
let move_idx = jumps % move_count;
advance_all(&mut ghosts, &quick_graph, moves[move_idx], target);
jumps += 1;
}
let loop_vals: Vec<usize> = ghosts.iter().map(|g| g.exit_step2 - g.exit_step1).collect();
if verbose {
println!("Ghosties: ");
for (i, g) in ghosts.iter().enumerate() {
println!("{} -> {:?}", loop_vals[i], g);
}
}
let lcm = loop_vals.into_iter().reduce(|acc, x| lcm(acc, x)).unwrap();
println!("LCM: {}", lcm);
}
Loading…
Cancel
Save

Powered by TurnKey Linux.