summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMia Herkt <mia@0x0.st>2021-12-20 08:14:34 +0100
committerMia Herkt <mia@0x0.st>2021-12-20 08:14:34 +0100
commit7a2aa865cc537d5da29ec8bdcac51205a878d876 (patch)
tree3bb42ef75377076c04cf071a317e3098b732f2d9
parent4e22e92c78212f9df2b7337524054c24c4496403 (diff)
downloadaoc2021-7a2aa865cc537d5da29ec8bdcac51205a878d876.tar.bz2
aoc2021-7a2aa865cc537d5da29ec8bdcac51205a878d876.tar.xz
Day 19: Add C solution
-rw-r--r--19/input.txt949
-rw-r--r--19/solution.c129
2 files changed, 1078 insertions, 0 deletions
diff --git a/19/input.txt b/19/input.txt
new file mode 100644
index 0000000..4e5af1e
--- /dev/null
+++ b/19/input.txt
@@ -0,0 +1,949 @@
+--- scanner 0 ---
+-731,-763,-425
+832,-512,-437
+571,657,-514
+594,551,-569
+-604,638,718
+-536,524,776
+629,721,-564
+-623,-444,440
+-708,-610,437
+550,-524,759
+355,515,510
+-683,877,-615
+763,-622,-365
+-833,-795,-362
+-663,840,-668
+-676,876,-848
+7,-92,-35
+560,-560,695
+-559,539,599
+528,-504,779
+-709,-874,-390
+457,445,563
+841,-410,-363
+-742,-511,374
+422,463,367
+
+--- scanner 1 ---
+598,477,221
+687,-702,-850
+-586,-650,-945
+-588,-636,-820
+-676,-819,603
+431,-621,738
+-790,449,456
+339,566,-635
+386,708,-671
+466,672,-647
+245,-629,714
+-674,520,398
+-20,-191,-108
+624,398,329
+-712,486,-889
+-851,477,396
+-791,580,-833
+627,330,296
+623,-679,-824
+-859,-833,629
+697,-847,-874
+-463,-586,-905
+-607,554,-853
+-789,-836,551
+-168,-4,-10
+413,-642,724
+
+--- scanner 2 ---
+676,816,-834
+614,746,-853
+-592,-743,-408
+-72,47,-39
+-744,-404,762
+444,-703,786
+753,-784,-474
+-534,-783,-416
+735,717,-765
+568,482,582
+-343,434,-675
+-488,758,370
+545,517,368
+-489,888,446
+-642,-821,-498
+-351,372,-463
+384,-705,874
+-827,-527,719
+624,-720,837
+88,-28,74
+503,604,524
+-640,-593,761
+-419,427,-552
+690,-818,-490
+-353,831,437
+650,-734,-583
+
+--- scanner 3 ---
+-561,681,-898
+-696,-781,-955
+674,322,-753
+-631,640,-859
+421,399,364
+-559,-639,519
+451,-574,320
+-599,-747,467
+-813,515,442
+809,328,-802
+478,-579,460
+-710,-656,-826
+455,-597,-612
+-600,-812,-818
+555,-700,367
+593,379,413
+382,-629,-639
+810,259,-767
+-46,21,-86
+-662,548,550
+-618,-569,546
+-710,453,457
+-805,672,-885
+479,482,472
+444,-658,-572
+75,-100,-5
+
+--- scanner 4 ---
+-720,-688,-429
+75,21,146
+-524,-443,905
+-455,739,547
+28,-141,13
+-697,-360,919
+826,-631,876
+-556,623,540
+710,450,-593
+-545,-345,887
+697,394,-509
+767,-745,773
+875,-803,856
+614,-573,-535
+542,624,862
+-794,439,-772
+561,-428,-543
+-746,370,-754
+-683,-626,-394
+469,634,823
+-628,431,-669
+-754,-741,-370
+741,613,-533
+489,522,847
+-374,623,575
+664,-373,-571
+
+--- scanner 5 ---
+699,-825,730
+537,-594,-346
+346,566,583
+-631,-481,703
+-787,-523,790
+859,752,-606
+585,-767,662
+424,-689,-351
+-648,384,-472
+684,-648,707
+-709,511,419
+-683,421,-534
+-38,84,173
+-707,350,-419
+-342,-793,-586
+765,684,-628
+-573,-546,825
+493,-563,-373
+-785,510,549
+701,831,-589
+-718,375,476
+-335,-697,-642
+383,619,603
+-293,-795,-521
+347,799,590
+117,6,18
+
+--- scanner 6 ---
+-716,-702,538
+795,547,748
+-711,527,-540
+601,413,-940
+-863,-529,-512
+388,-501,-871
+-723,-534,-539
+787,759,810
+-637,-524,557
+719,670,755
+300,-440,423
+580,395,-842
+-816,-655,-616
+345,-571,505
+554,-554,-934
+-633,593,601
+-741,560,752
+547,-535,-827
+753,381,-925
+359,-597,479
+-819,444,-482
+10,13,-72
+-664,-594,498
+-770,424,-654
+-726,498,649
+
+--- scanner 7 ---
+-582,-761,459
+-453,-839,-862
+804,-878,437
+-612,749,581
+436,398,564
+-487,-795,-703
+807,842,-463
+750,-880,275
+-549,511,-891
+718,787,-531
+145,-81,-100
+-503,-738,369
+-600,814,464
+429,-893,-497
+-599,645,571
+-540,-758,410
+718,-866,393
+461,-908,-649
+-523,537,-905
+595,780,-455
+-506,-902,-696
+417,468,502
+505,497,623
+12,47,-20
+-392,455,-950
+443,-810,-670
+
+--- scanner 8 ---
+53,162,-22
+967,695,948
+770,-615,-548
+-670,-668,425
+968,599,931
+956,564,873
+-402,599,-642
+-440,-235,-401
+840,-611,-438
+684,602,-426
+609,-449,832
+691,788,-464
+-498,984,913
+895,-586,-503
+-501,913,878
+167,129,170
+695,623,-587
+493,-550,825
+-523,556,-616
+-368,-412,-433
+-478,-443,-393
+-7,18,134
+-390,903,852
+-353,475,-643
+609,-631,797
+-691,-717,496
+-674,-800,467
+
+--- scanner 9 ---
+523,-356,773
+-764,463,-560
+-425,-730,874
+668,-366,749
+728,-640,-825
+67,173,60
+903,419,-683
+-787,551,-542
+-403,-811,707
+889,413,-586
+749,-622,-839
+-763,407,-508
+741,-808,-815
+-699,745,628
+-523,-387,-566
+-489,-747,745
+-606,801,513
+-724,-387,-543
+-647,-369,-544
+-682,846,572
+658,516,448
+518,532,446
+460,523,469
+94,-8,-68
+885,388,-755
+691,-430,723
+
+--- scanner 10 ---
+632,619,803
+-337,-640,-546
+746,-937,-943
+-81,54,-168
+821,-857,548
+706,756,751
+683,-855,672
+-733,363,-817
+-615,381,-906
+-584,435,-808
+-329,-782,-669
+586,461,-730
+659,730,711
+-493,496,495
+766,-822,-830
+-338,-687,-635
+-589,-913,412
+721,-864,422
+-601,-806,278
+397,451,-676
+-10,-104,0
+-604,404,408
+487,463,-794
+775,-762,-933
+-602,583,413
+-461,-925,315
+
+--- scanner 11 ---
+-746,899,-576
+407,869,433
+-547,-309,328
+-416,-384,339
+-316,-483,-310
+399,485,-678
+698,-432,802
+-46,-77,89
+-648,857,-455
+-726,877,401
+-478,-429,-312
+-744,850,-511
+608,-772,-282
+433,544,-625
+629,-790,-380
+-729,896,666
+525,784,494
+-451,-326,327
+46,69,-60
+359,887,502
+470,509,-563
+-434,-515,-324
+456,-804,-297
+-788,819,534
+779,-460,686
+597,-425,686
+
+--- scanner 12 ---
+363,-267,559
+256,-401,547
+-772,-682,-877
+314,-661,-725
+19,64,-38
+-676,-711,473
+-685,590,-796
+-833,-770,417
+-719,-516,-940
+529,557,295
+387,680,287
+-625,644,776
+244,-304,419
+347,841,-808
+407,944,-817
+-702,-725,499
+-173,172,-77
+-738,-523,-833
+-613,761,711
+-722,549,-776
+232,954,-788
+-643,639,-799
+312,-537,-863
+305,-411,-763
+482,646,296
+-626,751,607
+
+--- scanner 13 ---
+292,-495,571
+651,919,779
+-175,-32,46
+-939,696,356
+-690,411,-464
+-384,-810,562
+-785,-685,-485
+-795,451,-566
+773,-408,-583
+-906,399,-435
+781,-531,-441
+-455,-767,470
+772,-497,-536
+357,-612,559
+-950,531,445
+-455,-745,448
+595,860,622
+649,453,-298
+-917,726,512
+-20,152,68
+-778,-675,-648
+-763,-609,-482
+509,416,-417
+569,874,648
+461,-602,572
+521,550,-310
+
+--- scanner 14 ---
+-322,-641,670
+-349,354,-648
+-625,714,619
+812,-715,-617
+-491,-748,669
+821,527,-792
+909,550,885
+-599,728,593
+-294,286,-737
+87,-111,72
+354,-956,679
+-668,-679,-347
+425,-891,793
+862,-818,-726
+-387,-758,682
+887,580,729
+425,-913,771
+-639,-800,-435
+-356,278,-525
+-46,-32,-48
+899,577,-702
+896,-755,-710
+920,385,796
+861,469,-784
+-738,-741,-366
+-681,773,462
+
+--- scanner 15 ---
+-863,636,832
+887,603,374
+-66,-152,-18
+-406,-515,-665
+-501,-905,785
+542,-591,-441
+790,520,-691
+562,-667,653
+888,610,607
+-680,319,-645
+-611,-836,857
+813,415,-771
+732,-702,658
+668,-644,708
+-784,760,860
+-380,-439,-590
+66,2,27
+-839,277,-736
+811,556,-859
+-752,658,797
+-576,-505,-555
+-746,345,-682
+543,-455,-365
+851,590,554
+-399,-914,859
+436,-477,-381
+
+--- scanner 16 ---
+695,-489,-727
+-393,764,-274
+513,-404,724
+733,406,705
+788,-449,-811
+804,-386,-777
+-591,-456,576
+-715,-313,-340
+-544,907,364
+135,43,-46
+-534,924,338
+-559,835,455
+-315,762,-398
+444,-463,823
+424,417,-730
+695,626,745
+-693,-291,-340
+-378,843,-372
+425,-525,753
+454,414,-693
+-604,-446,472
+-601,-248,-269
+465,460,-686
+-592,-563,407
+749,580,604
+76,148,91
+
+--- scanner 17 ---
+455,-760,-649
+670,-470,334
+569,454,608
+-358,-652,-715
+-522,413,-718
+578,-408,376
+-499,503,-639
+-510,818,236
+-465,-659,-734
+530,478,-610
+534,643,-733
+-435,-673,316
+-123,-22,19
+-481,808,411
+630,-482,500
+-421,-818,-768
+541,457,-771
+-573,-797,318
+-490,705,351
+-535,-547,309
+-502,454,-681
+385,-756,-759
+330,-731,-694
+20,-66,-142
+736,518,636
+522,517,683
+
+--- scanner 18 ---
+488,-495,-482
+753,833,793
+575,545,-722
+437,-478,-662
+-380,740,-476
+-589,-884,-619
+-447,-668,405
+512,-794,706
+66,67,-124
+-535,581,492
+-383,-610,455
+555,-671,789
+-392,808,-633
+-659,-782,-672
+-477,812,-495
+741,783,712
+-641,-817,-476
+721,728,746
+-433,523,401
+513,-605,602
+613,677,-617
+188,-120,-51
+-553,-645,460
+400,-493,-422
+-598,533,370
+546,787,-712
+
+--- scanner 19 ---
+680,468,656
+-895,-366,652
+-732,-787,-709
+-801,-610,-698
+451,-753,587
+600,-429,-518
+-808,-712,-655
+-85,174,-91
+381,-734,525
+480,-665,466
+-787,899,-508
+-696,913,386
+-631,962,384
+-752,920,482
+499,-445,-344
+-864,885,-423
+-821,796,-468
+523,758,-784
+56,66,25
+466,693,-633
+593,624,698
+715,682,633
+501,782,-567
+-897,-420,814
+459,-483,-564
+-883,-452,696
+
+--- scanner 20 ---
+397,-456,465
+822,541,-705
+-805,-570,-623
+484,-683,-391
+-592,793,-393
+-867,737,670
+-592,-860,531
+-506,805,-437
+-881,820,497
+-560,807,-275
+432,554,511
+-12,12,62
+780,662,-607
+467,492,474
+406,-399,601
+773,606,-703
+328,-770,-433
+-893,-541,-502
+-503,-915,463
+330,-529,600
+408,439,440
+-715,-853,455
+-849,835,649
+542,-805,-456
+-129,-146,27
+-874,-471,-564
+
+--- scanner 21 ---
+533,528,-756
+635,945,504
+924,-707,-431
+926,-248,469
+-453,651,678
+743,907,422
+18,113,48
+-426,-601,-285
+-587,-409,730
+-602,-306,668
+934,-310,681
+450,651,-713
+-736,841,-422
+788,-764,-440
+858,-303,558
+637,717,-755
+-701,958,-484
+685,867,414
+-219,-659,-318
+789,-634,-364
+-609,608,678
+-494,-457,635
+-602,695,664
+-672,954,-527
+-322,-639,-423
+
+--- scanner 22 ---
+665,-972,357
+157,-75,5
+-645,524,554
+-661,-821,715
+552,-766,-295
+572,402,640
+534,-897,368
+-544,439,-366
+-641,414,484
+569,492,-403
+596,-852,-283
+-616,479,429
+-479,-856,715
+6,-31,124
+618,534,-400
+434,-798,-281
+593,563,629
+-537,458,-259
+-703,405,-322
+-338,-477,-268
+-580,-849,831
+758,440,633
+569,-955,356
+528,455,-423
+-490,-509,-253
+-511,-491,-351
+
+--- scanner 23 ---
+388,-809,-352
+-367,872,532
+-415,-631,622
+743,-603,724
+-753,552,-643
+562,-642,690
+139,81,144
+451,-707,-384
+-381,-642,874
+383,456,849
+-411,-684,-537
+416,-685,-273
+-384,-613,831
+-338,776,398
+412,553,858
+399,591,733
+-264,869,422
+-733,574,-623
+-414,-599,-703
+674,-497,728
+48,-39,41
+389,865,-737
+-669,584,-587
+463,856,-635
+-348,-718,-636
+391,787,-525
+
+--- scanner 24 ---
+-784,-392,606
+-484,366,661
+736,683,764
+-663,-858,-769
+833,-740,823
+-553,-789,-841
+821,-458,-849
+-765,-867,-843
+700,495,-558
+87,-2,28
+-325,324,752
+790,830,797
+705,-593,-833
+836,-846,942
+-418,392,698
+830,-555,-820
+1,-137,118
+870,-733,933
+662,640,-670
+-380,807,-844
+-301,683,-816
+-588,-458,571
+696,601,-489
+-412,705,-781
+-758,-468,681
+661,785,811
+
+--- scanner 25 ---
+500,-759,-543
+637,-476,865
+844,524,-809
+691,-401,789
+755,549,-692
+-670,-822,952
+680,-578,858
+374,779,921
+-536,581,-571
+-543,-454,-324
+326,-743,-442
+-738,485,812
+-605,-435,-394
+-832,-768,954
+827,534,-783
+396,700,869
+-697,522,832
+-24,26,176
+-643,582,-740
+-484,-523,-423
+546,-705,-402
+-526,594,-675
+36,-123,83
+-648,564,835
+-714,-736,940
+311,819,948
+
+--- scanner 26 ---
+-609,-865,-696
+-730,-552,628
+320,796,-676
+-480,446,-760
+-789,-814,-679
+752,-686,698
+86,-103,-33
+-54,-53,105
+601,-621,755
+-543,462,-794
+-688,-396,541
+312,517,722
+462,-422,-642
+426,-451,-511
+-557,806,840
+535,-710,720
+-619,825,770
+366,785,-669
+-849,-902,-681
+532,555,762
+-498,737,741
+444,-531,-542
+-665,-610,506
+323,826,-713
+-583,555,-710
+486,501,621
+
+--- scanner 27 ---
+440,-949,710
+-548,356,729
+-860,601,-538
+464,-767,-452
+653,723,873
+-846,-908,-728
+440,436,-892
+-730,-861,516
+4,-62,-113
+541,420,-718
+407,-702,-603
+581,741,842
+484,727,848
+442,-791,-669
+-674,-844,415
+458,-926,798
+-923,-894,-813
+-880,-805,-768
+-93,-141,27
+-550,496,745
+400,474,-672
+-571,298,738
+-615,-768,460
+-867,703,-581
+-791,778,-527
+406,-925,854
+
+--- scanner 28 ---
+647,354,627
+754,-710,818
+-32,-37,79
+-607,574,728
+706,-823,-325
+-440,806,-361
+811,-701,682
+-630,680,673
+686,-718,-428
+-604,-428,344
+627,391,574
+-907,-614,-778
+593,431,-839
+681,-777,683
+-481,-385,427
+452,429,-751
+557,452,-671
+9,100,-69
+-911,-657,-807
+-554,700,-421
+648,-856,-532
+-665,510,678
+640,355,394
+-670,-386,531
+-794,-719,-842
+-418,699,-345
+
+--- scanner 29 ---
+345,-686,278
+590,445,375
+-10,-33,-90
+730,443,391
+-830,567,-808
+-329,-599,712
+-452,-400,-567
+725,770,-497
+-454,-606,663
+788,466,382
+580,746,-507
+359,-589,272
+557,720,-571
+-688,531,-855
+-520,-433,-570
+-571,763,607
+363,-758,247
+-794,543,-728
+-464,-557,820
+-121,76,13
+-599,-325,-596
+-469,671,559
+-529,590,644
+520,-828,-781
+507,-818,-949
+499,-842,-763
+
+--- scanner 30 ---
+898,-783,-440
+922,437,482
+-471,-599,844
+754,-763,593
+74,-14,20
+-699,-844,-819
+905,-782,548
+7,-163,-135
+864,402,436
+-386,-589,679
+427,680,-886
+405,573,-902
+-465,303,-496
+-661,-982,-715
+-477,-574,623
+-728,245,476
+-719,-949,-922
+541,574,-826
+-570,326,-576
+781,-845,-405
+-555,248,370
+-606,305,-408
+907,-709,651
+894,-740,-469
+916,504,488
+-697,342,327
+
+--- scanner 31 ---
+246,-795,-450
+689,777,-513
+-737,-654,-829
+659,821,460
+300,-430,432
+-748,371,-546
+-636,391,-522
+-451,-517,506
+555,774,586
+-738,444,-507
+-33,-82,-118
+-476,718,803
+329,-622,-464
+-576,-488,551
+231,-643,-482
+-498,868,705
+632,681,465
+-737,-472,-794
+-853,-553,-822
+631,669,-596
+5,80,24
+344,-589,466
+-506,-492,441
+517,728,-493
+-469,691,760
+237,-596,485
+
+--- scanner 32 ---
+299,519,833
+-547,650,-617
+395,-426,414
+-954,-698,761
+643,-437,-429
+-715,929,492
+-555,612,-825
+-856,-676,911
+-911,-705,734
+313,846,-260
+-657,-723,-474
+-658,986,590
+267,489,859
+-714,907,743
+371,-538,434
+342,863,-343
+671,-321,-510
+-592,-668,-449
+-702,-598,-445
+-134,142,-43
+-587,540,-648
+239,648,792
+356,-436,487
+678,-437,-611
+-22,23,114
+271,842,-392
+
+--- scanner 33 ---
+353,649,717
+632,-572,-385
+627,-425,511
+569,-375,575
+-478,613,-778
+566,-759,-427
+420,506,769
+759,692,-309
+455,702,787
+742,512,-360
+592,-430,681
+-443,636,-564
+-678,-709,356
+744,452,-272
+-665,-529,392
+-606,857,594
+-792,-285,-709
+-685,-476,355
+39,-2,98
+-561,738,693
+-31,148,10
+-849,-421,-700
+-565,571,-622
+-538,915,708
+443,-676,-384
+-719,-420,-776 \ No newline at end of file
diff --git a/19/solution.c b/19/solution.c
new file mode 100644
index 0000000..6f45173
--- /dev/null
+++ b/19/solution.c
@@ -0,0 +1,129 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+typedef struct beacon {
+ int x,y,z;
+} beacon;
+
+typedef struct scanner {
+ int nbeacons, known;
+ beacon *beacons;
+} scanner;
+
+inline static beacon transform(beacon b, int i) {
+ int x=b.x,y=b.y,z=b.z;
+#define r(n,a,b,c) case n: return (beacon){a,b,c}
+ switch (i) {
+ r( 0, x, y, z); r( 1, x,-y,-z); r( 2, x, z,-y); r( 3, x,-z, y);
+ r( 4, y, x,-z); r( 5, y,-x, z); r( 6, y, z, x); r( 7, y,-z,-x);
+ r( 8, z, x, y); r( 9, z,-x,-y); r(10, z, y,-x); r(11, z,-y, x);
+ r(12,-x, y,-z); r(13,-x,-y, z); r(14,-x, z, y); r(15,-x,-z,-y);
+ r(16,-y, x, z); r(17,-y,-x,-z); r(18,-y, z,-x); r(19,-y,-z, x);
+ r(20,-z, x,-y); r(21,-z,-x, y); r(22,-z, y, x); r(23,-z,-y,-x);
+ }
+ return (beacon){0};
+}
+
+inline static beacon sub(beacon a, beacon b) {
+ return (beacon){a.x-b.x, a.y-b.y, a.z-b.z};
+}
+
+inline static int manhattan(beacon a, beacon b) {
+ return abs(a.x-b.x) + abs(a.y-b.y) + abs(a.z-b.z);
+}
+
+int main() {
+ scanner *scanners=NULL;
+ beacon *known_beacons;
+ int nscanners, known=1,knownb=0;
+ getchar();
+
+ while(scanf("-- scanner %d ---\n",&nscanners)==1) {
+ nscanners++;
+ scanners=realloc(scanners,nscanners*sizeof(scanner));
+ scanner *s = &scanners[nscanners-1];
+ s->beacons=NULL;
+ s->nbeacons=1;
+ s->known=nscanners==1;
+ beacon b;
+ while(scanf("%i,%i,%i",&b.x,&b.y,&b.z)==3) {
+ s->beacons=realloc(s->beacons,++s->nbeacons*sizeof(beacon));
+ s->beacons[s->nbeacons-1]=b;
+ knownb++;
+ }
+ memset(&s->beacons[0],0,sizeof(beacon));
+ scanf("%*[^-]");
+ }
+
+ known_beacons = malloc(knownb*sizeof(beacon));
+ knownb = scanners[0].nbeacons;
+ memcpy(known_beacons, scanners[0].beacons, knownb*sizeof(beacon));
+
+ while (known<nscanners) {
+#pragma omp parallel for schedule(dynamic,10) collapse(2)
+ for (int i=0;i<nscanners;i++) {
+ for (int m=0;m<24;m++) {
+ if (scanners[i].known) continue;
+ for(int kb=0; kb<knownb; kb++) {
+ for(int tp=1;tp<scanners[i].nbeacons;tp++) {
+ int candidates=0;
+ beacon disp = sub(transform(scanners[i].beacons[tp],m), known_beacons[kb]);
+ for (int dp=1;dp<scanners[i].nbeacons;dp++) {
+ beacon c = sub(transform(scanners[i].beacons[dp],m),disp);
+ for (int ckb=0;ckb<knownb;ckb++) {
+ if (!memcmp(&c, &known_beacons[ckb], sizeof(beacon))){
+ candidates++;
+ if (candidates >= 12) {
+#pragma omp critical
+{
+ beacon tmp[scanners[i].nbeacons-1];
+ int ntmp=0;
+ for (int kdp=1;kdp<scanners[i].nbeacons;kdp++) {
+ beacon t = sub(transform(scanners[i].beacons[kdp],m),disp);
+ int found=0;
+ for (int kdc=0;kdc<knownb;kdc++)
+ if (!memcmp(&t, &known_beacons[kdc],sizeof(beacon))) {
+ found++;break;
+ }
+ if (!found)
+ tmp[ntmp++] = t;
+ }
+ memcpy(known_beacons+knownb,tmp,ntmp*sizeof(beacon));
+ knownb+=ntmp;
+
+ scanners[i].beacons[0] = (beacon){-disp.x,-disp.y,-disp.z};
+ scanners[i].known=1;
+ known++;
+ printf("%d/%d\n",known,nscanners);
+}
+ goto next;
+ }
+ }
+ }
+ }
+ }
+ }
+ next:
+ }
+ }
+ }
+ printf("Silver: %d\n",knownb-1);
+
+ int G=0;
+ for(int i=0;i<nscanners;i++){
+ for(int j=0;j<nscanners;j++) {
+ int m = manhattan(scanners[i].beacons[0],scanners[j].beacons[0]);
+ if (m > G) G=m;
+ }
+ }
+
+ printf("Gold: %d\n",G);
+
+ for(int i=0;i<nscanners;i++)
+ free(scanners[i].beacons);
+
+ free(scanners);
+ free(known_beacons);
+}