]> www.fi.muni.cz Git - aoc.git/blob - 2015/45.pl
Year 2015
[aoc.git] / 2015 / 45.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4 use strict;
5
6 my %regs = ( a => 0, b => 0 );
7 my @code = map { chomp; [ split /[ ,+]+/ ] } <>;
8 my $ip = 0;
9 while ($ip < @code) {
10         my ($ins, $v1, $v2) = @{ $code[$ip] };
11         say "$ip: ", join(' ', @{ $code[$ip] }), " a=$regs{a} b=$regs{b}";
12         if ($ins eq 'hlf') {
13                 $regs{$v1} = int($regs{$v1}/2);
14         } elsif ($ins eq 'tpl') {
15                 $regs{$v1} *= 3;
16         } elsif ($ins eq 'inc') {
17                 $regs{$v1}++;
18         } elsif ($ins eq 'jmp') {
19                 $ip += $v1 - 1;
20         } elsif ($ins eq 'jie') {
21                 $ip += $v2 - 1 if $regs{$v1} % 2 == 0;
22         } elsif ($ins eq 'jio') {
23                 $ip += $v2 - 1 if $regs{$v1} == 1;
24         } else {
25                 say "Invalid insn $ins";
26         }
27         $ip++;
28 }
29
30 say "ip=$ip";
31 say $regs{b};