diff options
-rw-r--r-- | day05 | 1 | ||||
-rw-r--r-- | day05.pl | 32 |
2 files changed, 33 insertions, 0 deletions
diff --git a/day05 b/day05 new file mode 100644 index 0000000..e3fe016 --- /dev/null +++ b/day05 @@ -0,0 +1 @@ +3,225,1,225,6,6,1100,1,238,225,104,0,2,136,183,224,101,-5304,224,224,4,224,1002,223,8,223,1001,224,6,224,1,224,223,223,1101,72,47,225,1101,59,55,225,1101,46,75,225,1101,49,15,224,101,-64,224,224,4,224,1002,223,8,223,1001,224,5,224,1,224,223,223,102,9,210,224,1001,224,-270,224,4,224,1002,223,8,223,1001,224,2,224,1,223,224,223,101,14,35,224,101,-86,224,224,4,224,1002,223,8,223,101,4,224,224,1,224,223,223,1102,40,74,224,1001,224,-2960,224,4,224,1002,223,8,223,101,5,224,224,1,224,223,223,1101,10,78,225,1001,39,90,224,1001,224,-149,224,4,224,102,8,223,223,1001,224,4,224,1,223,224,223,1002,217,50,224,1001,224,-1650,224,4,224,1002,223,8,223,1001,224,7,224,1,224,223,223,1102,68,8,225,1,43,214,224,1001,224,-126,224,4,224,102,8,223,223,101,3,224,224,1,224,223,223,1102,88,30,225,1102,18,80,225,1102,33,28,225,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,108,677,677,224,102,2,223,223,1005,224,329,1001,223,1,223,1107,677,226,224,102,2,223,223,1006,224,344,1001,223,1,223,108,226,226,224,102,2,223,223,1005,224,359,1001,223,1,223,1108,677,226,224,102,2,223,223,1006,224,374,101,1,223,223,108,677,226,224,102,2,223,223,1006,224,389,1001,223,1,223,107,226,226,224,102,2,223,223,1005,224,404,1001,223,1,223,8,226,226,224,102,2,223,223,1006,224,419,101,1,223,223,1107,677,677,224,102,2,223,223,1006,224,434,1001,223,1,223,1107,226,677,224,1002,223,2,223,1006,224,449,101,1,223,223,7,677,677,224,1002,223,2,223,1006,224,464,1001,223,1,223,1108,226,677,224,1002,223,2,223,1005,224,479,1001,223,1,223,8,677,226,224,1002,223,2,223,1005,224,494,101,1,223,223,7,226,677,224,102,2,223,223,1005,224,509,101,1,223,223,1008,677,226,224,102,2,223,223,1006,224,524,101,1,223,223,8,226,677,224,1002,223,2,223,1006,224,539,1001,223,1,223,1007,677,677,224,102,2,223,223,1005,224,554,101,1,223,223,107,226,677,224,1002,223,2,223,1005,224,569,1001,223,1,223,1108,677,677,224,1002,223,2,223,1006,224,584,1001,223,1,223,1008,226,226,224,1002,223,2,223,1005,224,599,101,1,223,223,1008,677,677,224,102,2,223,223,1005,224,614,101,1,223,223,7,677,226,224,1002,223,2,223,1005,224,629,1001,223,1,223,107,677,677,224,1002,223,2,223,1006,224,644,101,1,223,223,1007,226,677,224,1002,223,2,223,1005,224,659,1001,223,1,223,1007,226,226,224,102,2,223,223,1005,224,674,101,1,223,223,4,223,99,226 diff --git a/day05.pl b/day05.pl new file mode 100644 index 0000000..e24b27c --- /dev/null +++ b/day05.pl @@ -0,0 +1,32 @@ +#!/usr/bin/perl -w +use v5.16; + +use File::Slurper 'read_text'; + +sub compute { + my @in = @_; + my @out = (); + + my @d = split ",", read_text "day05"; + + for (my $ip = 0; $d[$ip] != 99; ) { + my ($pm3, $pm2, $pm1, $op1, $op2) = split '', sprintf("%05d", $d[$ip]); + my $op = $op1 . $op2; + my $p1 = $pm1 ? $d[$ip+1] : $d[$d[$ip+1]]; + my $p2 = $pm2 ? $d[$ip+2] : $d[$d[$ip+2]]; + my $p3 = $pm3 ? $d[$ip+3] : $d[$d[$ip+3]]; + if ($op == 1) { $d[$d[$ip+3]] = $p1 + $p2; $ip += 4; } + elsif ($op == 2) { $d[$d[$ip+3]] = $p1 * $p2; $ip += 4; } + elsif ($op == 3) { $d[$d[$ip+1]] = shift @in; $ip += 2; } + elsif ($op == 4) { push @out, $p1; $ip += 2; } + elsif ($op == 5) { $ip = $p1 ? $p2 : $ip + 3; } + elsif ($op == 6) { $ip = !$p1 ? $p2 : $ip + 3; } + elsif ($op == 7) { $d[$d[$ip+3]] = $p1 < $p2; $ip += 4; } + elsif ($op == 8) { $d[$d[$ip+3]] = $p1 == $p2; $ip += 4; } + } + + @out; +} + +say((compute(1))[-1]); # 13978427 +say compute(5); # 11189491 |