]> www.fi.muni.cz Git - aoc.git/blob - 2017/45.pl
Day 25: examining the input
[aoc.git] / 2017 / 45.pl
1 #!/usr/bin/perl
2
3 use v5.30;
4 use strict;
5
6 my @code = map { chomp; [ split /\s+/ ] } <>;
7 my %regs;
8 my $pc = 0;
9 my $muls;
10 while ($pc < @code) {
11         my ($ins, $a1, $a2) = @{ $code[$pc] };
12         my $v1 = $a1 =~ /[a-z]/ ? $regs{$a1} : $a1
13                 if defined $a1;
14         my $v2 = $a2 =~ /[a-z]/ ? $regs{$a2} : $a2
15                 if defined $a2;
16         if ($ins eq 'set') {
17                 $regs{$a1} = $v2;
18         } elsif ($ins eq 'sub') {
19                 $regs{$a1} -= $v2;
20         } elsif ($ins eq 'mul') {
21                 $regs{$a1} *= $v2;
22                 $muls++;
23         } elsif ($ins eq 'jnz') {
24                 $pc += $v2-1 if $v1;
25         } else {
26                 die "unknown insn $ins";
27         }
28         $pc++;
29 }
30
31 say $muls;
32         
33