5 my @ins = map { chomp; [ split /\s+/ ] } <STDIN>;
14 # my @inp = split //, 13579246899999;
22 my $key = join(',', $ip, $regs{w}, $regs{x}, $regs{y}, $regs{z});
23 return if $cache{$key}++;
25 say "calculate $ip $regs{q}"
26 if length($regs{q}) < 5;
28 my ($ins, $r1, $r2) = @{ $ins[$ip] };
29 my $v2 = (defined $r2 && $r2 =~ /[w-z]/) ? $regs{$r2} : $r2;
31 if (!length($regs{q})) {
32 $regs{q} = $regs{$r1} = shift @ARGV;
33 say "calculate for $regs{q}";
35 for my $val (reverse '1' .. '9') {
37 calculate($ip+1, %regs, q => $regs{q} . $val);
40 } elsif ($ins eq 'add') {
42 } elsif ($ins eq 'mul') {
44 } elsif ($ins eq 'div') {
46 $regs{$r1} = $regs{$r1} > 0 ? int($regs{$r1}) : -int(-$regs{$r1});
47 } elsif ($ins eq 'mod') {
49 } elsif ($ins eq 'eql') {
50 $regs{$r1} = $regs{$r1} == $v2 ? 1 : 0;
53 # say join(' ', $ip, @{ $ins[$ip] }), "\n\tw=$regs{w} x=$regs{x} y=$regs{y} z=$regs{z}";
57 say "accepted $regs{q}";