Author: Nicholas Prado <nmprado@nzen.ws>
Date: Mon Dec 6 01:34:47 UTC 2021
Parent: 4791e0e2024b718a556efcec9285e62c82d3d6a8
Log message:
feat 21 05 map of intersections
1: diff --git a/src/java/y2021/Exercise210501.java b/src/java/y2021/Exercise210501.java
2: new file mode 100644
3: index 0000000..5974bdd
4: --- /dev/null
5: +++ b/src/java/y2021/Exercise210501.java
6: @@ -0,0 +1,143 @@
7: +
8: +import java.io.IOException;
9: +import java.nio.file.*;
10: +import java.util.*;
11: +
12: +public class Exercise210501
13: +{
14: +
15: + public static void main(
16: + String args[]
17: + ) {
18: + final String here = "e210501.m ";
19: + if ( args.length < 1 )
20: + {
21: + throw new RuntimeException( here +"add a filename argument" );
22: + }
23: + String userSaysFile = args[ 0 ];
24: + List<String> fileLines = new LinkedList<>();
25: + try
26: + {
27: + Path where = Paths.get( userSaysFile );
28: + fileLines = Files.readAllLines( where );
29: + }
30: + catch ( IOException | InvalidPathException ie )
31: + {
32: + System.err.println( here +"couldn't read file "+ userSaysFile +" because "+ ie );
33: + return;
34: + }
35: + /*
36: + - interpretation of spec -
37: + for lines
38: + parse as first and last points
39: + if vertical or horizontal
40: + save points
41: + // diagonal are for later
42: + for values in map
43: + add if total > 1
44: + print total
45: + */
46: + new Exercise210501().findVents( fileLines );
47: + }
48: +
49: +
50: + private void findVents(
51: + List<String> fileLines
52: + ) {
53: + boolean testing = true;
54: + Map<String, Integer> point_intersections = new HashMap<>();
55: + for ( String line : fileLines )
56: + {
57: + if ( line.isEmpty() )
58: + continue;
59: + Line computedLine = lineAsPointsAndDirection( line );
60: + if ( computedLine.direction != Direction.diagonal )
61: + {
62: + for ( String point : computedLine.points )
63: + {
64: + if ( testing )
65: + System.out.print( point +" | " );
66: + if ( point_intersections.containsKey( point ) )
67: + point_intersections.put( point, point_intersections.get( point ) +1 );
68: + else
69: + point_intersections.put( point, 1 );
70: + }
71: + }
72: + if ( testing )
73: + System.out.println( "\t"+ computedLine.direction.name() );
74: + }
75: + int totalIntersections = 0;
76: + for ( Integer linesThere : point_intersections.values() )
77: + if ( linesThere > 1 )
78: + totalIntersections++;
79: + System.out.println( "\t"+ totalIntersections );
80: + }
81: +
82: +
83: + private Line lineAsPointsAndDirection(
84: + String line
85: + ) {
86: + int firstInd = 0, secondInd = firstInd +1;
87: + int xxInd = 0, yyInd = xxInd +1;
88: + String comma = ",";
89: + String[] barePoints = line.split( " -> " );
90: +
91: + String[] xyFirst = barePoints[ firstInd ].split( comma );
92: + int xxFirst = Integer.parseInt( xyFirst[ xxInd ] );
93: + int yyFirst = Integer.parseInt( xyFirst[ yyInd ] );
94: +
95: + String[] xySecond = barePoints[ secondInd ].split( comma );
96: + int xxSecond = Integer.parseInt( xySecond[ xxInd ] );
97: + int yySecond = Integer.parseInt( xySecond[ yyInd ] );
98: +
99: + Line computedLine = new Line();
100: + Direction direction;
101: +
102: + if ( xxFirst == xxSecond )
103: + {
104: + computedLine.direction = Direction.horizontal;
105: + int yyGreater = yyFirst > yySecond ? yyFirst : yySecond;
106: + int yyLesser = yyFirst < yySecond ? yyFirst : yySecond;
107: + int distance = yyGreater - yyLesser;
108: + computedLine.points = new String[ distance +1 ];
109: + for ( int ind = 0; ind < distance +1; ind++ )
110: + {
111: + int yyVal = yyLesser + ind;
112: + String point = xyFirst[ xxInd ] +","+ Integer.toString( yyVal );
113: + computedLine.points[ ind ] = point;
114: + }
115: + }
116: + else if ( yyFirst == yySecond )
117: + {
118: + computedLine.direction = Direction.vertical;
119: + int xxGreater = xxFirst > xxSecond ? xxFirst : xxSecond;
120: + int xxLesser = xxFirst < xxSecond ? xxFirst : xxSecond;
121: + int distance = xxGreater - xxLesser;
122: + computedLine.points = new String[ distance +1 ];
123: + for ( int ind = 0; ind < distance +1; ind++ )
124: + {
125: + int xxVal = xxLesser + ind;
126: + String point = Integer.toString( xxVal ) +","+ xyFirst[ yyInd ];
127: + computedLine.points[ ind ] = point;
128: + }
129: + }
130: + else
131: + {
132: + computedLine.direction = Direction.diagonal;
133: + }
134: +
135: + return computedLine;
136: + }
137: +
138: + enum Direction { horizontal, vertical, diagonal };
139: +
140: + class Line
141: + {
142: + Direction direction;
143: + String[] points = {};
144: + }
145: +
146: +}
147: +
148: +
149: +
150: diff --git a/src/java/y2021/Exercise210502.java b/src/java/y2021/Exercise210502.java
151: new file mode 100644
152: index 0000000..673eca4
153: --- /dev/null
154: +++ b/src/java/y2021/Exercise210502.java
155: @@ -0,0 +1,225 @@
156: +
157: +import java.io.IOException;
158: +import java.nio.file.*;
159: +import java.util.*;
160: +
161: +public class Exercise210502
162: +{
163: +
164: + public static void main(
165: + String args[]
166: + ) {
167: + final String here = "e210502.m ";
168: + if ( args.length < 1 )
169: + {
170: + throw new RuntimeException( here +"add a filename argument" );
171: + }
172: + String userSaysFile = args[ 0 ];
173: + List<String> fileLines = new LinkedList<>();
174: + try
175: + {
176: + Path where = Paths.get( userSaysFile );
177: + fileLines = Files.readAllLines( where );
178: + }
179: + catch ( IOException | InvalidPathException ie )
180: + {
181: + System.err.println( here +"couldn't read file "+ userSaysFile +" because "+ ie );
182: + return;
183: + }
184: + /*
185: + - interpretation of spec -
186: + for lines
187: + parse as first and last points
188: + if vertical or horizontal
189: + save points
190: + // diagonal are for later
191: + for values in map
192: + add if total > 1
193: + print total
194: + */
195: + new Exercise210502().findVents( fileLines );
196: + }
197: +
198: +
199: + private void findVents(
200: + List<String> fileLines
201: + ) {
202: + boolean testing = false;
203: + Map<String, Integer> point_intersections = new HashMap<>();
204: + for ( String line : fileLines )
205: + {
206: + if ( line.isEmpty() )
207: + continue;
208: + Line computedLine = lineAsPointsAndDirection( line );
209: + //if ( computedLine.direction != Direction.diagonal )
210: + //continue;
211: + for ( String point : computedLine.points )
212: + {
213: + if ( testing )
214: + System.out.print( point +" | " );
215: + if ( point_intersections.containsKey( point ) )
216: + point_intersections.put( point, point_intersections.get( point ) +1 );
217: + else
218: + point_intersections.put( point, 1 );
219: + }
220: + if ( testing )
221: + System.out.println( "\t"+ computedLine.direction.name() );
222: + }
223: + int totalIntersections = 0;
224: + for ( Integer linesThere : point_intersections.values() )
225: + if ( linesThere > 1 )
226: + totalIntersections++;
227: + if ( testing )
228: + showPoints( point_intersections, 10 );
229: + System.out.println( "\ttotal "+ totalIntersections );
230: + }
231: +
232: +
233: + private Line lineAsPointsAndDirection(
234: + String line
235: + ) {
236: + int firstInd = 0, secondInd = firstInd +1;
237: + int xxInd = 0, yyInd = xxInd +1;
238: + String comma = ",";
239: + String[] barePoints = line.split( " -> " );
240: +
241: + String[] xyFirst = barePoints[ firstInd ].split( comma );
242: + int xxFirst = Integer.parseInt( xyFirst[ xxInd ] );
243: + int yyFirst = Integer.parseInt( xyFirst[ yyInd ] );
244: +
245: + String[] xySecond = barePoints[ secondInd ].split( comma );
246: + int xxSecond = Integer.parseInt( xySecond[ xxInd ] );
247: + int yySecond = Integer.parseInt( xySecond[ yyInd ] );
248: +
249: + Line computedLine = new Line();
250: +
251: + if ( xxFirst == xxSecond )
252: + {
253: + computedLine.direction = Direction.horizontal;
254: + int yyGreater = yyFirst > yySecond ? yyFirst : yySecond;
255: + int yyLesser = yyFirst < yySecond ? yyFirst : yySecond;
256: + int distance = yyGreater - yyLesser;
257: + computedLine.points = new String[ distance +1 ];
258: + for ( int ind = 0; ind < distance +1; ind++ )
259: + {
260: + int yyVal = yyLesser + ind;
261: + String point = xyFirst[ xxInd ] +","+ Integer.toString( yyVal );
262: + computedLine.points[ ind ] = point;
263: + }
264: + }
265: + else if ( yyFirst == yySecond )
266: + {
267: + computedLine.direction = Direction.vertical;
268: + int xxGreater = xxFirst > xxSecond ? xxFirst : xxSecond;
269: + int xxLesser = xxFirst < xxSecond ? xxFirst : xxSecond;
270: + int distance = xxGreater - xxLesser;
271: + computedLine.points = new String[ distance +1 ];
272: + for ( int ind = 0; ind < distance +1; ind++ )
273: + {
274: + int xxVal = xxLesser + ind;
275: + String point = Integer.toString( xxVal ) +","+ xyFirst[ yyInd ];
276: + computedLine.points[ ind ] = point;
277: + }
278: + }
279: + else
280: + {
281: + computedLine.direction = Direction.diagonal;
282: + /*
283: + is \ when slope is negative
284: + if \ then increment both
285: + if / then increment x and decrement y
286: + */
287: + boolean firstIsLeftmost = xxFirst < xxSecond;
288: + boolean yyIncreases = ( firstIsLeftmost && yyFirst < yySecond )
289: + || ( ! firstIsLeftmost && yyFirst > yySecond );
290: + int xxDistance = firstIsLeftmost
291: + ? ( xxSecond - xxFirst ) : ( xxFirst - xxSecond );
292: + computedLine.points = new String[ xxDistance +1 ];
293: + int xxLeft, yyLeft, xxRight, yyRight;
294: + if ( firstIsLeftmost )
295: + {
296: + xxLeft = xxFirst;
297: + yyLeft = yyFirst;
298: + xxRight = xxSecond;
299: + yyRight = yySecond;
300: + }
301: + else
302: + {
303: + xxLeft = xxSecond;
304: + yyLeft = yySecond;
305: + xxRight = xxFirst;
306: + yyRight = yyFirst;
307: + }
308: + if ( yyIncreases )
309: + {
310: + for ( int ind = 0; ind < xxDistance +1; ind++ )
311: + {
312: + String point = Integer.toString( xxLeft + ind )
313: + +","+ Integer.toString( yyLeft + ind );
314: + computedLine.points[ ind ] = point;
315: + //System.out.println( " "+ point );
316: + }
317: + }
318: + else
319: + {
320: + for ( int ind = 0; ind < xxDistance +1; ind++ )
321: + {
322: + String point = Integer.toString( xxLeft + ind )
323: + +","+ Integer.toString( yyLeft - ind );
324: + computedLine.points[ ind ] = point;
325: + //System.out.println( " "+ point );
326: + }
327: + }
328: + }
329: +
330: + return computedLine;
331: + }
332: +
333: +
334: + private void showPoints(
335: + Map<String, Integer> point_intersections, int squareMagnitude
336: + ) {
337: + String[][] board = new String[ squareMagnitude ][ squareMagnitude ];
338: + for ( int xx = 0; xx < squareMagnitude; xx++ )
339: + for ( int yy = 0; yy < squareMagnitude; yy++ )
340: + board[ xx ][ yy ] = " ";
341: +
342: + int xxInd = 0, yyInd = xxInd +1;
343: + String comma = ",";
344: +
345: + for ( String pointStr : point_intersections.keySet() )
346: + {
347: + String[] xyFirst = pointStr.split( comma );
348: + int xxFirst = Integer.parseInt( xyFirst[ xxInd ] );
349: + int yyFirst = Integer.parseInt( xyFirst[ yyInd ] );
350: +
351: + board[ xxFirst ][ yyFirst ] = Integer.toString( point_intersections.get( pointStr ) );
352: + }
353: +
354: + System.out.print( "\n | " );
355: + for ( int xx = 0; xx < squareMagnitude; xx++ )
356: + System.out.print( xx +" " );
357: + System.out.println();
358: + for ( int xx = 0; xx < squareMagnitude; xx++ )
359: + // for ( int xx = squareMagnitude -1; xx >= 0; xx-- )
360: + {
361: + System.out.print( xx +"|" );
362: + for ( int yy = 0; yy < squareMagnitude; yy++ )
363: + System.out.print( " "+ board[ yy ][ xx ] );
364: + System.out.println();
365: + }
366: +
367: + }
368: +
369: + enum Direction { horizontal, vertical, diagonal };
370: +
371: + class Line
372: + {
373: + Direction direction;
374: + String[] points = {};
375: + }
376: +
377: +}
378: +
379: +
380: +
381: diff --git a/src/res/y2021/21_05_example.txt b/src/res/y2021/21_05_example.txt
382: new file mode 100644
383: index 0000000..1d4e36d
384: --- /dev/null
385: +++ b/src/res/y2021/21_05_example.txt
386: @@ -0,0 +1,10 @@
387: +0,9 -> 5,9
388: +8,0 -> 0,8
389: +9,4 -> 3,4
390: +2,2 -> 2,1
391: +7,0 -> 7,4
392: +6,4 -> 2,0
393: +0,9 -> 2,9
394: +3,4 -> 1,4
395: +0,0 -> 8,8
396: +5,5 -> 8,2
397: \ No newline at end of file
398: diff --git a/src/res/y2021/21_05_input.txt b/src/res/y2021/21_05_input.txt
399: new file mode 100644
400: index 0000000..58fb409
401: --- /dev/null
402: +++ b/src/res/y2021/21_05_input.txt
403: @@ -0,0 +1,500 @@
404: +682,519 -> 682,729
405: +852,131 -> 25,958
406: +303,481 -> 206,481
407: +199,682 -> 183,666
408: +363,190 -> 571,190
409: +930,290 -> 221,290
410: +364,627 -> 952,39
411: +234,309 -> 234,821
412: +130,864 -> 130,886
413: +462,347 -> 699,110
414: +375,969 -> 481,969
415: +989,859 -> 275,145
416: +221,748 -> 212,748
417: +870,173 -> 106,937
418: +604,33 -> 604,142
419: +780,35 -> 780,206
420: +636,808 -> 721,808
421: +944,989 -> 334,989
422: +477,113 -> 192,113
423: +879,265 -> 879,358
424: +754,974 -> 17,974
425: +10,989 -> 989,10
426: +337,320 -> 674,657
427: +225,96 -> 557,428
428: +129,354 -> 299,354
429: +717,695 -> 695,695
430: +94,255 -> 317,478
431: +90,87 -> 90,187
432: +77,942 -> 952,67
433: +804,315 -> 989,315
434: +619,470 -> 491,342
435: +466,90 -> 466,755
436: +840,121 -> 840,469
437: +638,127 -> 638,77
438: +844,40 -> 151,40
439: +653,987 -> 653,631
440: +195,583 -> 195,623
441: +88,985 -> 570,503
442: +921,897 -> 165,141
443: +230,27 -> 171,27
444: +737,771 -> 832,771
445: +563,365 -> 665,467
446: +942,940 -> 776,774
447: +12,903 -> 644,903
448: +308,390 -> 308,971
449: +572,943 -> 572,15
450: +104,389 -> 104,73
451: +346,721 -> 974,93
452: +30,53 -> 562,53
453: +804,682 -> 804,120
454: +952,45 -> 15,982
455: +475,456 -> 475,348
456: +409,247 -> 664,247
457: +345,18 -> 816,489
458: +571,158 -> 505,158
459: +59,195 -> 27,195
460: +230,681 -> 23,681
461: +258,711 -> 921,711
462: +658,112 -> 366,404
463: +842,220 -> 842,825
464: +815,744 -> 540,744
465: +192,314 -> 703,825
466: +869,573 -> 869,888
467: +603,268 -> 603,301
468: +816,668 -> 816,189
469: +148,606 -> 948,606
470: +117,461 -> 506,461
471: +986,955 -> 986,315
472: +131,250 -> 192,189
473: +988,148 -> 518,618
474: +682,900 -> 31,900
475: +652,839 -> 652,236
476: +466,812 -> 466,611
477: +881,346 -> 401,346
478: +229,639 -> 731,639
479: +104,476 -> 840,476
480: +10,988 -> 988,10
481: +29,15 -> 987,973
482: +825,348 -> 825,240
483: +989,989 -> 10,10
484: +430,796 -> 926,796
485: +49,293 -> 610,854
486: +325,288 -> 918,288
487: +625,309 -> 439,495
488: +536,150 -> 356,150
489: +834,558 -> 822,558
490: +315,408 -> 315,635
491: +257,973 -> 813,973
492: +713,52 -> 122,52
493: +323,970 -> 578,970
494: +447,49 -> 829,49
495: +941,709 -> 941,390
496: +148,323 -> 391,80
497: +23,171 -> 23,49
498: +475,265 -> 322,112
499: +506,407 -> 69,844
500: +567,284 -> 483,368
501: +114,745 -> 114,765
502: +392,252 -> 109,535
503: +65,188 -> 455,188
504: +732,779 -> 732,52
505: +233,214 -> 759,214
506: +232,969 -> 957,244
507: +20,669 -> 20,308
508: +49,972 -> 285,972
509: +501,383 -> 433,383
510: +918,15 -> 32,901
511: +255,268 -> 935,948
512: +757,588 -> 757,919
513: +530,803 -> 284,557
514: +688,926 -> 48,286
515: +331,245 -> 331,777
516: +448,544 -> 209,544
517: +10,970 -> 951,29
518: +233,11 -> 897,11
519: +145,392 -> 628,392
520: +935,971 -> 935,280
521: +169,632 -> 54,632
522: +155,244 -> 155,334
523: +56,284 -> 205,284
524: +553,428 -> 553,520
525: +977,176 -> 497,656
526: +323,339 -> 971,987
527: +616,355 -> 616,248
528: +72,660 -> 72,334
529: +644,822 -> 510,956
530: +356,841 -> 587,841
531: +413,468 -> 605,468
532: +85,22 -> 645,582
533: +924,850 -> 522,850
534: +448,45 -> 345,148
535: +102,566 -> 551,566
536: +80,39 -> 847,806
537: +936,436 -> 934,436
538: +53,24 -> 495,466
539: +234,173 -> 282,173
540: +145,680 -> 456,680
541: +960,759 -> 960,282
542: +984,814 -> 308,138
543: +398,808 -> 716,808
544: +509,536 -> 25,52
545: +289,777 -> 803,263
546: +766,892 -> 257,892
547: +301,733 -> 688,733
548: +24,109 -> 887,972
549: +180,32 -> 577,429
550: +985,801 -> 687,503
551: +901,582 -> 586,582
552: +50,56 -> 50,267
553: +344,373 -> 437,373
554: +542,133 -> 905,496
555: +420,624 -> 420,716
556: +645,106 -> 645,574
557: +356,37 -> 114,37
558: +324,919 -> 357,919
559: +126,797 -> 120,797
560: +288,689 -> 435,836
561: +93,915 -> 639,369
562: +106,391 -> 478,19
563: +277,501 -> 714,64
564: +253,277 -> 643,277
565: +568,972 -> 350,972
566: +213,235 -> 213,406
567: +595,888 -> 595,233
568: +577,63 -> 37,603
569: +649,732 -> 931,732
570: +469,892 -> 549,892
571: +953,895 -> 953,457
572: +222,213 -> 290,213
573: +841,800 -> 841,336
574: +685,143 -> 25,143
575: +441,127 -> 441,146
576: +646,586 -> 56,586
577: +698,122 -> 465,122
578: +641,502 -> 641,240
579: +111,91 -> 185,91
580: +927,755 -> 874,808
581: +108,151 -> 108,567
582: +309,453 -> 309,210
583: +890,657 -> 491,657
584: +404,244 -> 404,123
585: +939,28 -> 26,941
586: +596,970 -> 596,870
587: +489,556 -> 489,589
588: +607,621 -> 903,325
589: +912,284 -> 571,284
590: +921,702 -> 743,524
591: +719,36 -> 719,394
592: +100,905 -> 798,207
593: +316,260 -> 316,887
594: +799,940 -> 885,940
595: +835,287 -> 199,923
596: +422,760 -> 64,760
597: +727,113 -> 727,679
598: +733,56 -> 59,730
599: +141,399 -> 485,743
600: +769,629 -> 769,797
601: +62,486 -> 62,205
602: +192,332 -> 800,332
603: +15,931 -> 727,931
604: +854,915 -> 988,915
605: +349,610 -> 886,610
606: +72,110 -> 72,903
607: +955,110 -> 78,987
608: +591,553 -> 591,428
609: +708,467 -> 516,467
610: +397,589 -> 353,589
611: +930,336 -> 930,532
612: +639,50 -> 228,50
613: +472,17 -> 472,244
614: +420,825 -> 420,562
615: +203,197 -> 203,35
616: +984,964 -> 223,203
617: +944,269 -> 935,260
618: +933,119 -> 87,965
619: +696,290 -> 696,580
620: +925,960 -> 52,87
621: +451,470 -> 235,254
622: +562,71 -> 562,149
623: +405,126 -> 405,67
624: +356,424 -> 356,673
625: +859,649 -> 859,291
626: +210,651 -> 210,544
627: +403,783 -> 403,122
628: +672,87 -> 586,87
629: +409,668 -> 984,668
630: +917,352 -> 511,758
631: +395,953 -> 141,953
632: +152,795 -> 152,313
633: +839,344 -> 811,372
634: +114,649 -> 650,649
635: +60,517 -> 60,27
636: +448,392 -> 845,392
637: +33,849 -> 719,163
638: +151,988 -> 876,988
639: +805,556 -> 124,556
640: +361,538 -> 706,193
641: +974,941 -> 141,108
642: +271,813 -> 968,116
643: +500,697 -> 80,277
644: +586,731 -> 586,480
645: +128,147 -> 174,101
646: +882,681 -> 882,745
647: +531,730 -> 677,730
648: +989,11 -> 11,989
649: +74,332 -> 234,492
650: +360,326 -> 932,898
651: +136,288 -> 113,311
652: +666,645 -> 916,895
653: +977,478 -> 561,62
654: +20,83 -> 566,83
655: +331,942 -> 331,646
656: +180,291 -> 405,291
657: +637,763 -> 637,941
658: +120,138 -> 120,820
659: +951,24 -> 14,961
660: +204,304 -> 204,51
661: +84,168 -> 880,168
662: +955,145 -> 955,903
663: +437,427 -> 437,354
664: +875,67 -> 189,753
665: +46,767 -> 802,11
666: +52,59 -> 889,896
667: +926,56 -> 102,880
668: +500,30 -> 964,30
669: +329,488 -> 329,972
670: +63,11 -> 889,837
671: +707,168 -> 707,584
672: +580,10 -> 735,10
673: +105,620 -> 105,110
674: +187,531 -> 323,531
675: +82,947 -> 82,941
676: +737,199 -> 737,851
677: +612,650 -> 217,650
678: +971,15 -> 82,904
679: +16,590 -> 506,100
680: +950,877 -> 832,759
681: +570,470 -> 570,276
682: +213,411 -> 213,195
683: +670,755 -> 89,755
684: +906,963 -> 906,984
685: +458,463 -> 442,463
686: +956,969 -> 10,23
687: +87,215 -> 195,107
688: +819,454 -> 819,467
689: +594,793 -> 686,793
690: +395,724 -> 787,332
691: +315,461 -> 644,461
692: +448,247 -> 249,48
693: +620,302 -> 247,675
694: +607,134 -> 932,134
695: +312,776 -> 312,289
696: +850,942 -> 54,146
697: +31,538 -> 851,538
698: +729,126 -> 640,126
699: +702,199 -> 702,706
700: +402,783 -> 254,783
701: +110,59 -> 203,59
702: +27,10 -> 965,948
703: +747,261 -> 47,261
704: +628,742 -> 972,742
705: +712,742 -> 657,797
706: +877,871 -> 877,758
707: +665,313 -> 449,529
708: +498,157 -> 498,68
709: +870,922 -> 27,79
710: +856,697 -> 856,429
711: +447,271 -> 963,787
712: +495,302 -> 495,520
713: +526,47 -> 721,47
714: +826,179 -> 826,741
715: +565,461 -> 893,461
716: +512,328 -> 127,328
717: +487,920 -> 522,920
718: +614,452 -> 614,146
719: +331,574 -> 331,840
720: +985,79 -> 285,779
721: +812,320 -> 985,320
722: +118,69 -> 429,69
723: +644,525 -> 644,878
724: +271,132 -> 156,132
725: +955,782 -> 565,392
726: +630,939 -> 630,372
727: +51,203 -> 840,203
728: +202,490 -> 202,479
729: +579,868 -> 579,92
730: +979,336 -> 979,623
731: +843,865 -> 260,282
732: +685,872 -> 685,503
733: +721,193 -> 721,510
734: +908,661 -> 908,955
735: +19,950 -> 715,254
736: +233,730 -> 233,101
737: +922,954 -> 27,954
738: +399,444 -> 399,403
739: +380,712 -> 380,718
740: +238,264 -> 849,875
741: +458,577 -> 458,139
742: +418,244 -> 469,295
743: +460,375 -> 964,879
744: +276,445 -> 815,445
745: +463,910 -> 648,725
746: +26,384 -> 968,384
747: +955,385 -> 955,143
748: +942,775 -> 733,566
749: +425,326 -> 531,326
750: +364,545 -> 364,873
751: +182,759 -> 182,819
752: +390,757 -> 390,475
753: +217,417 -> 217,157
754: +669,286 -> 65,890
755: +257,11 -> 257,858
756: +557,397 -> 557,20
757: +888,946 -> 32,90
758: +971,938 -> 971,578
759: +874,248 -> 874,485
760: +87,268 -> 87,135
761: +756,679 -> 103,26
762: +771,250 -> 771,107
763: +320,711 -> 967,711
764: +293,219 -> 293,706
765: +103,565 -> 103,538
766: +388,256 -> 388,261
767: +468,953 -> 503,953
768: +424,142 -> 287,142
769: +24,930 -> 850,930
770: +316,167 -> 316,161
771: +481,421 -> 208,148
772: +938,926 -> 938,933
773: +701,653 -> 701,780
774: +536,390 -> 536,559
775: +40,954 -> 829,165
776: +404,985 -> 247,985
777: +94,628 -> 94,500
778: +441,637 -> 441,271
779: +766,946 -> 97,277
780: +428,363 -> 428,37
781: +542,694 -> 542,347
782: +11,16 -> 979,984
783: +938,651 -> 632,957
784: +779,127 -> 243,663
785: +636,294 -> 636,787
786: +533,744 -> 636,641
787: +521,950 -> 458,950
788: +988,12 -> 18,982
789: +954,621 -> 954,271
790: +638,951 -> 813,951
791: +822,911 -> 632,911
792: +714,849 -> 512,849
793: +696,88 -> 385,88
794: +65,451 -> 65,687
795: +976,973 -> 976,907
796: +368,489 -> 368,571
797: +358,831 -> 690,499
798: +436,704 -> 178,704
799: +690,619 -> 606,535
800: +96,701 -> 358,701
801: +885,562 -> 420,562
802: +581,480 -> 613,512
803: +44,970 -> 970,44
804: +216,796 -> 892,120
805: +72,623 -> 72,72
806: +896,283 -> 896,326
807: +794,195 -> 22,967
808: +134,326 -> 134,889
809: +420,141 -> 944,665
810: +941,194 -> 941,421
811: +940,525 -> 298,525
812: +653,300 -> 769,300
813: +227,424 -> 406,603
814: +275,850 -> 113,850
815: +648,850 -> 92,850
816: +638,389 -> 638,10
817: +379,404 -> 584,609
818: +833,931 -> 833,520
819: +772,286 -> 500,558
820: +372,262 -> 333,262
821: +689,18 -> 131,576
822: +687,499 -> 687,188
823: +344,499 -> 37,806
824: +778,496 -> 134,496
825: +938,87 -> 344,681
826: +788,401 -> 479,401
827: +828,903 -> 756,903
828: +423,625 -> 285,763
829: +218,489 -> 218,819
830: +488,384 -> 891,787
831: +817,532 -> 788,532
832: +512,27 -> 512,149
833: +369,794 -> 54,794
834: +534,590 -> 827,883
835: +84,310 -> 39,265
836: +357,545 -> 665,545
837: +539,807 -> 539,781
838: +378,683 -> 22,327
839: +71,909 -> 943,37
840: +740,552 -> 348,552
841: +698,315 -> 45,968
842: +516,835 -> 360,835
843: +629,141 -> 629,385
844: +695,908 -> 303,908
845: +795,707 -> 386,707
846: +211,397 -> 291,397
847: +64,620 -> 236,620
848: +97,638 -> 97,445
849: +46,103 -> 893,950
850: +468,122 -> 979,122
851: +810,486 -> 433,486
852: +532,899 -> 461,970
853: +232,60 -> 235,60
854: +549,708 -> 549,90
855: +294,978 -> 294,124
856: +865,406 -> 640,406
857: +755,305 -> 664,305
858: +12,989 -> 987,14
859: +275,249 -> 260,234
860: +502,783 -> 67,783
861: +863,938 -> 297,372
862: +516,961 -> 516,272
863: +67,510 -> 611,510
864: +980,951 -> 312,283
865: +325,512 -> 325,169
866: +142,429 -> 542,29
867: +273,964 -> 822,964
868: +370,217 -> 508,217
869: +131,131 -> 331,331
870: +734,824 -> 734,817
871: +75,89 -> 687,701
872: +155,255 -> 702,802
873: +577,395 -> 130,395
874: +684,94 -> 555,94
875: +393,881 -> 173,881
876: +894,750 -> 773,750
877: +380,269 -> 380,338
878: +427,36 -> 427,77
879: +637,107 -> 637,846
880: +53,437 -> 53,221
881: +128,979 -> 960,147
882: +838,211 -> 838,645
883: +898,39 -> 849,39
884: +862,495 -> 951,495
885: +754,406 -> 76,406
886: +951,960 -> 113,122
887: +830,125 -> 15,940
888: +190,117 -> 190,973
889: +192,956 -> 718,430
890: +895,162 -> 88,969
891: +135,196 -> 70,131
892: +578,642 -> 578,789
893: +713,268 -> 625,268
894: +938,719 -> 938,604
895: +30,863 -> 99,863
896: +844,309 -> 287,309
897: +131,837 -> 459,509
898: +61,206 -> 722,867
899: +95,974 -> 283,974
900: +746,672 -> 558,672
901: +552,32 -> 352,32
902: +21,637 -> 21,781
903: +945,847 -> 945,303
904: diff --git a/src/res/y2021/21_05_input_bonus.txt b/src/res/y2021/21_05_input_bonus.txt
905: new file mode 100644
906: index 0000000..919cabe
907: --- /dev/null
908: +++ b/src/res/y2021/21_05_input_bonus.txt
909: @@ -0,0 +1,500 @@
910: +424,924 -> 206,706
911: +467,565 -> 432,565
912: +722,827 -> 794,899
913: +256,172 -> 810,172
914: +160,853 -> 148,853
915: +292,525 -> 292,699
916: +108,139 -> 108,187
917: +889,789 -> 889,554
918: +226,79 -> 371,79
919: +12,485 -> 265,232
920: +917,864 -> 917,157
921: +710,30 -> 710,988
922: +459,969 -> 459,812
923: +158,961 -> 330,961
924: +146,791 -> 146,220
925: +56,595 -> 24,563
926: +873,233 -> 873,764
927: +969,156 -> 847,278
928: +741,363 -> 621,363
929: +244,162 -> 244,170
930: +288,411 -> 288,668
931: +696,73 -> 696,743
932: +60,966 -> 974,52
933: +236,681 -> 200,681
934: +424,253 -> 56,253
935: +379,407 -> 784,407
936: +177,335 -> 765,923
937: +69,115 -> 921,967
938: +92,11 -> 92,644
939: +311,543 -> 311,106
940: +89,904 -> 661,332
941: +898,342 -> 576,342
942: +369,66 -> 140,295
943: +968,14 -> 511,471
944: +862,420 -> 343,939
945: +857,578 -> 181,578
946: +745,438 -> 243,940
947: +201,693 -> 201,151
948: +20,29 -> 973,982
949: +852,11 -> 852,95
950: +529,960 -> 357,960
951: +317,97 -> 967,747
952: +847,373 -> 321,373
953: +115,863 -> 850,128
954: +79,946 -> 836,189
955: +937,484 -> 937,839
956: +567,774 -> 557,774
957: +192,348 -> 192,630
958: +552,647 -> 272,367
959: +918,573 -> 710,573
960: +896,580 -> 896,305
961: +989,358 -> 775,358
962: +484,833 -> 869,448
963: +966,273 -> 884,355
964: +944,45 -> 171,45
965: +824,228 -> 593,228
966: +19,18 -> 893,892
967: +360,954 -> 417,954
968: +37,14 -> 960,937
969: +18,888 -> 742,888
970: +339,264 -> 339,848
971: +601,532 -> 601,628
972: +540,280 -> 540,615
973: +962,751 -> 255,44
974: +611,135 -> 611,934
975: +988,619 -> 778,409
976: +388,77 -> 388,266
977: +526,656 -> 526,341
978: +942,306 -> 942,309
979: +32,49 -> 931,948
980: +653,866 -> 306,866
981: +141,500 -> 235,500
982: +96,108 -> 883,108
983: +383,242 -> 106,242
984: +557,366 -> 340,366
985: +315,85 -> 262,85
986: +411,115 -> 867,115
987: +517,654 -> 517,735
988: +265,18 -> 807,560
989: +171,426 -> 449,426
990: +507,680 -> 507,823
991: +141,504 -> 141,578
992: +358,970 -> 358,599
993: +304,287 -> 245,287
994: +625,917 -> 625,555
995: +747,987 -> 456,987
996: +673,316 -> 71,316
997: +135,563 -> 95,563
998: +913,677 -> 819,677
999: +17,417 -> 100,417
1000: +524,727 -> 767,970
1001: +619,87 -> 695,87
1002: +748,425 -> 607,425
1003: +11,179 -> 770,938
1004: +756,869 -> 756,44
1005: +647,763 -> 376,763
1006: +980,18 -> 32,966
1007: +805,780 -> 54,29
1008: +923,874 -> 164,115
1009: +765,910 -> 765,697
1010: +574,588 -> 574,717
1011: +323,581 -> 362,581
1012: +749,843 -> 749,814
1013: +915,841 -> 221,841
1014: +252,650 -> 252,959
1015: +73,980 -> 73,904
1016: +846,37 -> 846,864
1017: +899,663 -> 834,663
1018: +512,90 -> 512,253
1019: +889,979 -> 28,118
1020: +650,617 -> 95,62
1021: +842,511 -> 429,511
1022: +875,136 -> 875,202
1023: +123,99 -> 618,594
1024: +848,818 -> 848,546
1025: +251,342 -> 251,696
1026: +263,919 -> 263,512
1027: +905,181 -> 905,293
1028: +770,674 -> 770,963
1029: +554,587 -> 554,190
1030: +528,602 -> 528,962
1031: +22,901 -> 913,10
1032: +685,736 -> 569,736
1033: +378,331 -> 361,331
1034: +301,339 -> 123,339
1035: +556,436 -> 887,767
1036: +488,963 -> 488,510
1037: +117,495 -> 467,495
1038: +884,184 -> 901,184
1039: +27,430 -> 27,94
1040: +426,505 -> 426,869
1041: +292,717 -> 378,717
1042: +154,790 -> 769,790
1043: +476,154 -> 408,154
1044: +391,937 -> 819,937
1045: +449,388 -> 449,677
1046: +420,183 -> 725,488
1047: +235,428 -> 235,468
1048: +515,357 -> 515,312
1049: +493,337 -> 76,337
1050: +416,343 -> 416,456
1051: +713,979 -> 713,253
1052: +812,51 -> 812,696
1053: +395,659 -> 486,750
1054: +68,636 -> 752,636
1055: +620,680 -> 620,769
1056: +610,549 -> 516,549
1057: +316,461 -> 316,248
1058: +455,424 -> 227,424
1059: +49,23 -> 943,23
1060: +13,932 -> 876,69
1061: +966,116 -> 966,775
1062: +802,763 -> 892,763
1063: +617,161 -> 617,379
1064: +661,228 -> 661,50
1065: +872,913 -> 872,610
1066: +792,441 -> 877,441
1067: +611,676 -> 611,968
1068: +297,271 -> 127,101
1069: +276,586 -> 276,981
1070: +630,778 -> 289,778
1071: +892,849 -> 78,35
1072: +201,857 -> 726,857
1073: +363,876 -> 78,876
1074: +813,190 -> 184,819
1075: +984,20 -> 33,971
1076: +591,451 -> 718,578
1077: +548,235 -> 981,235
1078: +51,317 -> 359,317
1079: +179,244 -> 751,244
1080: +864,976 -> 541,976
1081: +707,675 -> 707,45
1082: +248,565 -> 306,565
1083: +302,629 -> 302,125
1084: +383,477 -> 383,388
1085: +533,663 -> 848,348
1086: +566,124 -> 81,609
1087: +479,391 -> 365,391
1088: +33,971 -> 243,971
1089: +129,14 -> 798,683
1090: +335,777 -> 790,322
1091: +780,817 -> 351,388
1092: +732,306 -> 732,730
1093: +642,884 -> 953,884
1094: +912,488 -> 977,553
1095: +437,309 -> 437,330
1096: +646,306 -> 646,632
1097: +41,822 -> 41,672
1098: +758,238 -> 678,238
1099: +610,79 -> 940,79
1100: +746,473 -> 467,752
1101: +121,723 -> 635,723
1102: +46,645 -> 321,920
1103: +843,558 -> 518,233
1104: +84,81 -> 659,656
1105: +976,280 -> 320,936
1106: +833,881 -> 174,881
1107: +988,49 -> 72,965
1108: +262,51 -> 262,654
1109: +82,518 -> 716,518
1110: +502,168 -> 502,151
1111: +596,125 -> 375,125
1112: +953,936 -> 120,103
1113: +471,451 -> 586,451
1114: +571,740 -> 571,30
1115: +601,866 -> 789,866
1116: +446,527 -> 928,527
1117: +212,417 -> 296,417
1118: +879,117 -> 189,807
1119: +949,435 -> 369,435
1120: +116,971 -> 136,971
1121: +493,265 -> 86,672
1122: +442,379 -> 143,678
1123: +981,343 -> 981,978
1124: +656,218 -> 656,428
1125: +538,233 -> 538,196
1126: +771,632 -> 771,29
1127: +81,908 -> 960,29
1128: +251,514 -> 446,709
1129: +747,294 -> 147,894
1130: +838,77 -> 43,872
1131: +347,292 -> 347,516
1132: +135,262 -> 135,987
1133: +913,184 -> 225,872
1134: +485,773 -> 790,773
1135: +499,201 -> 499,167
1136: +895,115 -> 895,422
1137: +54,77 -> 54,240
1138: +23,63 -> 799,839
1139: +470,631 -> 241,402
1140: +731,307 -> 722,298
1141: +966,578 -> 431,578
1142: +327,391 -> 348,391
1143: +889,687 -> 268,687
1144: +262,153 -> 649,540
1145: +349,91 -> 349,566
1146: +460,281 -> 460,551
1147: +887,195 -> 887,253
1148: +365,631 -> 456,540
1149: +411,941 -> 260,790
1150: +252,757 -> 125,757
1151: +548,894 -> 953,489
1152: +348,953 -> 215,953
1153: +145,474 -> 145,941
1154: +65,34 -> 894,863
1155: +442,496 -> 123,177
1156: +92,123 -> 257,123
1157: +840,548 -> 840,969
1158: +620,878 -> 311,878
1159: +378,865 -> 834,409
1160: +221,549 -> 985,549
1161: +478,517 -> 70,517
1162: +968,975 -> 14,21
1163: +36,380 -> 274,142
1164: +258,555 -> 258,601
1165: +386,434 -> 386,675
1166: +215,240 -> 215,224
1167: +445,170 -> 445,659
1168: +848,476 -> 750,574
1169: +895,665 -> 589,665
1170: +73,210 -> 441,210
1171: +17,559 -> 17,599
1172: +344,205 -> 932,205
1173: +305,760 -> 305,924
1174: +93,517 -> 93,960
1175: +911,737 -> 782,737
1176: +804,590 -> 303,89
1177: +927,239 -> 927,891
1178: +19,121 -> 885,987
1179: +667,529 -> 852,714
1180: +121,668 -> 74,715
1181: +33,426 -> 33,130
1182: +184,170 -> 978,964
1183: +316,859 -> 700,475
1184: +791,719 -> 791,241
1185: +528,178 -> 510,178
1186: +317,146 -> 949,146
1187: +113,981 -> 855,239
1188: +948,895 -> 758,895
1189: +768,43 -> 768,963
1190: +61,223 -> 61,97
1191: +609,737 -> 609,333
1192: +521,492 -> 447,566
1193: +844,446 -> 830,446
1194: +880,48 -> 49,879
1195: +349,931 -> 560,931
1196: +333,773 -> 333,476
1197: +660,956 -> 241,956
1198: +479,682 -> 136,682
1199: +324,351 -> 324,604
1200: +71,736 -> 71,344
1201: +579,349 -> 579,340
1202: +639,748 -> 639,23
1203: +634,235 -> 961,235
1204: +205,131 -> 205,542
1205: +570,584 -> 570,486
1206: +37,33 -> 589,585
1207: +747,585 -> 747,477
1208: +801,840 -> 719,922
1209: +375,582 -> 809,582
1210: +397,331 -> 163,331
1211: +898,592 -> 898,119
1212: +239,589 -> 57,589
1213: +172,156 -> 172,499
1214: +956,108 -> 367,697
1215: +144,350 -> 644,350
1216: +934,44 -> 934,327
1217: +609,38 -> 609,75
1218: +120,428 -> 79,428
1219: +976,963 -> 120,107
1220: +275,103 -> 275,549
1221: +414,221 -> 414,921
1222: +970,986 -> 14,30
1223: +453,947 -> 404,947
1224: +284,803 -> 806,803
1225: +321,781 -> 321,476
1226: +942,560 -> 760,378
1227: +499,564 -> 499,654
1228: +458,445 -> 458,416
1229: +128,39 -> 723,634
1230: +899,355 -> 518,736
1231: +914,155 -> 380,155
1232: +594,618 -> 594,65
1233: +676,361 -> 667,361
1234: +624,421 -> 624,617
1235: +645,950 -> 613,950
1236: +218,347 -> 218,733
1237: +239,357 -> 239,178
1238: +366,552 -> 677,552
1239: +657,95 -> 203,549
1240: +789,552 -> 396,552
1241: +27,956 -> 981,956
1242: +814,115 -> 814,620
1243: +497,661 -> 497,583
1244: +843,743 -> 843,707
1245: +910,708 -> 910,132
1246: +147,806 -> 147,491
1247: +638,889 -> 305,556
1248: +37,43 -> 949,955
1249: +526,495 -> 432,495
1250: +44,970 -> 44,329
1251: +368,130 -> 368,761
1252: +202,621 -> 319,504
1253: +627,710 -> 159,242
1254: +256,457 -> 267,457
1255: +85,438 -> 169,438
1256: +580,866 -> 584,866
1257: +504,307 -> 17,794
1258: +942,977 -> 24,59
1259: +903,588 -> 903,234
1260: +276,551 -> 276,783
1261: +365,306 -> 454,306
1262: +535,852 -> 961,852
1263: +211,253 -> 211,888
1264: +989,10 -> 11,988
1265: +45,461 -> 45,922
1266: +250,721 -> 72,721
1267: +74,795 -> 74,457
1268: +543,175 -> 185,175
1269: +680,935 -> 105,360
1270: +337,13 -> 637,313
1271: +13,37 -> 939,963
1272: +23,951 -> 935,39
1273: +976,927 -> 441,392
1274: +962,630 -> 626,630
1275: +847,931 -> 321,405
1276: +21,220 -> 419,220
1277: +196,660 -> 196,58
1278: +846,462 -> 657,462
1279: +395,279 -> 395,844
1280: +164,311 -> 43,190
1281: +775,629 -> 567,421
1282: +274,195 -> 657,195
1283: +169,810 -> 963,16
1284: +473,880 -> 216,880
1285: +354,953 -> 473,953
1286: +35,490 -> 843,490
1287: +740,577 -> 740,846
1288: +841,967 -> 889,919
1289: +927,610 -> 474,610
1290: +838,30 -> 27,841
1291: +211,543 -> 650,543
1292: +541,274 -> 441,174
1293: +438,30 -> 438,642
1294: +16,492 -> 16,529
1295: +984,783 -> 280,79
1296: +95,673 -> 819,673
1297: +516,777 -> 516,253
1298: +544,819 -> 544,777
1299: +729,669 -> 103,669
1300: +618,353 -> 618,796
1301: +259,449 -> 743,933
1302: +407,151 -> 407,316
1303: +811,975 -> 155,975
1304: +167,625 -> 71,529
1305: +298,563 -> 298,197
1306: +385,324 -> 385,21
1307: +957,204 -> 957,808
1308: +10,27 -> 943,960
1309: +412,979 -> 279,979
1310: +668,930 -> 569,930
1311: +466,827 -> 141,827
1312: +924,214 -> 471,667
1313: +773,149 -> 976,352
1314: +977,736 -> 977,543
1315: +162,814 -> 265,711
1316: +106,62 -> 106,552
1317: +263,872 -> 434,872
1318: +692,632 -> 352,632
1319: +24,53 -> 24,300
1320: +722,774 -> 722,580
1321: +605,129 -> 605,841
1322: +275,206 -> 648,579
1323: +92,950 -> 940,102
1324: +500,101 -> 500,891
1325: +278,832 -> 826,832
1326: +681,837 -> 681,23
1327: +369,661 -> 278,661
1328: +883,14 -> 498,14
1329: +725,158 -> 826,158
1330: +770,451 -> 634,451
1331: +343,905 -> 742,905
1332: +203,193 -> 86,193
1333: +662,340 -> 378,624
1334: +980,151 -> 980,848
1335: +536,650 -> 531,650
1336: +730,415 -> 180,965
1337: +220,930 -> 220,507
1338: +358,598 -> 126,598
1339: +251,381 -> 80,552
1340: +786,133 -> 113,133
1341: +466,443 -> 203,443
1342: +478,859 -> 890,447
1343: +281,279 -> 281,585
1344: +735,605 -> 735,610
1345: +570,856 -> 545,856
1346: +254,162 -> 677,585
1347: +689,566 -> 689,836
1348: +678,179 -> 563,179
1349: +617,334 -> 133,818
1350: +639,327 -> 639,352
1351: +697,95 -> 697,961
1352: +953,240 -> 304,889
1353: +739,477 -> 846,477
1354: +542,131 -> 97,576
1355: +497,360 -> 497,66
1356: +48,917 -> 942,23
1357: +743,313 -> 930,313
1358: +540,415 -> 623,415
1359: +599,499 -> 519,499
1360: +415,908 -> 415,561
1361: +989,36 -> 60,965
1362: +532,943 -> 445,943
1363: +216,719 -> 214,719
1364: +961,698 -> 261,698
1365: +228,883 -> 132,787
1366: +385,283 -> 180,283
1367: +278,293 -> 278,41
1368: +113,698 -> 113,779
1369: +139,456 -> 456,456
1370: +227,662 -> 855,34
1371: +596,112 -> 87,112
1372: +773,221 -> 51,943
1373: +588,529 -> 169,529
1374: +574,106 -> 302,106
1375: +85,73 -> 810,73
1376: +371,271 -> 447,195
1377: +797,208 -> 45,208
1378: +22,700 -> 934,700
1379: +523,700 -> 523,247
1380: +829,212 -> 829,229
1381: +470,415 -> 577,415
1382: +53,522 -> 53,585
1383: +387,978 -> 387,745
1384: +932,261 -> 549,644
1385: +34,634 -> 559,109
1386: +887,181 -> 887,881
1387: +77,779 -> 356,779
1388: +862,121 -> 14,969
1389: +226,779 -> 226,358
1390: +945,157 -> 945,658
1391: +808,103 -> 914,209
1392: +360,640 -> 364,640
1393: +567,406 -> 213,760
1394: +284,30 -> 139,30
1395: +940,977 -> 940,656
1396: +635,624 -> 926,333
1397: +837,712 -> 837,414
1398: +193,230 -> 193,582
1399: +592,621 -> 592,41
1400: +986,921 -> 986,836
1401: +404,640 -> 933,111
1402: +914,309 -> 289,934
1403: +537,83 -> 537,389
1404: +208,564 -> 208,683
1405: +120,191 -> 893,964
1406: +18,37 -> 969,988
1407: +134,976 -> 134,689
1408: +187,842 -> 187,235
1409: +526,455 -> 590,455
1410: \ No newline at end of file
1411: diff --git a/src/res/y2021/21_05_solutions.txt b/src/res/y2021/21_05_solutions.txt
1412: new file mode 100644
1413: index 0000000..67f449b
1414: --- /dev/null
1415: +++ b/src/res/y2021/21_05_solutions.txt
1416: @@ -0,0 +1,8 @@
1417: +
1418: +example 1 : 5
1419: +puzzle 1 : 6189
1420: +puzzle 1 bonus : 5147
1421: +
1422: +example 2 : 12
1423: +puzzle 2 : 19164
1424: +puzzle 2 bonus : 16925