diff options
-rw-r--r-- | 6-input.txt | 130 | ||||
-rw-r--r-- | 6.pl | 96 | ||||
-rw-r--r-- | 7-input.txt | 850 | ||||
-rw-r--r-- | 7.pl | 114 |
4 files changed, 1190 insertions, 0 deletions
diff --git a/6-input.txt b/6-input.txt new file mode 100644 index 0000000..b8fd00b --- /dev/null +++ b/6-input.txt @@ -0,0 +1,130 @@ +.....#......................................................#...................#.........................................#..#.... +.......................#.......#...............................................#.................#...#.......#..............#..... +.........#.................................................................#.....................##............................... +.....#..#.............#.......................#..#....#............#.............................................#................ +............#................##............................................#.##..................#.................#.....#...#.... +....................................................................#..#.................#.....#................#....#.....#...... +.#.........##.................##................#..............................................#.................................. +...................#..................#.......#......#......................#..#...................#.........#...............#.#.. +.......................#.#.........#...............#....................#........#.............#.................................. +......#...........#........................................#........#.........#...............#.#.........#....................... +...#...........................................................#...........#............................#......................... +...........#............................#.#........#...#........#........................................................#........ +.........#................................................#...#..#........#............#................#......................... +..#.....................................................................#...............#.........#....#.......#.................. +.......................#....#..#............#.........#.............#...................##....................................#... +..................#...................................................................#.....................#...................#. +............................#..........................#.....#...........##....................................................... +........................#.............................#...............#..............................#.........................#.. +.....................#..........#...#.....#....#..............#...........................................#...............#.#..... +...................................#.................................#......#..................#.................................. +.#.....#.......##......#..................#...............................................#.........................#.........#... +.................#...............#..............................#............................................#......#............. +...#.........#................#...#....................#......................#.#......#.............#............................ +.............#..........##....#...#................#.............#.............#............................................#..... +.....#............................................................................................................#............... +........................#..........................##........#........................................#........#.................. +..........................#.....##.#.............#.........#..............................#..............................#........ +..............#.....................#...............................................#..................................#.......... +...#................................................#.........#.....................#..........................................#.. +.##..............#..........#......................................................................#.........#........#.........#. +...##.#.....#........#..........................#.............................#..........#.#..#................................... +..................................#...#......#......#................#..#.....................................#...#............... +.........................................................................................#..................#......#.............. +.................#....................#..#....#..............................#........##...#.......#...............#.............. +...#.................#................#..................................#..................##....##.....#............#........... +..........#...#....................##......................#.....#...........#......#......#.............##....#...#........#.#... +............................#......#.........#..............................................................#........#............ +.........................................#.........................................................#...............#.............# +.....#..........#..#........#................................................................................##......#............ +.#................#.....................................................................................#.....#................... +..............#........#..................................#..............................##....................................... +........................#.....................#..............................#..................#.............................#.## +#...........................................................#..##........#........................................................ +..............#...............#.........#...........^.....................................................#...#.........##..#..... +......................................................#.......................................#..............#...............#.... +...#....#..................#....#.......................#.#..........#.......#.................#................................#. +#.........................................................................................................#....................... +..........................#......................................................................#.............#.................. +................#...............................................................#........#........................................ +..........#............#...............#.#........................................................................................ +....#.....#............#.....##.........#......##.................#.......#................#...............................#...#.. +................................................................................#...#.......................................#..... +.#........................................#.................................................................#.#................... +.......#....#...................................................................................#...........#..#.............#.... +...#...#...............................................................................................................#.......... +..#....................................#......#.................#.........................................................#....... +...........................................#......#.........#.##........##..#.........#..........................#....##.#....#... +.........................#...............#............................................................................#........... +................................................#................#..................#..#...........#.......................#.....# +..........................................................#..........#........................................#................... +..................#...................#................##.........#...........................#................................... +............................#.................................................................#...........#.#..................... +................#.......................#.........................................................................#....#.......... +#..........#..............#.#............................................................................................#........ +..........................................................................................#.......#.........................#....# +...........................................#.......#................................................................#...#......... +..#...................#........................................#..............#.......................#........................... +.......................#..............................#...........................#......#......................#........#........ +.....#................................................................................#....#...................................... +..#..................................#.........#....#............#....#..............#.............#......#.........#......#....#. +.......##.................................................................................................#.#....#................ +............................................#.....#...................#...........#.........#..................................... +...............#.........................................#.............................#.........................#............#... +..............................................##..................................................#........................#...... +..................................................................................................#.................#............# +......................#.......................#.........#......................................................................#.. +..#...........................#...........................................................................#.....#........#........ +..........#....................#...........................##................................................................#.... +.........#........#...........................................#........##......................................................... +....#.............................#....................#.................#..........................#........................#.... +.......................................#...#....#...............................................#................................. +............#............................................#..............................#..........#......#....................... +.#..............................#...........#........#...............................#.#......#..................................# +#................#..#............................................................................................................. +................................#................#............#....#.#..................##.....................#...............#.# +#....##................#...........#....#..#..........#.....................#..........................#.....................#.... +............................................................................................#..................................... +.......................#................................................##..................................#..................... +....#.....#..#................................................................................................##.................. +..........................#......#...#...#..........#...#................#.................................................#...... +............................#....#.#.......#..........#............................................#.............................. +......#...........#......................#..#..................................................................................... +.........................................#...................................................##...............#............#...##. +...................................#.#............................................................................................ +......................#........##..................................................#.............................................. +...................#......................................................#......#.............................#...........#...... +......#................#................................................................................#..................#...... +..#.........................#.....#..............#.........#...................#.......................................#.......... +..................#..............................................#......#.#....................................................... +...........#.....................................................................#.......................#........................ +.......#.........###.....................#........................................................................................ +...............#...#..........#........................#....................#......#............#..................#.............. +.............#.......#.............#....................................................#.....................................#... +.............................................................................#.#...............................#..#............... +.........##..........#..#.#.................................................................................#................#.... +.#..................#.....................................#...................#.#..............#...........................#...... +........#.....#...........................#..........................#.............................#...............#.............. +#.........#.#.......................................................................................................#............. +..#...................................................................#............#...#.........#................................ +..................#......#........#...........#......................#........#..#.......................................#...#..#. +.......................................................#.............#...........#............................#............#...... +..............................................#....................................................................#.............. +.............#....................#.......................#.............#..........#.........#.............#....#.......#.....#... +...#...................#...............#........#.............#.................#..........#........#................#............ +...........#...............#.....................#.................................................#...#.....#.....#.............. +....#......................................#......#..............................#...........#.....#..................#........... +#.........#...................#.........#............#............#..............#..........#...........#...#.#..##............... +...........................................................#..................#......#..................#...............#......... +...........#.......................#.........................................................#.......#..............#..........#.. +.................................#.....#.....#..............................#..........#..............#............#.............. +...............#.......................................................................##.........#...........................#... +....#...............#.........#.#...........#.......#.#..#....#................................................................... +.........#.............................................#.......................................................#..........##...... +......................................#...............#.......#..#..#.#...................#....................#.#................ +.................#..................................................................#..........................#.....#......#.#... +..#...........#..................#..............#.....#......#.................#..............##.......#...#.......#.......#...... +......................................#.....................#..........#............................................##.#.......... +#......#................#........................................................#....#....##..................#.................# +............##..............##..........#........##.....................................#..........#.............................. +.#.##............#.................#...................#....#...#...............................................#................. @@ -0,0 +1,96 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +my @original_grid; +my @grid; +my @pos = (0,0); +my @start_pos = (0,0); +my %seen_positions; + +open(my $fh, "6-input.txt") or die; +while (<$fh>) { chomp; push @original_grid, [split //]; } +close($fh); + +@grid = map { [@$_] } @original_grid; +for (my $i=0; $i<scalar @grid; $i++) { + for (my $j=0; $j<scalar @{$grid[$i]}; $j++) { + if ($grid[$i][$j] eq '^') { + $start_pos[0] = $i; + $start_pos[1] = $j; + } + } +} + +$pos[0] = $start_pos[0]; +$pos[1] = $start_pos[1]; + +sub tick { + my ($position, $grid) = @_; + my $direction = $grid[$pos[0]][$pos[1]]; + if ($direction eq '^') { + if ($pos[0]-1 < 0) { $grid[$pos[0]][$pos[1]] = 'X'; } + elsif ($pos[0]-1 >= 0 and ($grid[$pos[0]-1][$pos[1]] eq '.' or $grid[$pos[0]-1][$pos[1]] eq 'X')) { + $grid[$pos[0]][$pos[1]] = 'X'; + $pos[0]--; + $grid[$pos[0]][$pos[1]] = '^'; + } + else { $grid[$pos[0]][$pos[1]] = '>'; } + } elsif ($direction eq '>') { + if ($pos[1]+1 >= scalar @{$grid[$pos[0]]}) { $grid[$pos[0]][$pos[1]] = 'X'; } + elsif ($pos[1]+1 < scalar @{$grid[$pos[0]]} and ($grid[$pos[0]][$pos[1]+1] eq '.' or $grid[$pos[0]][$pos[1]+1] eq 'X')) { + $grid[$pos[0]][$pos[1]] = 'X'; + $pos[1]++; + $grid[$pos[0]][$pos[1]] = '>'; + } + else { $grid[$pos[0]][$pos[1]] = 'V'; } + } elsif ($direction eq 'V') { + if ($pos[0]+1 >= scalar @grid) { $grid[$pos[0]][$pos[1]] = 'X'; } + elsif ($pos[0]+1 < scalar @grid and ($grid[$pos[0]+1][$pos[1]] eq '.' or $grid[$pos[0]+1][$pos[1]] eq 'X')) { + $grid[$pos[0]][$pos[1]] = 'X'; + $pos[0]++; + $grid[$pos[0]][$pos[1]] = 'V'; + } + else { $grid[$pos[0]][$pos[1]] = '<'; } + } elsif ($direction eq '<') { + if ($pos[1]-1 < 0) { $grid[$pos[0]][$pos[1]] = 'X'; } + elsif ($pos[1]-1 >= 0 and ($grid[$pos[0]][$pos[1]-1] eq '.' or $grid[$pos[0]][$pos[1]-1] eq 'X')) { + $grid[$pos[0]][$pos[1]] = 'X'; + $pos[1]--; + $grid[$pos[0]][$pos[1]] = '<'; + } + else { $grid[$pos[0]][$pos[1]] = '^'; } + } else { return 0; } + return 1; +} + +while (tick(\@pos, \@grid)) { $seen_positions{"$pos[0],$pos[1]"} = 1; } +my $pone = 0; +foreach(@grid) { foreach (@$_) { $pone++ if $_ eq 'X'; } } +print "puzzle 1: ", $pone, "\n"; + +my $loops = 0; +for (my $i=0; $i<scalar @original_grid; $i++) { + for (my $j=0; $j<scalar @{$original_grid[$i]}; $j++) { + if ($original_grid[$i][$j] eq '.' and defined $seen_positions{"$i,$j"}) { + @grid = map { [@$_] } @original_grid; + $pos[0] = $start_pos[0]; + $pos[1] = $start_pos[1]; + $grid[$i][$j] = 'O'; + my %seen_position; + LOOP: while (tick(\@pos, \@grid)) { + my $direction = $grid[$pos[0]][$pos[1]]; + if (not defined $seen_position{"$pos[0],$pos[1]"}) { + $seen_position{"$pos[0],$pos[1]"} = [$direction]; + next; + } + foreach (@{ $seen_position{"$pos[0],$pos[1]"} }) { + if ($_ eq $direction) { $loops++; last LOOP; } + } + push @{ $seen_position{"$pos[0],$pos[1]"} }, $direction; + } + } + } +} + +print "puzzle 2: ", $loops, "\n"; diff --git a/7-input.txt b/7-input.txt new file mode 100644 index 0000000..e4db165 --- /dev/null +++ b/7-input.txt @@ -0,0 +1,850 @@ +224636607: 220 4 6 366 10 +950489: 405 8 26 9 913 4 +225856996: 8 6 1 4 464 4 9 98 +78671053901: 96 686 9 904 2 1 90 9 +755: 8 1 84 6 46 75 76 +285303239298899: 7 858 38 39 8 524 475 +70488839: 9 61 486 7 21 1 27 2 5 6 +86899866: 60 4 7 412 326 +691713: 2 29 51 89 967 6 2 951 +645275301545: 648 517 8 91 995 +14053189590: 5 6 1 8 8 61 3 7 87 482 5 +3589: 183 63 14 7 80 58 +100391934: 2 79 1 7 4 3 4 4 2 2 4 32 +1682: 71 621 989 1 +666192131: 73 9 5 7 1 15 5 6 1 3 2 +98926058: 5 5 812 601 5 1 68 946 +1377610447: 8 172 1 5 4 7 1 999 4 47 +612491901: 7 465 56 9 5 4 4 6 7 861 +338358: 7 55 3 872 22 +73538435: 4 4 707 8 13 35 +387979562461: 9 43 979 49 6 1 21 3 64 +82614: 64 4 6 2 53 1 8 1 9 281 2 +2328180985: 878 92 5 8 2 6 30 981 4 +1138081075: 223 4 61 3 2 28 2 1 5 5 +62276: 856 58 169 57 537 8 +498: 2 2 3 6 7 5 5 2 5 8 156 6 +87130161055: 612 607 65 8 19 35 67 +237004: 5 7 90 5 96 588 9 +1810642828: 643 6 6 52 880 9 599 4 +1381662831: 75 93 9 23 180 9 9 1 20 +101262451032: 3 2 750 19 64 25 172 6 +448380338: 87 3 3 78 94 5 338 +248768: 1 823 15 293 9 26 +5644231457041: 931 5 758 594 102 1 +1417440: 3 7 842 7 98 4 3 7 47 8 +8303: 205 625 1 +99645248: 3 947 35 210 248 +7201152: 7 7 4 3 2 961 9 8 94 7 +187850360: 35 1 44 338 53 446 +9467325010: 7 5 39 97 5 14 715 +183776226012: 42 415 415 5 48 969 +320165: 9 98 362 881 +3156240054: 29 45 650 9 7 151 1 4 +742934: 736 60 577 56 4 +31109452: 410 5 833 7 9 2 6 5 3 19 +1155862: 202 572 1 38 2 2 1 12 8 +260587: 2 60 5 82 5 +34142051: 708 3 480 82 5 579 7 6 +322192004: 50 6 8 76 4 1 45 4 7 92 +817649813922: 2 3 27 1 5 8 878 2 7 40 8 +7172328: 7 707 1 2 30 269 61 +2515077: 4 404 618 9 81 9 3 +37665626: 40 3 190 2 826 8 4 8 4 2 +27111875394: 4 98 8 55 1 75 7 9 64 7 +926786: 8 84 67 8 6 +7200234: 3 9 2 4 6 5 7 1 91 10 316 +12294273421: 8 8 3 3 4 14 2 883 8 99 4 +158076246: 46 9 3 46 47 8 87 46 6 7 +231: 35 3 5 7 2 +118624: 624 81 35 1 578 90 4 +4879082586: 8 6 83 7 5 47 6 1 2 583 3 +169558: 21 141 4 178 29 8 2 +546110: 2 42 7 1 36 875 7 5 2 96 +807485: 807 477 5 +2452362: 823 8 4 642 73 +1638297: 4 6 3 69 7 99 832 2 80 7 +10068251: 27 88 8 73 9 4 5 5 5 6 2 +895: 2 9 82 780 15 +2026671030112: 367 1 5 8 439 1 3 4 4 23 +35089849: 37 313 88 86 2 986 +994280112: 8 1 554 584 4 21 7 18 8 +1674750: 7 22 14 4 186 77 +535508: 5 7 46 970 68 +46154989: 9 3 3 98 917 40 69 920 +22950781: 763 2 6 5 750 31 +25595175838: 28 69 736 9 991 454 +653025: 912 1 179 8 4 1 +12601508190: 945 4 6 76 91 1 83 7 8 4 +308468366: 73 7 6 7 94 5 4 804 366 +7690746999533: 6 6 8 179 6 699 95 34 +1545131: 7 4 6 2 6 85 1 3 5 7 7 161 +847688: 84 6 795 9 886 +1027192: 572 6 844 80 1 3 952 1 +2065477213: 45 1 6 813 23 746 5 8 4 +1555262460: 86 75 966 14 9 1 5 7 +11251272480: 310 953 62 53 35 2 6 4 +4490155742: 5 16 213 61 347 1 33 +3765838372: 9 468 82 877 372 +11960242: 1 4 435 545 2 24 2 +867948: 7 8 951 5 948 3 53 12 +4252: 52 5 7 70 7 3 1 3 3 8 4 8 +17528157772: 243 404 42 8 5 1 9 772 +12524864294: 5 25 248 63 9 2 1 96 +21378359: 305 3 1 7 362 +16068530: 5 74 593 343 9 +1479884846: 5 9 37 9 44 407 4 7 7 +148374288: 211 7 974 131 48 +719422128: 8 7 7 5 61 12 6 26 9 9 9 8 +712974: 99 96 5 5 58 3 +4680793600: 7 1 947 1 706 7 6 5 9 2 8 +174212239298: 2 3 789 8 86 6 3 40 9 9 +104399533282: 4 3 9 5 53 5 6 272 49 1 +15383675: 577 961 27 34 940 +343878: 94 6 5 4 40 74 342 9 8 6 +147092140959: 4 25 5 18 4 3 571 218 9 +5308: 35 1 13 9 774 237 81 4 +321539046: 7 4 73 11 11 143 543 +1324: 2 709 3 90 24 493 3 +42297: 92 2 234 49 448 +123534949113: 433 3 951 49 113 +14469840: 4 532 59 8 24 7 7 4 27 4 +1672: 7 87 14 950 99 +342225: 2 14 28 61 9 9 5 +666483267: 7 22 923 1 1 6 70 2 67 +82579022182: 8 785 94 22 1 8 4 +12714529803: 3 47 3 8 500 4 98 7 59 9 +120860: 821 3 3 49 26 +1006827866: 34 614 410 473 65 +2522: 69 2 3 6 38 +2062685184: 86 506 896 49 71 +5497711: 916 27 5 6 61 +4843144705533: 5 4 2 978 173 85 5 30 4 +1583583985017: 9 1 744 7 6 132 83 4 5 6 +40723: 3 300 772 3 +469581507: 59 2 3 284 931 +108864: 393 6 96 27 +7840: 144 9 9 191 5 +2588079412985: 96 72 6 26 6 8 22 8 6 3 5 +174869188: 35 677 738 4 83 +5344774: 73 244 3 91 3 +38203766655: 47 75 470 7 8 8 1 70 85 +4042729: 989 21 4 4 3 8 29 +37005: 52 4 508 1 8 8 795 50 +53784: 905 41 2 9 1 236 5 5 1 9 +53795571351: 12 5 580 77 742 7 4 1 +15937: 5 3 9 3 4 +1088: 6 1 671 98 252 61 +489756124: 6 5 949 634 74 +444673044: 9 2 7 2 6 4 2 5 5 51 699 +2783730: 2 2 5 792 44 81 23 29 +1243940184956: 710 73 841 24 953 +2950073910: 331 35 7 774 47 +1292494659: 7 27 518 8 7 11 26 4 9 3 +28578661: 870 8 5 328 1 8 +205427: 5 19 1 8 60 7 246 7 7 3 1 +684484466: 44 434 5 915 313 416 +182472960: 82 80 19 244 6 +2270970: 864 93 791 3 3 +69817106832: 68 62 90 793 5 92 2 +4412828: 4 1 455 6 6 878 +1786523466: 4 1 8 56 87 8 8 74 7 573 +3808294456: 5 295 5 4 799 294 45 6 +212980: 43 7 166 3 38 7 4 +109301335: 8 6 6 2 3 5 3 2 4 627 187 +772: 8 3 58 13 5 +168868435373: 7 8 9 2 7 8 68 435 3 63 7 +130758226032: 5 7 6 70 295 1 446 29 +104615009: 24 5 50 2 427 9 +761999196: 62 699 99 919 4 +8392165824: 5 873 5 1 53 19 1 7 64 3 +10303415: 64 50 9 91 336 7 9 636 +142993748: 53 7 772 5 45 8 556 +212: 3 6 8 37 2 6 15 7 2 4 49 3 +3458941513910: 720 6 3 676 8 7 139 10 +7017075: 973 9 72 498 7 8 +267150: 7 18 62 9 6 +337017: 6 7 556 3 6 7 1 8 1 49 64 +8587952062607: 1 407 8 609 9 387 61 +118731979452: 21 8 64 4 8 9 197 9 454 +2384778921: 3 6 426 253 9 21 +184084160: 2 34 685 26 152 +672302: 1 42 9 1 9 6 4 8 830 2 2 1 +34314: 9 4 2 692 21 +42975: 863 48 44 9 5 +418300198: 83 297 755 54 27 +1361693900: 1 297 8 1 4 86 2 5 665 +59105280: 8 39 32 148 40 +2387431: 6 51 924 3 647 1 +1248447503: 6 4 610 5 6 8 592 83 15 +13146127111: 8 83 2 582 3 9 8 8 9 4 1 2 +15317144898469: 524 37 788 3 79 8 469 +805511: 73 3 7 4 968 149 3 8 9 +1702569: 3 741 9 454 67 +7054236: 2 84 3 42 651 +147968: 2 6 5 15 7 939 21 4 32 +49268536: 81 98 1 6 128 13 6 55 +831652: 816 15 650 +1768330580: 766 81 95 1 65 3 78 +744390: 6 9 3 919 5 +22928: 301 41 67 6 8 +1214899: 69 176 65 422 9 +591: 7 78 1 7 37 +83953549142: 8 3 9 535 29 13 7 141 +3708353016: 12 966 3 6 2 5 533 6 2 3 +3389292904: 34 82 927 84 105 4 +1264: 36 271 7 4 8 +5373: 54 91 45 3 411 +5452771: 63 6 6 832 6 4 6 6 9 7 7 4 +7312: 3 6 802 21 73 +19505742: 3 9 2 6 646 2 7 507 +12130845: 943 268 1 48 93 +165326582: 577 1 13 8 4 110 51 2 +359953: 7 5 99 53 +1409010657: 528 2 954 701 657 +137314425: 73 88 2 54 867 993 95 +1395007087713: 96 82 2 945 55 99 886 +169406: 757 9 4 110 2 6 +25452095: 6 52 3 808 94 +4281342: 44 8 91 4 4 91 8 1 8 5 7 5 +12134: 4 58 48 98 903 +32045353200: 467 98 300 778 3 +201969: 59 65 97 3 17 9 11 3 3 +320279209: 2 629 71 4 507 210 +90729: 83 7 732 +9215808: 87 5 44 99 192 +23275792: 3 954 2 903 7 9 +4654: 738 6 223 6 +405655610: 9 31 7 6 755 5 8 46 2 5 +17761196: 17 7 6 10 5 4 8 52 58 24 +19406940: 54 8 56 29 57 49 690 +164914499: 60 1 9 8 78 1 761 689 4 +2203302613: 2 11 7 3 852 7 9 3 9 6 1 3 +9272481033556: 9 74 7 8 1 5 57 7 9 6 61 +50961083339017: 47 186 4 7 5 3 9 967 3 8 +6651193: 664 9 54 55 49 61 1 +21181580655: 302 59 4 70 657 +28041: 5 8 70 8 33 +643587: 753 68 2 782 +366416: 595 7 3 63 3 78 7 7 1 +215072: 5 2 383 7 4 8 +24606: 583 42 13 95 15 +558882: 7 977 7 7 2 +56849: 98 58 9 +491: 85 20 388 +5361334: 97 2 779 6 35 3 337 1 +156832840: 2 61 1 388 6 43 +258180: 77 278 23 683 6 +6449644696154: 55 9 4 9 6 44 69 6 154 +49422181986: 20 2 38 4 407 6 91 84 +813630346: 807 9 57 12 4 8 3 3 3 46 +252941: 25 29 32 1 7 1 +7533731622: 683 3 995 525 7 +11654459: 20 7 5 7 2 891 2 3 9 5 1 1 +1278933: 402 7 380 3 34 4 +4965955: 177 6 668 7 43 +479972750: 47 92 48 724 733 7 4 6 +17224355: 7 315 60 80 91 18 95 +902: 75 83 741 +8123777432951: 805 9 3 21 6 3 6 1 8 9 4 9 +150386292: 603 843 9 7 481 62 9 2 +132913: 5 68 234 +4993017132: 101 2 72 341 6 910 6 2 +3236366: 5 1 7 1 1 4 8 8 1 9 968 6 +242: 21 3 2 +599466: 14 6 1 544 3 950 8 1 8 +12374400: 3 345 7 8 2 9 7 3 5 6 40 1 +626726778874: 195 8 5 2 8 9 4 7 16 2 5 2 +994213200: 529 400 6 1 313 +33092950: 80 518 411 52 +683851768: 806 76 3 84 929 2 2 3 4 +98865035345: 9 4 8 615 1 6 5 5 3 5 3 47 +662608707: 4 7 37 8 1 458 8 795 5 5 +990320: 54 91 744 9 92 320 +46955: 73 7 7 1 547 560 7 +137123516686: 3 56 618 9 2 23 679 4 +90576: 9 1 9 68 74 +265969558: 6 641 786 4 523 +3953691: 45 976 4 9 855 +463787: 564 180 7 89 275 +5170876: 5 8 2 658 3 383 70 106 +382835: 9 4 346 726 110 +13432: 557 6 9 7 4 +138639960: 1 5 86 4 8 42 380 +5114: 9 19 277 59 56 3 2 9 2 +2524771264: 33 4 5 5 9 4 660 9 63 6 2 +903309758: 8 82 325 94 503 5 3 6 +2094931: 516 9 5 5 25 1 3 6 7 624 +5747: 14 3 1 5 588 76 5 8 2 9 +125910022: 162 4 337 5 7 7 5 5 1 9 +3664201412: 2 8 5 915 788 5 95 46 2 +2979055444: 248 2 49 12 9 665 41 3 +2838892138: 9 45 556 70 38 95 5 +1552399: 9 190 78 4 9 4 68 +3852163: 4 427 4 4 7 558 18 271 +12385: 667 9 2 47 332 +189704774: 4 6 6 514 4 176 131 5 1 +2642810463: 243 577 217 5 5 7 +73488130: 449 10 3 16 130 +350440: 4 5 9 862 1 5 961 369 +15655482577: 3 22 824 92 5 9 5 78 1 7 +18846198: 2 4 87 75 708 401 6 +25781: 510 22 4 48 53 +256056: 5 426 8 7 6 6 2 599 1 2 6 +121862: 147 1 7 189 30 29 +326909: 193 211 47 8 3 746 +638780: 20 8 799 666 86 +26238: 7 1 7 242 82 +841784: 59 7 141 8 6 +284160: 4 4 7 3 8 2 14 50 86 6 2 5 +42495492: 1 744 588 947 57 +1583338464: 5 17 638 5 4 9 62 8 6 8 +61133906: 58 3 133 90 6 +44114: 89 2 1 4 1 5 197 6 8 1 +17829: 6 37 353 31 4 +49649890464: 7 2 7 759 6 9 784 7 8 8 6 +14951857356: 7 47 54 8 7 4 2 67 7 356 +161404075: 4 203 320 73 3 4 4 111 +1665543681: 6 99 2 2 489 92 573 +379220402041: 78 90 74 73 20 41 +307413623: 5 8 8 890 958 8 915 80 +3950928: 359 25 4 440 171 +1515946754: 7 709 96 3 36 3 9 192 +17182400: 17 181 71 5 685 +1074986901: 5 479 4 63 22 901 +269592: 904 52 282 +69354748: 729 7 59 291 95 +325613361: 8 1 3 1 1 295 738 4 40 1 +5257: 4 420 837 +31654420: 316 540 4 20 +661442: 8 643 9 86 98 841 +1248597: 4 15 8 949 54 3 7 3 +4714546: 981 4 3 9 33 333 4 682 +317794580: 88 7 67 77 1 80 +649992: 1 6 49 98 5 7 +1256904: 6 6 3 759 4 6 +9421712: 2 8 5 964 5 590 +268860: 129 5 2 497 363 +111525721568: 19 652 3 6 1 468 4 9 3 7 +15374034866814: 70 8 328 2 254 1 93 9 +529100613672: 427 7 22 4 9 177 6 73 +74616: 4 1 927 7 8 +16016498006: 91 176 497 351 655 +20546662: 256 827 8 8 494 +303485: 7 97 6 5 29 +40539: 37 361 87 69 3 +39152291409: 13 898 577 939 3 +12970353: 615 74 285 3 +11183: 4 848 4 9 1 3 925 3 1 +56287072: 78 123 53 4 72 2 1 59 +13337202241: 80 68 191 13 2 4 18 5 +70420: 879 8 6 94 1 +146814: 4 7 3 9 59 5 4 7 7 9 9 6 +11865: 87 395 98 597 9 8 +2759764217: 2 7 5 9 764 217 +98706191910: 124 905 545 1 9 8 145 +4893392: 38 42 511 6 56 +1699431861: 70 2 3 221 4 4 5 356 1 4 +283671552959: 8 855 64 6 856 958 +573060435269: 81 400 63 704 69 +6444984: 95 34 676 +754343663: 7 5 434 1 2 65 5 6 +4683: 375 50 69 86 8 43 +304668005: 4 464 182 375 7 +15617: 9 8 25 1 161 +28331479: 456 5 654 19 199 +333202992: 8 309 1 7 193 62 3 9 8 4 +16449641: 4 848 7 95 649 1 29 +2946113044: 12 2 3 63 5 77 956 4 7 7 +395902025: 9 67 134 98 52 55 74 +5990787: 24 2 341 366 99 +1076519538: 89 63 583 394 1 206 +22058058: 7 312 6 82 69 +183965: 6 99 63 28 5 +4296336: 429 6 2 7 3 63 +2152246250: 81 9 575 5 590 +566756248: 61 1 1 9 8 381 9 61 4 92 +1129: 25 985 52 58 9 +3378747701: 7 4 6 937 34 4 52 2 +825656: 82 556 9 7 +51103: 2 3 7 8 3 3 2 4 899 4 755 +5833300: 7 3 63 9 2 79 36 336 3 4 +231223: 2 228 1 223 +26298: 533 1 3 13 47 53 395 +644583: 24 40 458 3 +7766494: 762 78 775 3 8 6 8 4 8 +358667726: 354 4 62 4 740 23 9 1 6 +6127: 7 9 665 67 1 8 7 817 2 9 +781513517: 781 314 146 53 514 +98780097368: 2 69 51 35 90 971 7 8 7 +990046964925: 7 70 9 31 42 838 34 4 1 +26159245: 7 32 6 8 458 933 16 35 +56945580: 5 70 4 9 1 1 8 57 5 8 3 +2463552: 6 65 11 8 4 91 +2156431: 10 6 9 974 712 2 4 491 +2258960497: 7 6 1 3 135 4 32 1 7 1 2 2 +96127229: 927 6 9 846 8 13 29 +20911005179: 67 39 875 6 47 8 3 +52665483: 857 569 3 3 4 9 3 3 2 2 3 +1256827786: 9 3 8 9 3 89 45 272 8 6 +3844746376: 79 1 1 27 6 3 3 68 8 +5048137: 9 28 2 710 9 7 876 54 8 +8748: 58 22 7 4 8 +315363672: 771 76 69 2 39 +57386877: 27 4 158 205 648 +846204: 117 508 776 151 4 +9231702481: 5 43 17 615 82 8 46 80 +513708926: 5 34 962 92 5 +5709990: 87 28 4 30 5 78 +2437367184980: 4 673 5 2 322 1 9 8 980 +429936727121: 9 109 6 621 2 3 99 76 +37841184: 88 43 117 6 8 +121131661: 3 399 6 78 1 590 6 64 +4560: 2 8 9 744 74 7 68 5 +518955: 535 97 5 +9852363726: 1 91 5 8 1 46 582 6 +1373801: 2 418 537 80 1 +9322237: 629 3 95 52 457 +2015622: 602 62 6 3 42 3 +268: 118 36 114 +64044399: 80 2 978 10 514 7 +496601894250: 701 55 87 329 9 50 +1784: 7 5 3 815 39 2 +66800: 848 884 38 896 44 44 +25056817: 1 8 8 348 817 +211035: 17 9 9 311 35 +704959882: 1 55 77 53 595 3 80 +129592: 62 86 1 130 1 635 2 +18363213: 2 87 332 4 54 880 2 1 2 +203460462: 8 8 58 2 6 35 91 6 2 9 +84023543: 8 1 10 292 354 3 +8559468726: 8 55 94 687 24 4 +909604230: 75 768 9 4 9 84 41 5 6 +52427744: 1 524 277 38 6 +71128085: 6 24 79 934 6 5 60 1 4 +269424: 7 3 67 96 8 4 483 4 1 36 +6329176: 8 5 238 15 6 5 71 8 7 +266122701827: 26 746 5 199 1 827 +1212162: 4 481 79 77 4 706 31 +8371135: 4 970 100 7 43 78 3 +11514618: 191 9 6 5 55 63 3 +761060160: 62 88 468 536 70 2 36 +51901204: 528 45 45 259 901 +5122220623: 5 8 4 2 39 1 4 965 5 3 9 2 +115457540783: 6 32 428 6 7 406 94 92 +65037: 12 5 34 72 37 +182161631: 22 414 2 1 624 7 +13248078: 4 8 9 1 837 8 626 16 47 +131580: 61 9 182 3 60 +1062094464: 9 654 382 72 4 +1602523830: 890 2 9 1 18 28 +6338640: 33 8 70 7 49 +50177370234: 4 8 9 3 6 86 2 68 9 1 174 +1881073: 393 7 9 7 1 8 8 899 79 4 +995521834: 9 4 8 9 7 4 4 18 5 1 1 874 +44825176: 926 5 7 22 44 +401473748420777: 802 94 74 96 841 5 6 5 +14609: 7 7 609 +9204424: 2 685 87 22 7 +1375935175: 2 87 45 3 3 418 288 77 +4154: 445 862 3 206 27 +3775060719: 25 755 22 7 76 61 2 +12772: 1 751 17 5 1 +366088: 9 16 6 682 440 8 +1306675152: 540 56 92 619 48 9 +8765239418: 20 8 10 602 16 1 7 418 +2174: 5 70 29 +358573: 3 583 61 58 154 +844226: 31 9 20 74 190 622 4 +1805472: 21 1 260 48 501 1 8 4 9 +1092383282: 866 97 7 60 18 +16689467390: 8 1 68 94 7 7 3 611 53 7 +677: 87 9 7 3 +62989035: 41 992 64 5 3 5 +1196592: 62 5 4 1 237 37 7 5 4 3 +4121852634: 66 231 8 5 43 698 9 +809875: 5 5 3 4 25 698 9 8 79 44 +8347: 80 97 1 15 482 60 29 +5867331865: 1 192 4 76 1 1 31 865 +6834494: 639 44 38 24 670 +47320509603: 95 3 74 369 671 1 +157194249: 2 3 3 4 8 4 602 8 85 4 4 1 +707981: 679 6 22 966 9 9 +66920731: 3 9 520 8 157 8 7 89 8 8 +3473354660: 6 94 5 3 3 545 67 93 1 +28276335397: 9 2 7 1 74 6 9 8 6 91 4 9 +357426: 2 3 745 476 424 +12344277: 187 205 1 322 85 +25989900687: 4 6 54 388 4 842 955 7 +360: 6 1 5 2 15 +4434693: 1 49 27 9 78 315 +246016: 56 274 32 16 3 +1556282283: 32 455 81 74 8 70 54 +2430388120178: 3 810 388 120 178 +9236714: 71 13 576 95 4 +47929780: 6 30 587 68 76 +2812502: 140 6 4 837 2 5 3 8 164 +552460049: 7 6 15 510 257 +1359: 5 9 9 82 94 778 +193850: 27 37 5 3 92 52 59 147 +23674716437852: 8 739 6 6 7 9 1 8 757 1 5 +180560556: 87 23 1 6 8 902 +4189784: 5 693 2 593 3 6 +55546: 1 6 3 3 4 6 5 125 73 431 +489731484: 9 1 999 90 6 498 898 +1112084235: 7 2 16 5 75 2 31 405 +1178224198: 465 3 1 844 198 +51368914855776: 47 5 20 41 8 176 4 984 +30011298443: 789 771 38 43 1 6 7 +161129058: 2 68 548 43 6 +4783764: 648 5 348 95 7 +3371850793: 5 9 6 446 992 8 7 1 8 9 1 +24944009: 15 41 18 400 4 6 +159062133: 794 2 2 61 833 302 +3826772656: 3 1 48 4 3 36 7 9 439 2 +25421425: 600 459 22 6 24 +226441191936: 7 1 4 4 80 39 73 1 30 6 1 +27185886: 6 31 5 40 4 40 29 294 +33058231: 54 734 6 9 4 139 +21707116924: 52 344 343 177 412 +192759868: 1 9 9 1 396 4 4 5 7 3 58 2 +31570878: 80 7 695 36 63 4 8 +8125920622: 237 6 5 684 622 +2117141: 8 1 2 1 802 93 28 23 66 +3550: 7 9 44 71 3 +261369: 35 8 93 35 8 4 513 22 +3064560: 48 5 99 120 7 5 5 24 +4993361: 4 9 918 5 7 99 1 +69582527991840: 925 8 993 66 432 745 +204454: 297 2 683 4 194 39 +235906667: 947 3 355 894 83 +283476238: 6 308 973 60 9 +1637043: 7 52 800 84 622 417 4 +21555658: 8 9 2 62 6 1 9 4 87 9 8 89 +72727: 7 6 1 6 930 8 7 80 1 92 +898623: 86 27 9 43 9 +21864929: 6 4 911 378 551 1 +59800: 65 6 1 655 424 52 +44650136: 38 1 9 37 2 62 115 6 +79802: 9 64 6 5 950 2 +660334512: 804 4 9 6 3 9 5 1 5 1 912 +125557636: 2 369 884 57 628 7 +25743693: 6 5 306 8 324 3 5 6 54 9 +7642: 690 8 2 728 4 +1981: 33 4 8 43 7 7 3 3 205 3 +53393231: 4 4 45 4 3 4 3 8 8 48 26 9 +454010: 62 732 5 85 2 +101602387: 745 31 53 90 83 9 +237057201722: 823 4 6 2 5 5 3 36 1 6 6 1 +72999479408: 85 2 7 85 8 96 28 15 8 +91675: 7 4 78 5 3 7 1 50 78 99 1 +14266: 63 73 6 65 1 +6901972182691: 4 686 14 5 721 826 88 +347037711: 127 6 5 7 9 1 7 8 53 6 7 4 +2158691: 62 73 344 781 1 +562716066844: 290 44 441 6 68 44 +4740741352500: 564 3 739 7 7 375 4 3 +2065103041: 5 8 572 921 98 +4515: 604 1 1 273 9 1 5 9 5 +89611697280: 155 7 81 195 64 86 1 +4076930: 4 2 779 4 3 106 5 93 6 +47021: 719 49 8 1 7 3 1 5 3 4 6 3 +3420: 6 39 51 2 6 +132885185600: 5 59 46 9 9 5 18 5 1 599 +53784951750: 25 332 648 95 1 17 50 +49922881: 63 2 110 6 744 85 7 1 +2604: 1 2 2 8 4 5 1 +512838900: 25 3 34 953 7 30 6 401 +343338: 75 7 16 5 3 2 29 9 7 2 3 6 +2334: 10 7 3 757 504 +216: 3 4 6 5 8 +110628: 1 46 2 9 9 33 548 26 8 3 +1961306: 5 2 8 817 5 4 50 2 60 3 2 +116: 5 1 40 3 22 +689283899: 195 94 8 283 8 82 99 +544644: 6 452 6 614 9 9 2 +343152684: 3 240 909 7 68 +319: 9 3 5 3 6 201 1 50 +2321521437: 5 7 1 3 19 7 5 944 757 8 +19845967: 1 4 3 36 95 8 135 967 +1740725487: 355 8 5 6 38 2 3 8 7 3 37 +6238021594: 89 7 80 215 94 +1416427: 45 96 6 428 +19686420: 4 4 3 178 3 1 2 2 895 36 +81518436: 6 5 3 57 629 6 3 4 1 5 9 4 +91057: 901 9 50 1 7 +40574: 20 6 7 7 572 +440448: 735 599 37 59 87 +13955011: 8 8 29 31 501 1 +2080826376: 6 4 5 65 7 1 751 4 33 4 6 +3368: 421 8 1 +10714395264: 84 6 37 90 19 7 8 4 3 4 1 +1163362: 48 8 74 9 4 1 886 41 1 +1222973737905: 313 569 5 9 39 37 905 +8738600: 101 81 554 3 508 92 +214712768: 9 497 48 8 765 +50428297: 981 7 79 51 5 +5854621152: 1 41 38 45 491 8 348 +323634: 326 9 99 +1132728659: 5 8 803 2 3 9 436 659 +2472525: 716 3 1 7 7 2 355 81 +9037357617: 755 171 1 7 617 +43970037: 493 972 641 26 9 3 +11953613: 6 3 7 9 9 48 64 371 1 1 5 +797469: 2 86 737 80 723 +3446715575: 1 89 4 6 866 1 7 8 6 3 5 5 +187550: 1 3 1 40 71 8 1 3 2 51 5 4 +10340837: 2 5 4 81 8 6 1 53 7 41 5 7 +44529937: 883 2 9 9 559 556 +492471888: 8 5 6 11 7 2 1 781 1 7 89 +345154821116: 202 4 3 250 93 6 9 427 +30644236: 386 41 7 67 705 +90090: 152 9 2 6 3 43 24 45 +24536232082: 8 17 3 5 5 4 9 4 67 36 8 2 +252646: 8 18 1 968 +1326061: 41 7 6 530 +27287: 7 238 76 85 +5848542: 79 37 1 27 1 2 +89628: 88 89 4 520 209 2 +2844762336787: 929 9 4 1 8 8 49 7 7 78 7 +35834262543: 37 96 4 310 262 543 +54494622: 2 35 865 34 91 618 +6324: 54 99 978 +157218612: 57 43 3 8 2 831 7 47 6 4 +1686: 860 73 4 33 716 +191241547: 47 850 41 22 52 +4368351846290: 3 4 6 399 8 55 7 72 6 5 3 +122579: 12 257 3 3 3 +1491482808: 17 4 14 2 375 342 324 +16485366: 5 260 8 67 995 2 93 +6169019852: 126 263 36 17 932 1 2 +755677: 744 7 109 7 6 +213687290880: 27 206 5 7 384 5 4 714 +3348926624: 8 5 368 1 8 7 37 25 4 +31047156: 9 964 8 9 4 35 1 8 19 7 4 +7771856237186: 4 820 38 2 5 6 6 544 78 +1323589: 865 2 917 18 5 +14307859: 52 8 387 8 611 7 8 +5178: 492 6 215 6 31 +445800: 3 42 1 1 6 8 8 7 7 897 4 6 +1243: 5 9 3 4 5 +316883: 86 6 57 19 946 31 +3300198: 985 18 9 4 6 31 +46187: 38 9 5 888 6 5 +8117185: 4 8 3 9 5 5 4 204 3 15 2 5 +640: 9 6 1 3 3 7 8 32 3 3 1 1 +947896765: 947 8 96 7 65 +130994868: 23 8 1 75 33 9 938 6 59 +411120: 139 1 4 5 571 +9180583821: 68 135 58 361 21 3 +5420425: 15 597 79 6 25 +798075: 8 1 1 8 675 9 +360: 8 3 7 4 1 +6506838: 46 340 823 9 598 +175560431: 168 475 22 1 3 9 3 391 +2223802: 9 6 247 10 60 2 1 800 +16141340776008: 2 241 239 79 8 762 84 +143592: 7 7 37 5 388 579 5 6 4 +7355665: 9 1 8 6 666 597 303 7 +459420: 2 75 6 95 31 +4494266957: 5 27 36 3 7 6 39 2 3 60 +6399525172494: 8 8 30 6 25 8 34 7 98 3 4 +66330: 2 76 120 67 5 +3200: 29 3 2 4 8 9 36 54 8 2 1 +502870368: 8 8 8 4 9 9 6 1 2 884 33 +426708: 8 1 8 9 79 512 4 27 +23454: 429 401 27 99 945 +5650656983: 3 57 7 4 8 936 5 3 5 9 8 7 +29909110: 267 3 7 2 129 6 35 2 77 +430523: 82 80 6 731 59 +169857475987: 163 6 8 574 75 8 1 90 1 +17381432585455: 1 991 873 258 5 454 +3856376: 10 5 17 32 330 7 716 +34804513838: 4 97 64 5 98 549 31 9 +3834: 45 46 1 335 9 +16081284068081: 54 3 7 1 7 2 2 5 90 86 94 +1104989006: 6 5 7 54 2 5 3 98 892 8 6 +8795307: 4 5 75 7 5 7 268 307 +796978316799: 29 452 1 1 96 950 8 8 +175508: 7 5 488 2 43 6 868 2 6 2 +14019229928: 3 5 7 4 1 93 9 458 8 3 8 +151760887200: 39 541 480 999 5 3 +1653882672: 643 46 2 4 68 179 4 39 +66202: 669 97 354 9 2 1 944 +280931485: 6 16 6 6 981 97 18 85 +4405869: 5 879 3 1 6 11 4 79 676 +4059639829: 1 35 32 6 78 2 5 2 727 +9856351: 64 6 2 47 94 61 35 1 +439186: 5 3 67 6 434 6 69 332 5 +517143: 1 622 83 1 7 36 +165664600: 9 184 645 9 9 +94689: 30 28 53 4 85 +401750: 308 217 6 7 725 4 +13969: 1 7 839 882 8 137 +16325040: 6 2 92 96 423 271 48 1 +189601272909: 9 3 7 451 2 97 766 97 3 +62990101: 7 7 96 860 9 20 537 +4049517: 6 5 749 74 1 8 21 44 6 8 +150436674: 77 651 18 558 3 +18321341: 214 9 1 9 5 6 3 4 7 4 66 5 +92514: 87 3 1 520 4 +560988: 781 7 140 785 607 8 6 +165987817379: 7 51 732 4 5 7 3 58 5 4 +4034483568: 7 900 10 378 8 46 8 +1497690: 7 20 170 80 35 54 +7769135: 853 759 6 2 9 +6595797780: 6 1 94 2 5 4 42 3 755 52 +119736: 6 269 5 44 72 +25552872: 5 6 28 910 1 72 +205895844: 4 8 2 40 99 917 42 +24932042997: 233 241 2 5 888 5 +243855835: 840 144 84 3 24 403 +39703: 4 26 93 72 14 +641378: 68 5 380 959 382 +1377545: 44 148 362 1 6 6 73 2 +9302732: 9 749 46 30 5 49 5 93 +339950578: 522 1 650 578 +9838129210734: 13 2 616 9 7 7 210 734 +737128: 9 9 3 8 7 351 2 4 1 3 2 2 +55769633: 9 517 586 6 7 +12578527099: 6 28 39 1 9 4 7 4 81 79 3 +75229642377: 83 58 849 153 9 +305136277: 77 55 539 4 73 +313570281: 3 868 6 17 6 81 +894993: 4 414 7 538 6 293 +185669: 3 3 9 31 591 6 44 77 +458816: 54 8 1 57 9 9 718 8 67 +38131: 4 97 47 7 7 4 +352686: 311 21 54 7 5 +1300491121: 4 4 12 5 4 32 6 5 1 2 1 1 +31826211484: 76 32 1 16 1 9 6 695 6 6 +4872699570: 765 94 63 24 1 9 570 +12878665799: 6 93 112 420 26 615 +4823583425: 693 4 76 624 6 3 3 1 26 +496594: 81 932 6 820 9 6 5 62 2 +152328: 8 8 952 1 8 +20980802: 9 6 992 141 4 +380142: 39 92 6 5 77 7 93 3 21 7 +720370: 7 112 91 6 8 2 +5877933776425: 6 530 2 8 375 287 6 6 9 +256058201: 423 3 7 636 7 6 +909: 8 192 11 92 3 +1048494900: 5 5 18 6 8 99 6 59 925 +28744802: 72 9 1 6 174 20 2 +6055279032861: 3 3 5 6 8 8 9 790 32 8 6 1 +852390: 9 68 870 9 93 +9057692: 3 8 4 8 43 477 2 8 8 4 7 +101988: 30 872 63 54 88 +38880546: 83 7 432 54 8 +32558868652: 2 6 7 646 5 2 9 56 8 8 4 +6181768: 666 820 52 8 8 +1274874369303: 5 46 9 5 55 552 9 30 1 +185: 2 7 3 4 10 +2276343225: 36 506 45 636 4 49 9 +40320: 2 8 6 35 72 +10241762487128: 7 704 2 467 8 9 871 26 +14512: 4 2 7 30 8 1 8 4 6 6 460 2 +5327: 278 384 8 7 1 23 +98453376: 7 98 864 228 928 +769428228197: 26 3 5 957 3 2 281 9 4 3 +52256422: 2 46 128 35 81 7 +187357592: 18 184 741 3 33 4 5 2 +820487802: 1 8 41 557 499 2 5 8 6 4 +73666395: 9 1 911 4 687 85 2 27 +113555: 5 3 5 5 536 38 419 4 7 +1452250: 31 2 764 20 356 247 3 +3390369667: 8 92 2 4 19 96 68 +1107225: 98 4 356 344 5 618 7 +101347244: 15 55 395 1 165 119 +208300: 5 6 69 1 6 9 8 46 50 1 9 +4852: 74 833 5 234 83 +15654546: 951 614 417 37 6 +2693018232: 62 6 2 36 3 7 3 6 11 6 2 +1524: 9 2 3 5 9 68 3 917 317 2 +926809: 926 29 5 4 465 +26321344227834: 8 329 13 437 5 27 8 35 +15346737945589: 999 65 78 303 4 558 9 +7665016884: 3 3 3 5 6 288 32 83 3 8 4 +438321: 146 3 321 +310478244: 4 7 7 2 7 2 69 22 8 848 5 +19515527: 173 1 46 376 237 +43342591077: 445 2 957 4 9 149 17 +17089: 387 1 3 43 1 276 +15544385: 9 428 8 7 355 +158501632: 18 15 873 521 3 2 +130481497736: 2 7 5 3 3 834 92 9 2 508 +2664900480: 3 528 275 77 5 8 1 76 6 +32755062647: 2 3 7 7 53 26 264 7 +910980: 19 73 59 2 35 9 +138019: 111 5 57 5 1 9 1 5 310 9 +181835417368: 543 88 67 34 499 +276719085: 9 4 4 471 6 57 2 78 2 4 6 +96369824800: 3 448 69 49 8 800 79 +381860: 8 6 74 3 6 +59419064705: 42 2 71 195 209 91 +830012556: 6 1 4 116 2 3 2 2 2 5 4 34 +417036759314: 634 591 2 3 57 371 1 4 +119875: 538 6 51 22 261 +575310: 575 3 10 +26092087014: 65 8 8 501 70 1 4 +450120: 179 14 3 32 4 4 219 8 3 +26208832: 598 3 25 6 1 8 1 8 2 436 +297373938: 6 6 7 9 9 6 3 30 64 936 2 +1915729: 982 4 929 7 29 +30424: 288 1 98 63 2 2 +23062126: 62 33 37 2 6 +547602052240: 3 8 5 9 577 699 7 20 2 +15127: 754 8 2 24 7 +2111: 9 65 4 5 7 4 +6949826: 8 8 6 90 585 6 2 3 7 9 5 +3670110: 3 12 438 19 56 405 +76443: 45 2 849 33 +8301786: 263 9 2 6 269 5 12 88 +9840877646: 5 5 246 2 86 22 1 706 8 +911542921: 9 5 7 2 2 6 952 57 5 2 5 1 +70853786: 70 853 7 80 6 +7428219375: 5 89 9 643 388 7 967 +27825129585: 6 32 51 1 9 4 6 8 106 5 9 +665379375: 371 72 179 97 478 +25696962: 481 32 939 5 6 8 +655401150: 2 2 3 5 47 3 2 96 9 4 2 75 +22314567123: 921 8 1 773 63 240 +5870856: 1 4 4 4 70 856 +1760480233450: 419 3 48 588 7 720 2 9 +49241386: 8 6 6 8 4 1 3 788 3 9 9 5 +1742802: 35 94 68 519 +38814494711: 5 9 27 272 94 710 +44560: 9 84 58 66 7 639 +9516688: 951 66 35 6 48 +606955: 2 6 1 196 258 3 59 75 2 +49694412: 7 3 90 6 7 1 2 58 34 4 3 +9493: 8 7 9 3 8 972 7 3 8 2 5 6 +3038: 167 1 9 7 2 +14458: 957 7 3 5 1 +2450237394123: 18 6 50 23 7 394 123 +59597284: 63 3 35 591 509 93 +2820709: 28 126 71 4 90 9 53 7 +13554636: 98 6 381 951 23 +158650: 28 563 6 90 911 +8440145927: 7 4 1 330 7 1 3 3 585 7 7 +44602592: 495 57 33 9 9 985 +3429427: 549 5 66 2 61 7 +877: 99 2 536 215 3 15 7 +5757946: 6 6 90 456 9 8 69 3 9 19 +1310934: 653 2 467 2 +11348641466: 1 4 680 333 2 20 8 7 9 6 +357589638904: 28 9 6 3 4 47 7 786 5 9 4 +151375096: 7 82 2 4 297 625 4 8 2 +28357561: 44 7 99 93 10 1 +123173999786: 6 2 201 7 5 5 9 9 72 22 2 +5184: 53 954 196 93 4 +74584: 92 13 34 8 608 +47852: 5 26 379 87 4 63 445 +60083099: 45 6 77 34 85 +14309725885: 5 11 4 24 57 8 55 7 +1138: 3 542 8 1 563 6 3 6 4 2 +2002: 2 7 64 2 29 9 2 6 9 3 2 1 +47912939: 5 3 9 14 6 1 90 5 2 93 5 4 +1587691: 16 74 42 6 1 7 80 4 +57824354: 7 227 986 57 8 7 +4216: 2 1 2 17 93 519 @@ -0,0 +1,114 @@ +#!/usr/bin/perl +use strict; +use warnings; + +# use Data::Dumper; + +my @numberss; +my @results; +my $result_sum = 0; +my $result_sum_part_two = 0; + +open(my $fh, "7-input.txt") or die; +while (<$fh>) { + chomp; + $_ =~ /^(\d+):\s(.*)$/; + push @results, $1; + push @numberss, [split /\s/, $2]; +} +close($fh); + +my $ffffffffffffff = -1; +foreach my $result (@results) { + $ffffffffffffff++; + my $numbers = $numberss[$ffffffffffffff]; + my @possible_operations_part_one = combinations(['+', '*'], scalar @$numbers-1); + my @possible_operations_part_two = combinations(['+', '*', '|'], scalar @$numbers-1); + + my @op_list_base; + foreach (0..scalar @$numbers-1) { + if ($_ == 0) { $op_list_base[$_] = $numbers->[$_]; } + else { $op_list_base[$_+$_] = $numbers->[$_]; } + } + + my @to_calculate_part_one; + foreach my $operation_symbol (@possible_operations_part_one) { + my @op_list = @op_list_base; + my $symbol_idx = 0; + foreach (0..scalar @op_list-1) { + if (not defined $op_list[$_]) { + $op_list[$_] = $operation_symbol->[$symbol_idx]; + $symbol_idx++; + } + } + push @to_calculate_part_one, \@op_list; + } + + my @to_calculate_part_two; + foreach my $operation_symbol (@possible_operations_part_two) { + my @op_list = @op_list_base; + my $symbol_idx = 0; + foreach (0..scalar @op_list-1) { + if (not defined $op_list[$_]) { + $op_list[$_] = $operation_symbol->[$symbol_idx]; + $symbol_idx++; + } + } + # print Dumper(\@op_list); + push @to_calculate_part_two, \@op_list; + } + + foreach (0..scalar@to_calculate_part_one-1) { + if (calculate($to_calculate_part_one[$_]) == $result) { + $result_sum=$result_sum+$result; + print "puzzle 1: $result ok\n"; + last; + } + } + + foreach (0..scalar@to_calculate_part_two-1) { + if (calculate($to_calculate_part_two[$_]) == $result) { + $result_sum_part_two=$result_sum_part_two+$result; + print "puzzle 2: $result ok\n"; + last; + } + } +} + +print "puzzle 1: $result_sum\n"; +print "puzzle 2: $result_sum_part_two\n"; + +sub calculate { + my $expression = shift; + my @local_expression = @$expression; + + while (scalar @local_expression > 1) { + for(my $o=1; $o <= scalar @local_expression-2; $o=$o+2) { + my $r = 0; + if ($local_expression[$o] eq '*') { $r = $local_expression[$o-1] * $local_expression[$o+1]; } + elsif ($local_expression[$o] eq '+') { $r = $local_expression[$o-1] + $local_expression[$o+1]; } + elsif ($local_expression[$o] eq '|') { $r = $local_expression[$o-1] . $local_expression[$o+1]; } + else { die; } + $local_expression[$o-1] = $r; + splice @local_expression,$o,2; + last; + } + } + return $local_expression[0]; +} + +sub combinations { + my ($symbols, $len) = @_; + my @result = (); + my $s_len = scalar @$symbols; + for my $i (0..$s_len**$len - 1) { + my $num = $i; + my @combination; + for my $position (1..$len) { + unshift @combination, $symbols->[$num % $s_len]; + $num = int($num/$s_len); + } + push @result, \@combination; + } + return @result; +} |