Added day 19 code for part 1 and 2
Signed-off-by: Louis Vallat <louis@louis-vallat.xyz>
This commit is contained in:
parent
72e6d95933
commit
ed09479081
@ -93,3 +93,8 @@ day-18:
|
|||||||
stage: build
|
stage: build
|
||||||
script:
|
script:
|
||||||
- cd day18; cargo run --release ./input
|
- cd day18; cargo run --release ./input
|
||||||
|
|
||||||
|
day-19:
|
||||||
|
stage: build
|
||||||
|
script:
|
||||||
|
- cd day19; cargo run --release ./input
|
||||||
|
8
day19/Cargo.toml
Normal file
8
day19/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day19"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
857
day19/input
Normal file
857
day19/input
Normal file
@ -0,0 +1,857 @@
|
|||||||
|
--- scanner 0 ---
|
||||||
|
-594,397,693
|
||||||
|
-451,-583,331
|
||||||
|
-597,843,-847
|
||||||
|
-661,524,591
|
||||||
|
730,571,661
|
||||||
|
651,-549,-489
|
||||||
|
41,0,24
|
||||||
|
630,563,701
|
||||||
|
696,-602,543
|
||||||
|
-553,706,-847
|
||||||
|
-838,-658,-361
|
||||||
|
354,874,-727
|
||||||
|
125,167,100
|
||||||
|
-525,-540,451
|
||||||
|
-848,-529,-478
|
||||||
|
349,917,-644
|
||||||
|
-576,447,702
|
||||||
|
656,-361,-480
|
||||||
|
-403,-575,353
|
||||||
|
686,-447,-369
|
||||||
|
625,-510,651
|
||||||
|
-421,729,-852
|
||||||
|
-856,-616,-408
|
||||||
|
666,-425,576
|
||||||
|
703,540,868
|
||||||
|
385,731,-682
|
||||||
|
|
||||||
|
--- scanner 1 ---
|
||||||
|
560,474,-555
|
||||||
|
479,629,-526
|
||||||
|
-426,444,-864
|
||||||
|
325,-544,-582
|
||||||
|
365,-495,-573
|
||||||
|
672,-474,608
|
||||||
|
-439,442,-612
|
||||||
|
-887,-506,499
|
||||||
|
-431,-816,-652
|
||||||
|
-560,-824,-525
|
||||||
|
568,-500,758
|
||||||
|
-786,-558,418
|
||||||
|
804,739,574
|
||||||
|
-804,411,560
|
||||||
|
-654,460,580
|
||||||
|
494,408,-481
|
||||||
|
797,614,447
|
||||||
|
455,-566,-686
|
||||||
|
-464,-715,-596
|
||||||
|
825,740,572
|
||||||
|
547,-506,737
|
||||||
|
-327,440,-725
|
||||||
|
-776,422,551
|
||||||
|
-19,-173,-3
|
||||||
|
-856,-449,417
|
||||||
|
|
||||||
|
--- scanner 2 ---
|
||||||
|
479,583,-260
|
||||||
|
565,-830,543
|
||||||
|
-784,411,557
|
||||||
|
436,645,-355
|
||||||
|
397,414,625
|
||||||
|
723,-724,570
|
||||||
|
-625,478,-617
|
||||||
|
-902,-751,-590
|
||||||
|
-919,-899,-626
|
||||||
|
-523,-598,625
|
||||||
|
-2,-63,44
|
||||||
|
-192,-138,91
|
||||||
|
302,-614,-449
|
||||||
|
-916,-786,-624
|
||||||
|
-549,395,-481
|
||||||
|
327,450,569
|
||||||
|
316,-700,-320
|
||||||
|
-566,-674,492
|
||||||
|
585,-808,629
|
||||||
|
-744,377,527
|
||||||
|
-700,488,513
|
||||||
|
-525,399,-657
|
||||||
|
-670,-689,594
|
||||||
|
257,-546,-310
|
||||||
|
593,589,-352
|
||||||
|
447,469,651
|
||||||
|
|
||||||
|
--- scanner 3 ---
|
||||||
|
710,-694,815
|
||||||
|
903,381,694
|
||||||
|
657,478,-524
|
||||||
|
-518,-827,-571
|
||||||
|
553,493,-422
|
||||||
|
-270,621,380
|
||||||
|
-736,443,-500
|
||||||
|
522,-699,-738
|
||||||
|
-329,467,390
|
||||||
|
611,-753,887
|
||||||
|
-498,-654,336
|
||||||
|
-578,337,-473
|
||||||
|
-630,-769,-453
|
||||||
|
-598,359,-559
|
||||||
|
906,268,696
|
||||||
|
595,-812,-722
|
||||||
|
-495,-556,454
|
||||||
|
510,569,-555
|
||||||
|
496,-735,-673
|
||||||
|
889,416,660
|
||||||
|
516,-708,800
|
||||||
|
-525,-828,-499
|
||||||
|
-315,553,519
|
||||||
|
125,-167,93
|
||||||
|
16,-15,13
|
||||||
|
-370,-655,495
|
||||||
|
|
||||||
|
--- scanner 4 ---
|
||||||
|
561,-530,-578
|
||||||
|
518,836,898
|
||||||
|
-765,-682,897
|
||||||
|
738,-500,-611
|
||||||
|
84,74,9
|
||||||
|
810,681,-732
|
||||||
|
461,642,874
|
||||||
|
-620,444,957
|
||||||
|
380,-730,787
|
||||||
|
-427,-566,-453
|
||||||
|
422,-564,848
|
||||||
|
-404,-493,-286
|
||||||
|
646,-571,-503
|
||||||
|
-613,773,-672
|
||||||
|
476,645,904
|
||||||
|
681,556,-764
|
||||||
|
-452,398,888
|
||||||
|
-713,-797,796
|
||||||
|
-435,-466,-493
|
||||||
|
831,660,-738
|
||||||
|
-500,863,-743
|
||||||
|
-509,903,-694
|
||||||
|
-830,-722,811
|
||||||
|
-537,495,906
|
||||||
|
408,-627,767
|
||||||
|
|
||||||
|
--- scanner 5 ---
|
||||||
|
-749,-404,454
|
||||||
|
600,598,580
|
||||||
|
-764,-722,-519
|
||||||
|
-875,-376,579
|
||||||
|
-540,572,619
|
||||||
|
-874,-397,581
|
||||||
|
-609,-641,-548
|
||||||
|
431,-746,-679
|
||||||
|
365,-633,765
|
||||||
|
339,-529,615
|
||||||
|
-420,537,517
|
||||||
|
610,493,-501
|
||||||
|
371,-654,744
|
||||||
|
650,593,-493
|
||||||
|
492,527,672
|
||||||
|
-24,-64,49
|
||||||
|
-695,874,-847
|
||||||
|
-127,84,-93
|
||||||
|
-531,567,431
|
||||||
|
-543,-707,-474
|
||||||
|
-778,869,-804
|
||||||
|
-733,838,-661
|
||||||
|
525,557,495
|
||||||
|
409,-876,-575
|
||||||
|
360,-836,-566
|
||||||
|
817,520,-470
|
||||||
|
|
||||||
|
--- scanner 6 ---
|
||||||
|
713,-860,-483
|
||||||
|
-565,-584,-526
|
||||||
|
100,-153,47
|
||||||
|
-482,692,399
|
||||||
|
-286,-557,524
|
||||||
|
822,486,680
|
||||||
|
611,-926,794
|
||||||
|
-663,-602,-640
|
||||||
|
-588,385,-667
|
||||||
|
914,492,566
|
||||||
|
557,597,-538
|
||||||
|
-600,596,-670
|
||||||
|
619,-807,-494
|
||||||
|
-655,774,415
|
||||||
|
-515,-597,533
|
||||||
|
819,430,523
|
||||||
|
-551,-666,-726
|
||||||
|
693,680,-462
|
||||||
|
-598,750,484
|
||||||
|
598,-862,-374
|
||||||
|
-608,455,-544
|
||||||
|
517,676,-438
|
||||||
|
-330,-610,594
|
||||||
|
577,-849,775
|
||||||
|
-5,-41,-71
|
||||||
|
547,-951,862
|
||||||
|
|
||||||
|
--- scanner 7 ---
|
||||||
|
347,-463,316
|
||||||
|
37,47,-20
|
||||||
|
-409,-753,-482
|
||||||
|
487,-380,-338
|
||||||
|
-866,443,-723
|
||||||
|
417,442,795
|
||||||
|
-638,-290,735
|
||||||
|
339,-411,364
|
||||||
|
295,-397,-338
|
||||||
|
-546,-740,-576
|
||||||
|
313,-463,-352
|
||||||
|
279,553,-771
|
||||||
|
-814,544,-838
|
||||||
|
375,436,604
|
||||||
|
-621,-276,818
|
||||||
|
-131,93,71
|
||||||
|
360,466,601
|
||||||
|
-427,-818,-485
|
||||||
|
-647,-495,786
|
||||||
|
-638,434,454
|
||||||
|
-721,383,403
|
||||||
|
321,492,-605
|
||||||
|
381,-538,307
|
||||||
|
-553,452,357
|
||||||
|
307,573,-668
|
||||||
|
-931,529,-763
|
||||||
|
|
||||||
|
--- scanner 8 ---
|
||||||
|
-851,737,-565
|
||||||
|
468,-753,-432
|
||||||
|
644,-742,574
|
||||||
|
-826,811,-521
|
||||||
|
470,612,765
|
||||||
|
603,790,-395
|
||||||
|
-397,-456,784
|
||||||
|
469,768,-379
|
||||||
|
387,442,803
|
||||||
|
-760,789,-468
|
||||||
|
-811,-501,-674
|
||||||
|
48,-160,0
|
||||||
|
699,-792,548
|
||||||
|
663,-862,492
|
||||||
|
530,-710,-337
|
||||||
|
354,794,-363
|
||||||
|
-125,-20,-33
|
||||||
|
-752,315,722
|
||||||
|
-888,-482,-640
|
||||||
|
-813,431,779
|
||||||
|
-913,-414,-704
|
||||||
|
-465,-607,847
|
||||||
|
524,-596,-429
|
||||||
|
299,529,760
|
||||||
|
-377,-643,805
|
||||||
|
-749,371,855
|
||||||
|
|
||||||
|
--- scanner 9 ---
|
||||||
|
-809,-724,-432
|
||||||
|
592,728,-735
|
||||||
|
-510,726,361
|
||||||
|
-872,-608,-395
|
||||||
|
-481,864,341
|
||||||
|
-639,727,-781
|
||||||
|
561,620,361
|
||||||
|
597,650,379
|
||||||
|
747,616,345
|
||||||
|
514,-386,-686
|
||||||
|
712,-382,-620
|
||||||
|
501,-755,571
|
||||||
|
438,641,-767
|
||||||
|
405,-768,421
|
||||||
|
-858,-603,-430
|
||||||
|
-70,109,-125
|
||||||
|
-435,860,415
|
||||||
|
-771,-746,729
|
||||||
|
-555,804,-737
|
||||||
|
522,656,-585
|
||||||
|
-831,-620,822
|
||||||
|
-81,-15,69
|
||||||
|
-595,838,-767
|
||||||
|
625,-261,-632
|
||||||
|
-886,-729,828
|
||||||
|
479,-683,438
|
||||||
|
|
||||||
|
--- scanner 10 ---
|
||||||
|
881,663,713
|
||||||
|
-677,-726,-668
|
||||||
|
538,-558,-909
|
||||||
|
404,-483,-855
|
||||||
|
813,-747,329
|
||||||
|
-753,-461,502
|
||||||
|
-762,-650,-629
|
||||||
|
-854,-740,-677
|
||||||
|
648,699,-925
|
||||||
|
-873,498,-874
|
||||||
|
-693,-539,543
|
||||||
|
644,513,-909
|
||||||
|
-752,692,432
|
||||||
|
-573,-457,481
|
||||||
|
20,-167,-56
|
||||||
|
614,549,-891
|
||||||
|
801,-728,320
|
||||||
|
802,-904,423
|
||||||
|
-758,544,524
|
||||||
|
400,-529,-929
|
||||||
|
-783,387,-810
|
||||||
|
825,660,670
|
||||||
|
-897,489,-883
|
||||||
|
840,642,633
|
||||||
|
-785,624,530
|
||||||
|
-90,-17,-180
|
||||||
|
|
||||||
|
--- scanner 11 ---
|
||||||
|
-55,84,120
|
||||||
|
383,423,-460
|
||||||
|
348,-628,-638
|
||||||
|
-734,-705,-302
|
||||||
|
569,-829,498
|
||||||
|
-634,422,900
|
||||||
|
-143,-36,27
|
||||||
|
-768,-740,-288
|
||||||
|
383,620,573
|
||||||
|
-770,-853,-285
|
||||||
|
-584,-636,606
|
||||||
|
415,533,727
|
||||||
|
565,605,657
|
||||||
|
-702,382,927
|
||||||
|
492,-856,638
|
||||||
|
-750,388,887
|
||||||
|
413,457,-420
|
||||||
|
-566,-546,639
|
||||||
|
-801,445,-679
|
||||||
|
-761,524,-579
|
||||||
|
481,-552,-681
|
||||||
|
-668,-630,636
|
||||||
|
369,534,-504
|
||||||
|
-625,441,-655
|
||||||
|
450,-643,-534
|
||||||
|
576,-774,631
|
||||||
|
|
||||||
|
--- scanner 12 ---
|
||||||
|
-965,-651,-291
|
||||||
|
675,621,-532
|
||||||
|
341,345,727
|
||||||
|
701,436,-619
|
||||||
|
-523,483,917
|
||||||
|
-925,-701,-381
|
||||||
|
423,-662,-330
|
||||||
|
-97,-57,82
|
||||||
|
-626,522,926
|
||||||
|
-617,-714,416
|
||||||
|
623,-582,490
|
||||||
|
375,489,727
|
||||||
|
763,601,-604
|
||||||
|
380,-631,-342
|
||||||
|
-598,-603,550
|
||||||
|
-872,-648,-484
|
||||||
|
-595,-557,449
|
||||||
|
585,-564,593
|
||||||
|
-882,368,-270
|
||||||
|
-925,420,-460
|
||||||
|
-911,390,-258
|
||||||
|
556,-524,395
|
||||||
|
468,-691,-253
|
||||||
|
-703,542,962
|
||||||
|
351,473,678
|
||||||
|
|
||||||
|
--- scanner 13 ---
|
||||||
|
-600,-593,480
|
||||||
|
-388,-344,-865
|
||||||
|
-711,624,322
|
||||||
|
719,-602,-590
|
||||||
|
-804,740,-434
|
||||||
|
832,427,-610
|
||||||
|
-65,77,-30
|
||||||
|
-644,-690,357
|
||||||
|
565,-704,548
|
||||||
|
-544,-298,-850
|
||||||
|
-780,797,-628
|
||||||
|
-497,-310,-793
|
||||||
|
-810,782,-625
|
||||||
|
-649,549,390
|
||||||
|
109,-60,58
|
||||||
|
515,-735,488
|
||||||
|
826,448,-589
|
||||||
|
455,-671,399
|
||||||
|
883,768,814
|
||||||
|
826,686,845
|
||||||
|
779,-568,-700
|
||||||
|
-553,-771,482
|
||||||
|
858,577,-714
|
||||||
|
835,-690,-669
|
||||||
|
-656,754,352
|
||||||
|
774,767,744
|
||||||
|
|
||||||
|
--- scanner 14 ---
|
||||||
|
752,-458,532
|
||||||
|
-612,-635,-844
|
||||||
|
383,-370,-637
|
||||||
|
-641,-643,368
|
||||||
|
18,72,-67
|
||||||
|
621,-442,593
|
||||||
|
680,-645,557
|
||||||
|
-778,702,603
|
||||||
|
-703,-712,366
|
||||||
|
350,579,624
|
||||||
|
-585,644,-791
|
||||||
|
321,-320,-693
|
||||||
|
-746,548,516
|
||||||
|
-550,-539,-840
|
||||||
|
385,594,-893
|
||||||
|
-378,-637,-814
|
||||||
|
-592,777,-846
|
||||||
|
334,393,628
|
||||||
|
-596,618,588
|
||||||
|
449,705,-803
|
||||||
|
376,603,-917
|
||||||
|
-669,637,-873
|
||||||
|
366,-445,-773
|
||||||
|
368,543,594
|
||||||
|
-720,-840,359
|
||||||
|
|
||||||
|
--- scanner 15 ---
|
||||||
|
-765,498,475
|
||||||
|
612,-411,653
|
||||||
|
-12,130,-66
|
||||||
|
-569,-479,650
|
||||||
|
309,-718,-754
|
||||||
|
-128,16,-175
|
||||||
|
-905,-715,-446
|
||||||
|
295,-753,-759
|
||||||
|
-651,406,481
|
||||||
|
289,722,-873
|
||||||
|
-879,709,-937
|
||||||
|
572,-381,687
|
||||||
|
353,803,665
|
||||||
|
377,627,669
|
||||||
|
-608,501,419
|
||||||
|
-499,-423,614
|
||||||
|
-619,-505,595
|
||||||
|
358,-716,-875
|
||||||
|
453,763,586
|
||||||
|
409,701,-818
|
||||||
|
-947,773,-962
|
||||||
|
-860,743,-860
|
||||||
|
-754,-778,-514
|
||||||
|
528,-367,576
|
||||||
|
-718,-736,-426
|
||||||
|
398,607,-871
|
||||||
|
|
||||||
|
--- scanner 16 ---
|
||||||
|
-624,-579,-747
|
||||||
|
700,461,-545
|
||||||
|
516,593,232
|
||||||
|
595,648,288
|
||||||
|
-367,-350,437
|
||||||
|
-450,-388,607
|
||||||
|
417,-369,-461
|
||||||
|
-279,-393,524
|
||||||
|
-698,649,683
|
||||||
|
-643,-661,-867
|
||||||
|
-634,828,-826
|
||||||
|
-42,-55,-43
|
||||||
|
485,-306,-612
|
||||||
|
-463,754,-776
|
||||||
|
397,-348,-648
|
||||||
|
-679,-605,-797
|
||||||
|
96,84,-153
|
||||||
|
772,588,-461
|
||||||
|
451,711,296
|
||||||
|
774,543,-518
|
||||||
|
833,-374,426
|
||||||
|
-823,583,641
|
||||||
|
-676,614,537
|
||||||
|
772,-431,310
|
||||||
|
-364,800,-825
|
||||||
|
769,-298,366
|
||||||
|
|
||||||
|
--- scanner 17 ---
|
||||||
|
-535,-668,-567
|
||||||
|
-643,495,929
|
||||||
|
719,-570,605
|
||||||
|
572,-601,696
|
||||||
|
-634,486,953
|
||||||
|
-593,-475,827
|
||||||
|
384,440,-344
|
||||||
|
-689,-636,-480
|
||||||
|
-694,478,-558
|
||||||
|
-619,-486,-552
|
||||||
|
338,514,-348
|
||||||
|
-460,-482,882
|
||||||
|
498,-668,-370
|
||||||
|
-600,-559,909
|
||||||
|
595,692,910
|
||||||
|
-658,460,-588
|
||||||
|
505,740,818
|
||||||
|
16,143,132
|
||||||
|
413,460,-482
|
||||||
|
581,701,733
|
||||||
|
542,-682,-481
|
||||||
|
458,-638,-404
|
||||||
|
-844,444,-592
|
||||||
|
-532,559,839
|
||||||
|
-105,25,44
|
||||||
|
676,-703,681
|
||||||
|
|
||||||
|
--- scanner 18 ---
|
||||||
|
-646,448,-358
|
||||||
|
421,-453,552
|
||||||
|
611,592,834
|
||||||
|
-668,-586,773
|
||||||
|
-794,510,-405
|
||||||
|
-550,432,452
|
||||||
|
-618,472,479
|
||||||
|
648,561,653
|
||||||
|
384,630,-628
|
||||||
|
338,-471,611
|
||||||
|
-584,-580,743
|
||||||
|
-711,659,-371
|
||||||
|
673,546,767
|
||||||
|
-590,-476,-272
|
||||||
|
596,-648,-389
|
||||||
|
433,457,-559
|
||||||
|
456,-496,563
|
||||||
|
656,-736,-522
|
||||||
|
-468,-470,-245
|
||||||
|
498,676,-566
|
||||||
|
-502,438,492
|
||||||
|
640,-637,-412
|
||||||
|
13,78,59
|
||||||
|
-686,-496,740
|
||||||
|
-428,-603,-267
|
||||||
|
|
||||||
|
--- scanner 19 ---
|
||||||
|
-535,718,531
|
||||||
|
759,469,-617
|
||||||
|
49,6,-150
|
||||||
|
-647,632,595
|
||||||
|
873,-717,-496
|
||||||
|
-291,693,-778
|
||||||
|
-549,518,613
|
||||||
|
-405,771,-809
|
||||||
|
-270,-532,640
|
||||||
|
635,486,390
|
||||||
|
-349,811,-862
|
||||||
|
729,475,337
|
||||||
|
795,-867,-501
|
||||||
|
-586,-492,-476
|
||||||
|
-729,-621,-473
|
||||||
|
593,-783,348
|
||||||
|
-499,-541,600
|
||||||
|
614,366,335
|
||||||
|
-38,-71,17
|
||||||
|
563,-870,246
|
||||||
|
-708,-633,-457
|
||||||
|
837,-715,-605
|
||||||
|
627,-802,271
|
||||||
|
657,401,-631
|
||||||
|
-314,-602,587
|
||||||
|
744,319,-742
|
||||||
|
|
||||||
|
--- scanner 20 ---
|
||||||
|
118,-4,-45
|
||||||
|
-313,-645,461
|
||||||
|
-371,-761,376
|
||||||
|
492,433,672
|
||||||
|
725,-694,306
|
||||||
|
842,470,-625
|
||||||
|
-593,271,-452
|
||||||
|
852,342,-674
|
||||||
|
-597,410,-353
|
||||||
|
-563,580,534
|
||||||
|
-595,523,-465
|
||||||
|
813,-634,395
|
||||||
|
518,618,585
|
||||||
|
-629,654,468
|
||||||
|
-608,-635,-567
|
||||||
|
-1,-181,-107
|
||||||
|
570,-585,-437
|
||||||
|
637,-527,-342
|
||||||
|
608,-567,-540
|
||||||
|
-408,609,453
|
||||||
|
-678,-655,-690
|
||||||
|
430,598,657
|
||||||
|
-289,-588,392
|
||||||
|
818,486,-674
|
||||||
|
770,-665,383
|
||||||
|
-467,-643,-693
|
||||||
|
|
||||||
|
--- scanner 21 ---
|
||||||
|
-814,-466,669
|
||||||
|
425,811,436
|
||||||
|
-460,911,-535
|
||||||
|
-500,884,-603
|
||||||
|
558,590,-653
|
||||||
|
662,-304,-469
|
||||||
|
434,-719,739
|
||||||
|
-602,-595,-476
|
||||||
|
468,800,471
|
||||||
|
468,623,-671
|
||||||
|
-519,-671,-612
|
||||||
|
-574,596,688
|
||||||
|
-589,710,663
|
||||||
|
-523,-695,-436
|
||||||
|
501,-814,797
|
||||||
|
443,752,353
|
||||||
|
-603,-463,681
|
||||||
|
-744,-589,689
|
||||||
|
472,-616,757
|
||||||
|
-75,109,56
|
||||||
|
-620,529,626
|
||||||
|
627,-318,-503
|
||||||
|
-466,871,-487
|
||||||
|
552,620,-569
|
||||||
|
775,-301,-467
|
||||||
|
|
||||||
|
--- scanner 22 ---
|
||||||
|
913,595,571
|
||||||
|
80,66,-93
|
||||||
|
-752,-661,-816
|
||||||
|
-504,563,-357
|
||||||
|
703,696,-638
|
||||||
|
-480,486,-489
|
||||||
|
-543,504,-522
|
||||||
|
-562,-609,-859
|
||||||
|
-384,650,330
|
||||||
|
948,-550,562
|
||||||
|
831,666,546
|
||||||
|
851,-578,416
|
||||||
|
897,-559,-689
|
||||||
|
-490,-408,741
|
||||||
|
-418,-428,829
|
||||||
|
-477,572,302
|
||||||
|
-764,-639,-845
|
||||||
|
846,593,-665
|
||||||
|
986,-684,-672
|
||||||
|
36,185,57
|
||||||
|
-403,-593,767
|
||||||
|
-416,607,354
|
||||||
|
884,584,439
|
||||||
|
732,-583,568
|
||||||
|
703,652,-622
|
||||||
|
880,-756,-726
|
||||||
|
|
||||||
|
--- scanner 23 ---
|
||||||
|
-602,652,-708
|
||||||
|
-729,781,-700
|
||||||
|
-942,-759,-577
|
||||||
|
434,-593,570
|
||||||
|
422,325,-390
|
||||||
|
483,408,527
|
||||||
|
-424,-783,440
|
||||||
|
340,356,-333
|
||||||
|
-77,37,73
|
||||||
|
474,436,538
|
||||||
|
440,-799,-469
|
||||||
|
341,426,-442
|
||||||
|
-673,748,-599
|
||||||
|
445,-797,-552
|
||||||
|
503,558,576
|
||||||
|
-565,-858,471
|
||||||
|
-689,773,558
|
||||||
|
428,-800,646
|
||||||
|
-818,-808,-561
|
||||||
|
416,-776,-520
|
||||||
|
-941,786,560
|
||||||
|
512,-688,549
|
||||||
|
-802,885,556
|
||||||
|
-870,-728,-568
|
||||||
|
-613,-726,424
|
||||||
|
|
||||||
|
--- scanner 24 ---
|
||||||
|
616,666,-720
|
||||||
|
559,-451,438
|
||||||
|
653,780,380
|
||||||
|
-725,733,-842
|
||||||
|
-686,657,-757
|
||||||
|
718,562,-705
|
||||||
|
-820,-373,698
|
||||||
|
585,-401,383
|
||||||
|
667,-569,-861
|
||||||
|
-425,854,320
|
||||||
|
-445,825,458
|
||||||
|
-848,-372,428
|
||||||
|
683,740,346
|
||||||
|
-744,-322,-718
|
||||||
|
581,-589,-839
|
||||||
|
-686,-382,-817
|
||||||
|
-499,900,324
|
||||||
|
641,-331,419
|
||||||
|
-694,-315,-874
|
||||||
|
585,519,-629
|
||||||
|
640,-727,-755
|
||||||
|
-774,-422,599
|
||||||
|
-63,69,-70
|
||||||
|
-677,643,-934
|
||||||
|
697,696,457
|
||||||
|
|
||||||
|
--- scanner 25 ---
|
||||||
|
674,721,-553
|
||||||
|
-334,789,662
|
||||||
|
602,-473,579
|
||||||
|
-695,-823,616
|
||||||
|
6,6,-9
|
||||||
|
-682,-410,-584
|
||||||
|
841,401,569
|
||||||
|
-680,-885,451
|
||||||
|
814,723,-484
|
||||||
|
-618,433,-463
|
||||||
|
801,-846,-654
|
||||||
|
824,660,-585
|
||||||
|
-714,-386,-627
|
||||||
|
651,-463,707
|
||||||
|
651,-497,563
|
||||||
|
850,504,530
|
||||||
|
-536,803,632
|
||||||
|
-346,760,684
|
||||||
|
-621,-358,-549
|
||||||
|
-555,466,-481
|
||||||
|
-594,301,-540
|
||||||
|
847,-905,-646
|
||||||
|
-608,-797,431
|
||||||
|
818,-945,-832
|
||||||
|
886,581,510
|
||||||
|
|
||||||
|
--- scanner 26 ---
|
||||||
|
-509,460,-504
|
||||||
|
596,-943,651
|
||||||
|
-393,-890,-842
|
||||||
|
-353,-804,-907
|
||||||
|
782,570,-465
|
||||||
|
705,-460,-568
|
||||||
|
-345,-780,303
|
||||||
|
524,808,634
|
||||||
|
644,-782,676
|
||||||
|
542,-754,603
|
||||||
|
52,-106,-94
|
||||||
|
646,710,599
|
||||||
|
-504,510,569
|
||||||
|
-582,293,-481
|
||||||
|
190,-89,58
|
||||||
|
697,459,-388
|
||||||
|
-545,585,484
|
||||||
|
659,-667,-613
|
||||||
|
645,-493,-541
|
||||||
|
715,468,-338
|
||||||
|
-511,-841,345
|
||||||
|
-278,-789,-790
|
||||||
|
-609,500,-512
|
||||||
|
-575,618,661
|
||||||
|
572,830,642
|
||||||
|
-448,-760,331
|
||||||
|
|
||||||
|
--- scanner 27 ---
|
||||||
|
655,601,-428
|
||||||
|
-587,941,-352
|
||||||
|
-727,-430,-470
|
||||||
|
581,667,-494
|
||||||
|
484,-623,497
|
||||||
|
554,-351,-259
|
||||||
|
-642,763,733
|
||||||
|
-760,859,-336
|
||||||
|
563,-302,-299
|
||||||
|
450,-373,-389
|
||||||
|
524,635,505
|
||||||
|
-634,622,607
|
||||||
|
-677,-417,589
|
||||||
|
-912,-443,-531
|
||||||
|
610,822,-413
|
||||||
|
-579,-435,703
|
||||||
|
-109,111,68
|
||||||
|
272,637,492
|
||||||
|
411,633,393
|
||||||
|
611,-631,626
|
||||||
|
-691,-499,789
|
||||||
|
-644,917,-421
|
||||||
|
-654,552,730
|
||||||
|
540,-522,530
|
||||||
|
-956,-390,-461
|
||||||
|
|
||||||
|
--- scanner 28 ---
|
||||||
|
549,558,-705
|
||||||
|
-358,771,-570
|
||||||
|
-599,-543,-592
|
||||||
|
987,-345,-830
|
||||||
|
-399,672,-445
|
||||||
|
-704,619,441
|
||||||
|
-575,-405,-631
|
||||||
|
769,592,421
|
||||||
|
-553,-568,794
|
||||||
|
818,515,520
|
||||||
|
595,499,-600
|
||||||
|
834,628,447
|
||||||
|
749,-476,817
|
||||||
|
-791,574,536
|
||||||
|
667,500,-593
|
||||||
|
46,-19,65
|
||||||
|
761,-356,681
|
||||||
|
744,-569,703
|
||||||
|
-628,-726,803
|
||||||
|
171,27,-72
|
||||||
|
921,-320,-745
|
||||||
|
-541,-437,-576
|
||||||
|
833,-393,-860
|
||||||
|
-240,673,-573
|
||||||
|
-536,-553,833
|
||||||
|
-719,633,635
|
||||||
|
|
||||||
|
--- scanner 29 ---
|
||||||
|
453,-648,732
|
||||||
|
357,421,614
|
||||||
|
-572,366,-732
|
||||||
|
275,437,787
|
||||||
|
619,545,-687
|
||||||
|
-651,-297,848
|
||||||
|
594,-522,740
|
||||||
|
369,-440,-561
|
||||||
|
-640,411,-593
|
||||||
|
-784,428,710
|
||||||
|
-584,-392,790
|
||||||
|
-777,-793,-452
|
||||||
|
-726,425,-722
|
||||||
|
-622,-495,808
|
||||||
|
-925,-810,-416
|
||||||
|
452,-516,-425
|
||||||
|
-827,440,741
|
||||||
|
-164,106,178
|
||||||
|
299,506,730
|
||||||
|
-812,-807,-418
|
||||||
|
563,702,-690
|
||||||
|
15,-56,45
|
||||||
|
557,588,-782
|
||||||
|
373,-416,-385
|
||||||
|
664,-645,720
|
||||||
|
-739,351,681
|
||||||
|
|
||||||
|
--- scanner 30 ---
|
||||||
|
415,780,-484
|
||||||
|
570,-850,-776
|
||||||
|
609,756,-427
|
||||||
|
853,770,486
|
||||||
|
478,-790,647
|
||||||
|
695,-882,-647
|
||||||
|
-864,-850,-538
|
||||||
|
-441,-641,557
|
||||||
|
71,24,16
|
||||||
|
606,786,-442
|
||||||
|
-416,728,429
|
||||||
|
-833,-907,-456
|
||||||
|
756,788,571
|
||||||
|
348,-812,543
|
||||||
|
388,-861,534
|
||||||
|
807,839,654
|
||||||
|
-341,687,-600
|
||||||
|
-763,-798,-457
|
||||||
|
-408,-540,613
|
||||||
|
591,-856,-797
|
||||||
|
-530,710,493
|
||||||
|
12,-115,-109
|
||||||
|
-400,768,600
|
||||||
|
-371,632,-470
|
||||||
|
-537,-532,486
|
||||||
|
-409,625,-675
|
175
day19/src/main.rs
Normal file
175
day19/src/main.rs
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
use std::{fs, env, collections::{HashMap, HashSet}};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Scanner {
|
||||||
|
pub x: i32,
|
||||||
|
pub y: i32,
|
||||||
|
pub z: i32,
|
||||||
|
pub b: Vec<(i32, i32, i32)>,
|
||||||
|
pub c: HashMap<((i32, i32, i32), (i32, i32, i32)), ((i32, i32, i32), (i32, i32, i32))>
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_input(path: &str) -> String {
|
||||||
|
return fs::read_to_string(path).expect("Cannot read file.");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_input(s: &str) -> Vec<Scanner> {
|
||||||
|
let mut v: Vec<Scanner> = vec![];
|
||||||
|
|
||||||
|
for l in s.lines() {
|
||||||
|
if l.starts_with("--- scanner ") {
|
||||||
|
v.push(Scanner {x: 0, y: 0, z: 0, b: vec![], c: HashMap::new()});
|
||||||
|
} else if !l.is_empty() {
|
||||||
|
let t = l.split(",").filter_map(|e| e.parse().ok())
|
||||||
|
.collect::<Vec<i32>>();
|
||||||
|
v.last_mut().unwrap().b.push((t[0], t[1], t[2]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for s in v.iter_mut() {
|
||||||
|
populate_distances_tuples(s);
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn populate_distances_tuples(s: &mut Scanner) {
|
||||||
|
s.c.clear();
|
||||||
|
for e in s.b.clone() {
|
||||||
|
for f in s.b.clone() {
|
||||||
|
if e != f && !s.c.contains_key(&(f, e)) {
|
||||||
|
let mut d = vec![(e.0 - f.0).abs(), (e.1 - f.1).abs(), (e.2 - f.2).abs()];
|
||||||
|
let u = vec![(e.0 - f.0), (e.1 - f.1), (e.2 - f.2)];
|
||||||
|
d.sort();
|
||||||
|
s.c.insert((e, f), ((d[0], d[1], d[2]), (u[0], u[1], u[2])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rotate(c: &(i32, i32, i32), r: u8) -> (i32, i32, i32) {
|
||||||
|
let (x, y, z) = *c;
|
||||||
|
return match r {
|
||||||
|
1 => { (x, z, -y) }
|
||||||
|
2 => { (x, -y, -z) }
|
||||||
|
3 => { (x, -z, -y) }
|
||||||
|
4 => { (x, -z, y) }
|
||||||
|
5 => { (-x, -y, z) }
|
||||||
|
6 => { (-x, z, y) }
|
||||||
|
7 => { (-x, y, -z) }
|
||||||
|
8 => { (-x, -z, -y) }
|
||||||
|
9 => { (y, z, x) }
|
||||||
|
10 => { (y, x, -z) }
|
||||||
|
11 => { (y, -z, -x) }
|
||||||
|
12 => { (y, -x, z) }
|
||||||
|
13 => { (-y, -z, x) }
|
||||||
|
14 => { (-y, x, z) }
|
||||||
|
15 => { (-y, z, -x) }
|
||||||
|
16 => { (-y, -x, -z) }
|
||||||
|
17 => { (z, x, y) }
|
||||||
|
18 => { (z, y, -x) }
|
||||||
|
19 => { (z, -x, -y) }
|
||||||
|
20 => { (z, -y, x) }
|
||||||
|
21 => { (-z, -x, y) }
|
||||||
|
22 => { (-z, y, x) }
|
||||||
|
23 => { (-z, x, -y) }
|
||||||
|
24 => { (-z, -y, -x) }
|
||||||
|
_ => { (x, y, z) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn find_rotation(d1: &(i32, i32, i32), d2: &(i32, i32, i32)) -> u8 {
|
||||||
|
for r in 0..=24 {
|
||||||
|
if *d1 == rotate(d2, r) { return r; }
|
||||||
|
}
|
||||||
|
return u8::MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn find_corres(s1: &Scanner, s2: &Scanner, t: usize) -> Option<(HashMap<(i32, i32, i32), (i32, i32, i32)>, u8)> {
|
||||||
|
let mut a = 0;
|
||||||
|
let mut r = u8::MAX;
|
||||||
|
let mut c = HashMap::new();
|
||||||
|
let mut p: HashMap<(i32, i32, i32), HashSet<(i32, i32, i32)>> = HashMap::new();
|
||||||
|
for d1 in s1.c.clone().into_iter() {
|
||||||
|
for d2 in s2.c.clone().into_iter() {
|
||||||
|
if d1.1.0 == d2.1.0 {
|
||||||
|
a += 1;
|
||||||
|
if !c.contains_key(&d1.0.0) {
|
||||||
|
if !p.contains_key(&d1.0.0) { p.insert(d1.0.0, HashSet::new()); }
|
||||||
|
if p.get(&d1.0.0).unwrap().contains(&d2.0.0) && !p.get(&d1.0.0).unwrap().contains(&d2.0.1) {
|
||||||
|
r = find_rotation(&d1.1.1, &d2.1.1);
|
||||||
|
c.insert(d1.0.0, d2.0.0);
|
||||||
|
} else {
|
||||||
|
p.get_mut(&d1.0.0).unwrap().insert(d2.0.0);
|
||||||
|
p.get_mut(&d1.0.0).unwrap().insert(d2.0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return if a >= (t * (t - 1) / 2) { Some((c, r)) } else { None };
|
||||||
|
}
|
||||||
|
|
||||||
|
fn compute_absolute(v: &mut Vec<Scanner>, f: usize, a: &mut Vec<bool>) {
|
||||||
|
a[f] = true;
|
||||||
|
for i in 0..v.len() {
|
||||||
|
if i != f && !a[i] {
|
||||||
|
let c = find_corres(&v[f], &v[i], 12);
|
||||||
|
if c.is_some() {
|
||||||
|
let (h, r) = c.unwrap();
|
||||||
|
if r == u8::MAX { panic!(); }
|
||||||
|
let (g, x) = h.into_iter().last().unwrap();
|
||||||
|
let t = rotate(&x, r);
|
||||||
|
v[i].x = g.0 - t.0;
|
||||||
|
v[i].y = g.1 - t.1;
|
||||||
|
v[i].z = g.2 - t.2;
|
||||||
|
for (j, b) in v[i].b.clone().iter().enumerate() {
|
||||||
|
v[i].b[j] = rotate(&b, r);
|
||||||
|
v[i].b[j].0 += v[i].x;
|
||||||
|
v[i].b[j].1 += v[i].y;
|
||||||
|
v[i].b[j].2 += v[i].z;
|
||||||
|
}
|
||||||
|
populate_distances_tuples(&mut v[i]);
|
||||||
|
compute_absolute(v, i, a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn count_unique_coordinates(v: &Vec<Scanner>) -> usize {
|
||||||
|
let mut c = HashSet::new();
|
||||||
|
for s in v.iter() {
|
||||||
|
for b in s.b.iter() {
|
||||||
|
c.insert(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return c.len();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_max_manhattan_distance(v: &Vec<Scanner>) -> i32 {
|
||||||
|
let mut i = i32::MIN;
|
||||||
|
|
||||||
|
for s1 in v.iter() {
|
||||||
|
for s2 in v.iter() {
|
||||||
|
i = std::cmp::max(i, (s1.x - s2.x).abs() +
|
||||||
|
(s1.y - s2.y).abs() +
|
||||||
|
(s1.z - s2.z).abs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
for arg in args.iter().skip(1) {
|
||||||
|
let input = read_input(&arg);
|
||||||
|
let mut vec_in = parse_input(&input);
|
||||||
|
let nb_scanner = vec_in.len();
|
||||||
|
populate_distances_tuples(&mut vec_in[0]);
|
||||||
|
compute_absolute(&mut vec_in, 0, &mut vec![false; nb_scanner]);
|
||||||
|
println!("[{}]", &arg);
|
||||||
|
println!("\t[Part 1] => Answer is '{}'.", count_unique_coordinates(&vec_in));
|
||||||
|
println!("\t[Part 2] => Answer is '{}'.", get_max_manhattan_distance(&vec_in));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user