]> www.fi.muni.cz Git - aoc.git/blob - 2016/23.pl
Day 25: examining the input
[aoc.git] / 2016 / 23.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use v5.30;
5
6 my %regs;
7 my @code = map { chomp; $_ } <>;
8
9 my $ip = 0;
10 while ($ip < @code) {
11         say "$ip $code[$ip] ", join(', ', map { "$_=$regs{$_}" } sort keys %regs);
12         $_ = $code[$ip++];
13         if (/cpy (-?\w+) (\w+)/) {
14                 my $val = $1;
15                 my $reg = $2;
16                 $val = $regs{$val} if $val =~ /[a-z]/;
17                 $regs{$reg} = $val;
18         } elsif (/inc (\w+)/) {
19                 $regs{$1}++;
20         } elsif (/dec (\w+)/) {
21                 $regs{$1}--;
22         } elsif (/jnz (-?\w+) (-?\d+)/) {
23                 my ($reg, $val) = ($1, $2);
24                 $reg = $regs{$reg} if $reg =~ /[a-z]/;
25                 if ($reg) {
26                         $ip += $val - 1;
27                 }
28         } else {
29                 say "Unknown instrution: $_";
30         }
31 }
32
33 say $ip;
34 say $regs{a};
35