summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--6-input.txt130
-rw-r--r--6.pl96
-rw-r--r--7-input.txt850
-rw-r--r--7.pl114
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 @@
+.....#......................................................#...................#.........................................#..#....
+.......................#.......#...............................................#.................#...#.......#..............#.....
+.........#.................................................................#.....................##...............................
+.....#..#.............#.......................#..#....#............#.............................................#................
+............#................##............................................#.##..................#.................#.....#...#....
+....................................................................#..#.................#.....#................#....#.....#......
+.#.........##.................##................#..............................................#..................................
+...................#..................#.......#......#......................#..#...................#.........#...............#.#..
+.......................#.#.........#...............#....................#........#.............#..................................
+......#...........#........................................#........#.........#...............#.#.........#.......................
+...#...........................................................#...........#............................#.........................
+...........#............................#.#........#...#........#........................................................#........
+.........#................................................#...#..#........#............#................#.........................
+..#.....................................................................#...............#.........#....#.......#..................
+.......................#....#..#............#.........#.............#...................##....................................#...
+..................#...................................................................#.....................#...................#.
+............................#..........................#.....#...........##.......................................................
+........................#.............................#...............#..............................#.........................#..
+.....................#..........#...#.....#....#..............#...........................................#...............#.#.....
+...................................#.................................#......#..................#..................................
+.#.....#.......##......#..................#...............................................#.........................#.........#...
+.................#...............#..............................#............................................#......#.............
+...#.........#................#...#....................#......................#.#......#.............#............................
+.............#..........##....#...#................#.............#.............#............................................#.....
+.....#............................................................................................................#...............
+........................#..........................##........#........................................#........#..................
+..........................#.....##.#.............#.........#..............................#..............................#........
+..............#.....................#...............................................#..................................#..........
+...#................................................#.........#.....................#..........................................#..
+.##..............#..........#......................................................................#.........#........#.........#.
+...##.#.....#........#..........................#.............................#..........#.#..#...................................
+..................................#...#......#......#................#..#.....................................#...#...............
+.........................................................................................#..................#......#..............
+.................#....................#..#....#..............................#........##...#.......#...............#..............
+...#.................#................#..................................#..................##....##.....#............#...........
+..........#...#....................##......................#.....#...........#......#......#.............##....#...#........#.#...
+............................#......#.........#..............................................................#........#............
+.........................................#.........................................................#...............#.............#
+.....#..........#..#........#................................................................................##......#............
+.#................#.....................................................................................#.....#...................
+..............#........#..................................#..............................##.......................................
+........................#.....................#..............................#..................#.............................#.##
+#...........................................................#..##........#........................................................
+..............#...............#.........#...........^.....................................................#...#.........##..#.....
+......................................................#.......................................#..............#...............#....
+...#....#..................#....#.......................#.#..........#.......#.................#................................#.
+#.........................................................................................................#.......................
+..........................#......................................................................#.............#..................
+................#...............................................................#........#........................................
+..........#............#...............#.#........................................................................................
+....#.....#............#.....##.........#......##.................#.......#................#...............................#...#..
+................................................................................#...#.......................................#.....
+.#........................................#.................................................................#.#...................
+.......#....#...................................................................................#...........#..#.............#....
+...#...#...............................................................................................................#..........
+..#....................................#......#.................#.........................................................#.......
+...........................................#......#.........#.##........##..#.........#..........................#....##.#....#...
+.........................#...............#............................................................................#...........
+................................................#................#..................#..#...........#.......................#.....#
+..........................................................#..........#........................................#...................
+..................#...................#................##.........#...........................#...................................
+............................#.................................................................#...........#.#.....................
+................#.......................#.........................................................................#....#..........
+#..........#..............#.#............................................................................................#........
+..........................................................................................#.......#.........................#....#
+...........................................#.......#................................................................#...#.........
+..#...................#........................................#..............#.......................#...........................
+.......................#..............................#...........................#......#......................#........#........
+.....#................................................................................#....#......................................
+..#..................................#.........#....#............#....#..............#.............#......#.........#......#....#.
+.......##.................................................................................................#.#....#................
+............................................#.....#...................#...........#.........#.....................................
+...............#.........................................#.............................#.........................#............#...
+..............................................##..................................................#........................#......
+..................................................................................................#.................#............#
+......................#.......................#.........#......................................................................#..
+..#...........................#...........................................................................#.....#........#........
+..........#....................#...........................##................................................................#....
+.........#........#...........................................#........##.........................................................
+....#.............................#....................#.................#..........................#........................#....
+.......................................#...#....#...............................................#.................................
+............#............................................#..............................#..........#......#.......................
+.#..............................#...........#........#...............................#.#......#..................................#
+#................#..#.............................................................................................................
+................................#................#............#....#.#..................##.....................#...............#.#
+#....##................#...........#....#..#..........#.....................#..........................#.....................#....
+............................................................................................#.....................................
+.......................#................................................##..................................#.....................
+....#.....#..#................................................................................................##..................
+..........................#......#...#...#..........#...#................#.................................................#......
+............................#....#.#.......#..........#............................................#..............................
+......#...........#......................#..#.....................................................................................
+.........................................#...................................................##...............#............#...##.
+...................................#.#............................................................................................
+......................#........##..................................................#..............................................
+...................#......................................................#......#.............................#...........#......
+......#................#................................................................................#..................#......
+..#.........................#.....#..............#.........#...................#.......................................#..........
+..................#..............................................#......#.#.......................................................
+...........#.....................................................................#.......................#........................
+.......#.........###.....................#........................................................................................
+...............#...#..........#........................#....................#......#............#..................#..............
+.............#.......#.............#....................................................#.....................................#...
+.............................................................................#.#...............................#..#...............
+.........##..........#..#.#.................................................................................#................#....
+.#..................#.....................................#...................#.#..............#...........................#......
+........#.....#...........................#..........................#.............................#...............#..............
+#.........#.#.......................................................................................................#.............
+..#...................................................................#............#...#.........#................................
+..................#......#........#...........#......................#........#..#.......................................#...#..#.
+.......................................................#.............#...........#............................#............#......
+..............................................#....................................................................#..............
+.............#....................#.......................#.............#..........#.........#.............#....#.......#.....#...
+...#...................#...............#........#.............#.................#..........#........#................#............
+...........#...............#.....................#.................................................#...#.....#.....#..............
+....#......................................#......#..............................#...........#.....#..................#...........
+#.........#...................#.........#............#............#..............#..........#...........#...#.#..##...............
+...........................................................#..................#......#..................#...............#.........
+...........#.......................#.........................................................#.......#..............#..........#..
+.................................#.....#.....#..............................#..........#..............#............#..............
+...............#.......................................................................##.........#...........................#...
+....#...............#.........#.#...........#.......#.#..#....#...................................................................
+.........#.............................................#.......................................................#..........##......
+......................................#...............#.......#..#..#.#...................#....................#.#................
+.................#..................................................................#..........................#.....#......#.#...
+..#...........#..................#..............#.....#......#.................#..............##.......#...#.......#.......#......
+......................................#.....................#..........#............................................##.#..........
+#......#................#........................................................#....#....##..................#.................#
+............##..............##..........#........##.....................................#..........#..............................
+.#.##............#.................#...................#....#...#...............................................#.................
diff --git a/6.pl b/6.pl
new file mode 100644
index 0000000..6705a67
--- /dev/null
+++ b/6.pl
@@ -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
diff --git a/7.pl b/7.pl
new file mode 100644
index 0000000..e671692
--- /dev/null
+++ b/7.pl
@@ -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;
+}