6 my @code = map { chomp; [ split /\s+/ ] } <>;
19 # my %regs = (a => 479001600, b => 1, c => 2, d => 0);
20 # $code[24][0] = 'dec'; # after b=4
21 # $code[22][0] = 'dec'; # after b=3
22 # $code[20][0] = 'cpy'; # after b=2
23 # $code[18][0] = 'cpy'; # after b=2
24 # $code[16][0] = 'inc'; # after b=1
28 say join(' ', $ip, @{ $code[$ip] }, map { "$_=$regs{$_}" } sort keys %regs)
31 my @ins = @{ $code[$ip] };
32 if ($ins[0] eq 'cpy') {
35 $val = $regs{$val} if $val =~ /[a-z]/;
37 } elsif ($ins[0] eq 'inc') {
39 } elsif ($ins[0] eq 'dec') {
41 } elsif ($ins[0] eq 'jnz') {
42 my ($reg, $val) = @ins[1..2];
43 if ($val eq '-2' && $ip >= 2 && $code[$ip-1][0] eq 'dec'
44 && $code[$ip-2][0] eq 'inc'
45 && $code[$ip-1][1] eq $reg) {
46 $regs{$code[$ip-2][1]} += $regs{$reg};
49 $val = $regs{$val} if $val =~ /[a-z]/;
50 $reg = $regs{$reg} if $reg =~ /[a-z]/;
54 } elsif ($ins[0] eq 'tgl') {
56 $off = $regs{$off} if $off =~ /[a-z]/;
57 my $other = $code[$ip + $off];
58 say "toggle ", $ip+$off, " $other->[0] to $tgl{$other->[0]}"
61 $other->[0] = $tgl{$other->[0]} if $other;
63 say "Unknown instrution: $_";