5 my @ins = map { chomp; [ split /\s+/ ] } <STDIN>;
15 # my @inp = split //, 13579246899999;
23 my $key = join(',', $ip, $regs{w}, $regs{x}, $regs{y}, $regs{z});
24 return if $cache{$key}++;
26 say "calculate $ip $regs{q}"
27 if length($regs{q}) < 5;
29 my ($ins, $r1, $r2) = @{ $ins[$ip] };
30 my $v2 = (defined $r2 && $r2 =~ /[w-z]/) ? $regs{$r2} : $r2;
34 $regs{q} .= $regs{$r1} = $v;
35 say "calculate for $regs{q}";
37 for my $val ('1' .. '9') {
39 calculate($ip+1, %regs, q => $regs{q} . $val);
42 } elsif ($ins eq 'add') {
44 } elsif ($ins eq 'mul') {
46 } elsif ($ins eq 'div') {
48 $regs{$r1} = $regs{$r1} > 0 ? int($regs{$r1}) : -int(-$regs{$r1});
49 } elsif ($ins eq 'mod') {
51 } elsif ($ins eq 'eql') {
52 $regs{$r1} = $regs{$r1} == $v2 ? 1 : 0;
55 # say join(' ', $ip, @{ $ins[$ip] }), "\n\tw=$regs{w} x=$regs{x} y=$regs{y} z=$regs{z}";
59 say "accepted $regs{q}";