brainfuck :)

fixxxer

К.О.
Партнер клуба
brainfuck :)

дело было вечером, делать было нечего:

PHP:
<?
/*
 * The Brainfuck Language Interpreter
 * by fixxxer, Apr/17/2005 @~4AM
 *
 * Brainfuck is: [url]http://www.muppetlabs.com/~breadbox/bf[/url]
 */

set_time_limit(0);

function brainfuck($P, $IN, $N)
{
  define('TAPESIZE',30000);
  $p = 0;
  $ip = 0;
  $t = array_fill(0,TAPESIZE,0);
  if ($N) $IN = preg_split('~\s+~',$IN);
  $I=array(
  '>'=>'if($p<TAPESIZE-1)$p++;',
  '<'=>'if($p>0)$p--;',
  '+'=>'if($t[$p]<255)$t[$p]++;',
  '-'=>'if($t[$p]>0)$t[$p]--;',
  '.'=>'echo $N?$t[$p]."\n":chr($t[$p]);',
  ','=>'$t[$p]=$N?$IN[$ip++]:ord($IN[$ip++]);',
  '['=>'if(!$t[$p])for($i++,$j=0;$i<$len-1&&!(!$j&&\']\'==$P[$i]);$i++)if(\'[\'==$P[$i])$j++;else if(\']\'==$P[$i])$j--;',
  ']'=>'if($t[$p])for($i--,$j=0;$i>=0 && !(!$j && \'[\'==$P[$i]); $i--)if(\']\'==$P[$i])$j++;else if(\'[\'==$P[$i])$j--;',
  );
  for ($o='',$i=0,$len=strlen($P); $i<$len; $i++) eval($I[$P[$i]]);
}
?>
<html>
<head><title>BrainFuck interpreter</title></head>
<body>
<?
  $program = isset($_POST['program']) ? $_POST['program'] : '';
  $input = isset($_POST['input']) ? $_POST['input'] : '';
  if (!empty($program))
    echo 'Output:<pre style="border:1px dotted">', 
         brainfuck(preg_replace("~[^<>+.,\[\]-]~ms","",$program), $input, isset($_POST['numeric'])), 
         '</pre><hr>';
?>
<form method=post action="<?=$_SERVER['PHP_SELF']?>">
Program:<br>
<textarea cols=80 rows=30 name="program"><?=htmlspecialchars($program)?></textarea>
<br>Program input:<br>
<textarea cols=80 rows=30 name="input"><?=htmlspecialchars($input)?></textarea>
<br><input type=checkbox name=numeric value=1 <?=isset($_POST['numeric'])?'checked':''?>> Numeric I/O
<p><input type=submit value='Run'>
</form>
</body>
</html>
вот такой вот, простите, онанизм.

p.s. тормозит дико. надо было компилятор в пхп-код делать :)
 
Сверху