some-advent-of-code: diff 923a0a4b 4791e0e2

Branch: master

Commit: 923a0a4b542fa0b76ddf59960b23a5547fab2d1c

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

Generated by git2html.