5 chomp (my @mem = split /,/, <>);
8 my ($mref, $addr, $mode) = @_;
10 return $mref->[ $mref->[$addr] ];
11 } elsif ($mode == 1) {
12 return $mref->[$addr];
19 my ($mref, $iref) = @_;
24 my $opcode = $mem[$pc];
25 my $op = int($opcode % 100);
26 my $m1 = int($opcode / 100) % 10;
27 my $m2 = int($opcode / 1000) % 10;
29 $mem[ $mem[$pc+3] ] = m2val(\@mem, $pc+1, $m1)
30 + m2val(\@mem, $pc+2, $m2);
33 $mem[ $mem[$pc+3] ] = m2val(\@mem, $pc+1, $m1)
34 * m2val(\@mem, $pc+2, $m2);
37 $mem[ $mem[$pc+1] ] = shift @inputs;
40 say m2val(\@mem, $pc+1, $m1);
43 if (m2val(\@mem, $pc+1, $m1)) {
44 $pc = m2val(\@mem, $pc+2, $m2);
49 if (!m2val(\@mem, $pc+1, $m1)) {
50 $pc = m2val(\@mem, $pc+2, $m2);
56 m2val(\@mem, $pc+1, $m1)
57 < m2val(\@mem, $pc+2, $m2) ? 1 : 0;
61 m2val(\@mem, $pc+1, $m1)
62 == m2val(\@mem, $pc+2, $m2) ? 1 : 0;