Langauge: Perl Author: Jason Reed Notes: A translation of his BrainF*** program From the Author:Here's the perl produced by a quick quasi-optimizing bf->perl kluge I wrote (in perl, by Turing) edited by hand just a little. Especially the addition comments. I may have screwed a couple things up hand-optimizing (namely stuff like taking out every other newline in the preamble and converting the brainf*** idiom '[-]' to $array[$p]=0), so your quinage may vary. But the idea's there. # Preamble: Create the string $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=93; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=45; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=93; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=46; $p+=2; $array[$p]+=46; $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=45; $p+=2; $array[$p]+=93; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=45; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=46; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=93; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=45; $p+=2; $array[$p]+=93; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=45; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=43; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=93; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=93; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=60; $p+=2; $array[$p]+=93; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=91; $p+=2; $array[$p]+=46; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=62; $p+=2; $array[$p]+=93; # End of preamble # Scoot back to before the beginning of the string while($array[$p]) {$p-=2;} # No, er, *at* the beginning of the string. $p+=2; # And scan over the sucker... while($array[$p]) { # Copy the contents of this cell to the left and right # (Which are both initially zero by virtue of being # originally skipped over) while($array[$p]) { $array[$p]-=1; $p-=1; $array[$p]+=1; $p+=2; $array[$p]+=1; $p-=1; } # Put 62 (ASCII '>') in the middle cell $array[$p]+=62; # Print out two of 'em print chr($array[$p]); print chr($array[$p]); # Put 43 (ASCII '+') in the middle cell $array[$p]=43; # Print out a '+' for every 1 in the right cell $p+=1; while($array[$p]) { $array[$p]-=1; $p-=1; print chr($array[$p]); $p+=1; } # Clear the middle cell $p-=1; $array[$p]=0; # Move the contents of the left cell to the middle cell $p-=1; while($array[$p]) { $array[$p]-=1; $p+=1; $array[$p]+=1; $p-=1; } # And move two over and call that the next middle cell. # Okay, so it *says* three, but it *was* at the left cell. $p+=3; } # So. Now we're at the end of the string, and we've printed out # the string-building preamble. The string is still intact in memory # (since the above algorithm built a copy as it went) so it # still contains the ASCII values of all the code *after* the preamble. # Go forth and multiply, er, print! # First go to before the beginning of the string $p-=2; while($array[$p]) { $p-=2; } # Um, *to* the beginning of the string $p+=2; # And scan right, printing everything out while($array[$p]) { print chr($array[$p]); $p+=2; }