# Clue interpreter # written by Keymaker local(*FH); open(FH, $ARGV[0]) or do { print "Error in reading the program.\n"; exit 1; }; my $clue = do { local($/); }; close(FH); $c = -1; if($ARGV[1] ne ""){ if($ARGV[1] =~ /^[0-9]*$/){ $c = $ARGV[1]; } } sub getnext{ $v = $_[0] + 1; if($v >= length($clue)){ $v=0; } $v; } if($clue =~ /^([01]*)$/){ $clue = $1; $m = 0; $n = 0; while(length($clue) > 0){ if($c > 0){ $c--; }elsif($c == 0){ print "Interpreter terminated due to the given limit.\n"; exit 0; } print "$clue\n"; if(substr($clue, $n, 1) eq "1"){ $a = getnext($n); $b = getnext($a); $x = substr($clue, $a, 1); $y = substr($clue, $b, 1); if($x eq "1" && $y eq "1"){ $v = "0"; }else{ $v = "1"; } $clue = $v . $clue; $n = getnext($b + 1); }else{ $clue = substr($clue, 0, length($clue)-1); $n = getnext($n); } $m++; } print "Program halted on cycle $m.\n"; }else{ print "Error, program not valid.\n"; exit 1; }