updated@20:40msk 20nov209
source:code.txt
<form action="t.php" method="POST">
<p><textarea rows="10" cols="45" name="text"><? echo @$_POST['text'];?></textarea></p>
<p><input type="text" name="word" value="<? echo @$_POST['word'];?>"></p>
<p><input type="submit" value="Отправить"></p>
</form>
<?
//header("Content-type: text/plain");
if ($_SERVER['QUERY_STRING']=='about'){
echo 
"
Это <s>запорожец</s> машина Тьюринга. <br>
 Пример и формат записи входа.
<pre>
q1|q2 0r|q2 1r
q2|q0 1L|q1 0r </pre>
<br> Входное слово: 111101
<br>
Contact:  ...
"
; die ();


}
function 
check($v){
if (!
in_array($v['mov0'],array('L','R','S'))) return 'L,R or S in mov0 please';
if (!
in_array($v['mov1'],array('L','R','S'))) return 'L,R or S in mov1 please';
if (!
in_array($v['ret0'],array('0','1'))) return '0 or 1 in ret0 please';
if (!
in_array($v['ret1'],array('0','1'))) return '0 or 1 in ret1 please';
if (
strlen($v['id'])<1) return 'commandnameID empty'
if (
strlen($v['go0'])<1) return 'commandnameGo0 empty';
if (
strlen($v['go1'])<1) return 'commandnameGo1 empty'

return 
true;
}

function 
cv($v){
for (
$i=0$i<strlen($v);$i++) if (($v{$i}!=='0')AND($v{$i}!=='1')) return false;
return 
true;
}

function 
out($w,$ptr,$c){
ksort($w);
foreach (
$w as $k=>$v) if ($k==$ptr) echo "<sub>$c</sub><u>$v</u>"; else echo $v;
echo 
"\n";
return 
1;
}
if (!
$_POST) die();
$first='';
$word=$_POST['word'];
if (!
cv($word)) die ('bad word');
$list$_POST['text'];
$list=str_replace("\r",'',$list);
$list explode("\n"$list);

$cmd=array();
 
 foreach (
$list as $k){
    if (
trim($k)=='') continue;
    
$v=array();
    
$s=$k;
    While(
strpos($s,'  ')!==false$s=str_replace('  ',' ',$s);
    
//id
    
$p=strpos($s,'|');
    
$v['id']=substr($s,0,$p);
    
$s=substr($s,$p+1);
    
//go0
    
$p=strpos($s,' ');
    
$v['go0']=substr($s,0,$p);
    
$s=substr($s,$p+1);
    
//do0
    
$p=strpos($s,'|');
    
$v['do0']=substr($s,0,$p);
    
$s=substr($s,$p+1);
    
//go1
    
$p=strpos($s,' ');
    
$v['go1']=substr($s,0,$p);
    
$s=substr($s,$p+1);
    
//do1
    //$p=strpos($s,'|');
    
$v['do1']=$s;
    
//$s=substr($s,$p+1);
     
    /*preg_match("!(.*?)|(.*?)/s(.*?)|(.*?)/s(.*?)!",$k,$ok);
    var_dump($ok);
    list($v['all'],$v['id'],$v['go0'],$v['do0'],$v['go1'],$v['do1']) = $ok;
    */
    
$v['ret0']=strtoupper($v['do0']{0});
    
$v['mov0']=strtoupper($v['do0']{1});
    
$v['ret1']=strtoupper($v['do1']{0});
    
$v['mov1']=strtoupper($v['do1']{1});
    if (
$first==''$first=$v['id'];
    unset(
$v['do0'],$v['do1']);
    
ksort($v);
    
$r=check($v);
    if (
$r!==true) die ($r);
    
    
//var_dump($v);
    
$cmd[$v['id']]=$v;
}
echo 
'<pre>';
echo 
"T\t|\t 0\t\t|\t 1\t\t\n<hr>";
foreach (
$cmd as $v) echo "{$v['id']}\t|{$v['go0']}\t {$v['ret0']}\t{$v['mov0']}\t|{$v['go1']}\t {$v['ret1']}\t{$v['mov1']}\t\n";
echo 
"-------------------\n";

$w=array();
for (
$i=0$i<strlen($word);$i++) $w[$i]=$word{$i};
$ptr=0;
$loop=0;
$c=$first;
while (
$loop<100){

    
out($w,$ptr,$c);
    if (!isset(
$cmd[$c])) { echo 'nocmd>ostanoff'; break; }
    
$newval=$cmd[$c]['ret'.$w[$ptr]];
    
$newptr=$cmd[$c]['mov'.$w[$ptr]];
    
$c=$cmd[$c]['go'.$w[$ptr]];
    
$w[$ptr]=$newval;
    if (
$newptr=="S") {echo 'ostanoff'; break;}
    if (
$newptr=="L"$ptr--;
    if (
$newptr=="R"$ptr++;
    if (!isset(
$w[$ptr])) $w[$ptr]='0';
    
$loop++;
}
if (
$loop>99) echo "/n Terminated; more than 100 loops/movs";
echo 
'</pre>';
?>
1