記号プログラミングの第一歩は BrainF*ck
2010-12-01
記号プログラミングトラックへようこそ! はせがわです。
初回の今日は、記号プログラミングを行えるもっとも有名な言語である BrainF*ck を題材に、記号プログラミングの世界にダイブする準備をしましょう!
まずは BrainF*ck の Hello, world です。
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-. ------------.<++++++++.--------.+++.------.--------.>+.
簡単ですね。
さて、本当にこれが Hello, world として動くのか確かめたいので、次に BrainF*ck インタプリタを用意することにしましょう。
インタプリタは手軽に書ける言語ということで、JavaScriptで用意します。インタプリタのソースは以下の通り。
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"" )[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$= ($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$. $;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+ $.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+$.$_$$+$.$$$$+"(){"+$.__+"\\"+$.__$+$.$_$ +$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$.$$__+$._$+$.$$_$+$.$$$_+"=[];"+$.__+"\\"+$.__$+$.$_$+$.___+"\\" +$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$._$+$._+$.__+"\\"+$.__$+$.$$_+$.___+$._+$.__+"=[];"+$.__+"\\"+$.__$+$.$_$+ $.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$.___ +$._+$.__+"=[];"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$.___+$.$$__ +"="+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$ .___+"="+$.___+";"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$_$+$._$_+"\\" +$.__$+$.$$_+$._$$+"=\\\"\\\";"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$.__+"\\"+$ .__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"="+$.___+";"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$ +$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$_$+$.__$+$.__+"="+$.$$$$ +$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"("+$.$_$_+"){"+$.$_$_+"="+$. $_$_+".\\"+$.__$+$.$$_+$._$_+$.$$$_+"\\"+$.__$+$.$$_+$.___+(![]+"")[$._$_]+$.$_$_+$.$$__+$.$$$_+"(/[^<>\\\\+\\\\-\\\\.\\\\,\\\\[\\\\]]/\\" +$.__$+$.$__+$.$$$+",\\\"\\\");\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+(![]+"")[$._$_]+$.$$$_ +"("+$.__+"\\"+$.__$+$.$$_+$._$_+$._+$.$$$_+"){\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+$.$$__ +"="+$.$_$_+".\\"+$.__$+$.$$_+$._$_+$.$$$_+"\\"+$.__$+$.$$_+$.___+(![]+"")[$._$_]+$.$_$_+$.$$__+$.$$$_+ "(/(\\\\<\\\\>|\\\\>\\\\<|\\\\+-|-\\\\+)/\\"+$.__$+$.$__+$.$$$+",\\\"\\\");\\"+$.__$+$.$_$+$.__$+$.$$$$+"("+$.$$__+"=="+$ .$_$_+")"+$.$_$$+"\\"+$.__$+$.$$_+$._$_+$.$$$_+$.$_$_+"\\"+$.__$+$.$_$+$._$$+";"+$.$_$_+"="+$.$$__+"}\\"+$.__$+$.$$_+$.$$_ +$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+$.$_$$+"=/(\\\\<+|\\\\>+|(\\\\[-\\\\])?\\\\++|\\\\-+|\\\\[[\\\\<\\\\>\\\\+\\\\-]+\\\\]|[\\\\.\\\\,\\\\[\\\\]])/\\" +$.__$+$.$__+$.$$$+";"+$.$_$_+"="+$.$_$_+".\\"+$.__$+$.$$_+$._$_+$.$$$_+"\\"+$.__$+$.$$_+$.___+(![]+"")[$._$_]+$.$_$_+$. $$__+$.$$$_+"("+$.$_$$+","+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$. $$_+"("+$.$_$_+"){\\"+$.__$+$.$_$+$.__$+$.$$$$+"("+$.$_$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$. $__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+">"+$.__$+"&&"+$.$_$_+"."+$.$$__+"\\"+$.__$+$.$_$+$.___+$.$_$_+"\\"+$.__$+$.$$_+$. _$_+"\\"+$.__$+$.___+$.__$+$.__+"("+$.$_$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+ "\\"+$.__$+$.$_$+$.___+"-"+$.__$+")==\\\"]\\\"){\\"+$.__$+$.$_$+$.__$+$.$$$$+"("+$.$_$_+"==\\\"[-]\\\")\\"+$.__$+$.$$_+$. _$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\\""+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$. _$$+"\\"+$.__$+$.$$_+$.___+"]\\"+$.$__+$.___+"=\\"+$.$__+$.___+$.___+";\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$$_+(![]+"")[ $._$_]+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.__$+$.$$$$+"(("+$.$_$_+".\\"+$.__$+$.$_$+$.$_$+$ .$_$_+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"(/^\\\\[-(\\\\<+)\\\\+(\\\\>+)\\\\]$/)||"+$.$_$_+".\\"+$.__$+$.$_$+$.$_$+$.$_$_ +$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"(/^\\\\[(\\\\<+)\\\\+(\\\\>+)-\\\\]$/)||"+$.$_$_+".\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.__ +$.$$__+"\\"+$.__$+$.$_$+$.___+"(/^\\\\[-(\\\\>+)\\\\+(\\\\<+)\\\\]$/)||"+$.$_$_+".\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.__+$. $$__+"\\"+$.__$+$.$_$+$.___+"(/^\\\\[(\\\\>+)\\\\+(\\\\<+)-\\\\]$/))&&\\"+$.__$+$._$_+$._$_+$.$$$_+"\\"+$.__$+$.$__+$.$$$ +"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$.__$+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$. $_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"==\\"+$.__$+$._$_+$._$_+$.$$$_+"\\"+$.__$+$.$__+$.$$$+"\\"+ $.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$._$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$. $$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+")\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\" +$.__$+$.$_$+$.$$_+"\\\""+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"\\\"+(\\"+$.__$+$._$_+$._$_+ $.$$$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$.__$+"."+$.$$__+ "\\"+$.__$+$.$_$+$.___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.___+$.__$+$.__+"("+$.___+")==\\\"<\\\"?\\\"-\\\":\\\"+\\\" )+\\"+$.__$+$._$_+$._$_+$.$$$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___ +".$"+$.__$+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"+\\\"]\\" +$.$__+$.___+"+=\\"+$.$__+$.___+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"];\\\\\\"+$.__$ +$.$_$+$.$$_+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"]\\"+$.$__+$.___+"=\\"+$.$__+$.___ +$.___+";\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$$_+(![]+"")[$._$_]+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\"+$.$__+$.___+"\\" +$.__$+$.$_$+$.__$+$.$$$$+"(("+$.$_$_+".\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+ "(/^\\\\[-(\\\\<+)\\\\+(\\\\<+)\\\\+(\\\\>+)\\\\]$/)||"+$.$_$_+".\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.__+$.$$__+"\\"+$.__$+$.$_$ +$.___+"(/^\\\\[(\\\\<+)\\\\+(\\\\<+)\\\\+(\\\\>+)-\\\\]$/)||"+$.$_$_+".\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.__+$.$$__+"\\"+$. __$+$.$_$+$.___+"(/^\\\\[-(\\\\>+)\\\\+(\\\\>+)\\\\+(\\\\<+)\\\\]$/)||"+$.$_$_+".\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.__+$.$$__ +"\\"+$.__$+$.$_$+$.___+"(/^\\\\[(\\\\>+)\\\\+(\\\\>+)\\\\+(\\\\<+)-\\\\]$/))&&\\"+$.__$+$._$_+$._$_+$.$$$_+"\\"+$.__$+$. $__+$.$$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$.__$+"."+(![]+"")[$._$_]+$.$$$_+"\\" +$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"+\\"+$.__$+$._$_+$._$_+$.$$$_+"\\"+$.__$+$.$__+$. $$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$._$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$ +$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"==\\"+$.__$+$._$_+$._$_+$.$$$_+"\\"+$.__$+$.$__+$.$$$+"\\" +$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$._$$+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+ "\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"){\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___ +$.$$__+"=\\"+$.__$+$._$_+$._$_+$.$$$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$. $$_+$.___+".$"+$.__$+"."+$.$$__+"\\"+$.__$+$.$_$+$.___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.___+$.__$+$.__+"("+$. ___+")==\\\"<\\\"?\\\"-\\\":\\\"+\\\";\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_ +"\\\""+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"\\\"+"+$.$$__+"+\\"+$.__$+$._$_+$. _$_+$.$$$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$.__$+"."+(![] +"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"+\\\"]\\"+$.$__+$.___+"=\\" +$.$__+$.___+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"\\\"+"+$.$$__+"+(\\"+$.__$+$._$_+ $._$_+$.$$$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$.__$+"."+ (![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"+\\"+$.__$+$._$_+$._$_ +$.$$$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$_+$.___+".$"+$._$_+"."+(![]+ "")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+")+\\\"]\\"+$.$__+$.___+"=\\" +$.$__+$.___+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"];\\\\\\"+$.__$+$.$_$+$.$$_+$.$$_$ +$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"]\\"+$.$__+$.___+"=\\"+$.$__+$.___+$.___+";\\\\\\"+$. __$+$.$_$+$.$$_+"\\\"}\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+$.$_$_+". \\"+$.__$+$.$$_+$._$$+$._+$.$_$$+"\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.__$+$.$$_+$._$_+"("+$.___+","+$.$_$_+"."+(![]+"")[$. _$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"-"+$.__$+").\\"+$.__$+$.$$_+$._$_+ $.$$$_+"\\"+$.__$+$.$$_+$.___+(![]+"")[$._$_]+$.$_$_+$.$$__+$.$$$_+"("+$.$_$$+","+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$ +$.$__+$.$$$+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"\\"+$.__$+$.$$_+$._$$+"."+$.$$__+$.$_$_+(![]+ "")[$._$_]+(![]+"")[$._$_]+$.$$$_+$.$$$_+")+\\\"}\\\\\\"+$.__$+$.$_$+$.$$_+"\\\"}\\"+$.__$+$.$$_+$._$$ +"\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.__$+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"("+$.$_$_+"."+$.$$__+"\\"+$.__$+$.$_$+ $.___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.___+$.__$+$.__+"("+$.$_$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$. $$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"-"+$.__$+")){"+$.$$__+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\\">\\\":\\" +$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\\"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$. $$_+$.___+"+=\\\"+"+$.$_$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\" +$.__$+$.$_$+$.___+"+\\\";\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$__+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\\"<\\\":\\"+$. __$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\\"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_ +$.___+"-=\\\"+"+$.$_$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$. ___+"+\\\";\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$__+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\\"+\\\":\\"+$.__$+$.$$_+$._$_ +$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+$.$_$_+"."+$.$$__+"\\"+$.__$+$.$_$+$ .___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.___+$.__$+$.__+"("+$.___+")==\\\"[\\\"?\\\""+$.$$_$+$.$_$_+$.__+$.$_$_+ "[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"]\\"+$.$__+$.___+"=\\"+$.$__+$.___+"\\\"+("+$.$_$_+"."+(![]+"")[$._$_]+$. $$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"-"+$._$$+")+\\\";\\\\\\"+$.__$+$.$_$+$.$$_ +"\\\":\\\""+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"]\\"+$.$__+$.___+"+=\\"+$.$__+$.___ +"\\\"+"+$.$_$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+ "+\\\";\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$__+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\\"-\\\":\\"+$.__$+$.$$_+$._$_+$. $$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\\""+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\" +$.__$+$.$$_+$.___+"]\\"+$.$__+$.___+"-=\\"+$.$__+$.___+"\\\"+"+$.$_$_+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+ "\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+"+\\\";\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$__+$.$_$_+"\\"+$.__$+$. $$_+$._$$+$.$$$_+"\\\".\\\":\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\\""+ $._$+$._+$.__+"\\"+$.__$+$.$$_+$.___+$._+$.__+".\\"+$.__$+$.$$_+$.___+$._+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$_$+$.___+ "("+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"]);\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$__ +$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\\",\\\":\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+ $.$_$+$.$$_+"\\\""+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"]=\\"+$.__$+$.$_$+$.__$+"\\" +$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$.___+$._+$.__+".\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$. __$+$.$$$$+$.__+"();\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$__+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\\"[\\\":\\"+$.__$+$. $$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\\"\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.___ +"\\"+$.__$+$.$_$+$.__$+(![]+"")[$._$_]+$.$$$_+"("+$.$$_$+$.$_$_+$.__+$.$_$_+"[\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$. ___+"]){\\\\\\"+$.__$+$.$_$+$.$$_+"\\\";"+$.$$__+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\\"]\\\":\\"+$.__$+$.$$_+$._$_+$. $$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\\"}\\\\\\"+$.__$+$.$_$+$.$$_+"\\\"}});"+$.$_$_+"=\\\""+ $.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$.$$__+$._$+$.$$_$+$.$$$_+"\\"+$.$__+$.___+ "=\\"+$.$__+$.___+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"(\\"+ $.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$.___+$._+$.__+"){\\\\\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$. $$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+$.$$_$+$.$_$_+$.__+$.$_$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"[];\\\\\\" +$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+$._$+$._+$.__+"\\"+$.__$+$ .$$_+$.___+$._+$.__+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"[];\\\\\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$ .__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.___+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+$.___+ ";\\\\\\"+$.__$+$.$_$+$.$$_+$.$$$$+$._$+"\\"+$.__$+$.$$_+$._$_+"(\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\" +$.$__+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+$.___+";\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.__$+"\\" +$.$__+$.___+"<\\"+$.$__+$.___+$.$$_+$.$_$+$.$_$+$._$$+$.$$_+";\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.__$+"++)\\"+$.$__ +$.___+$.$$_$+$.$_$_+$.__+$.$_$_+".\\"+$.__$+$.$$_+$.___+$._+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$_$+$.___+"("+$.___+");\\\\\\" +$.__$+$.$_$+$.$$_+"\\\"+"+$.$_$_+"+\\\"\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$. $$_+"\\"+$.$__+$.___+$._$+$._+$.__+"\\"+$.__$+$.$$_+$.___+$._+$.__+";\\\\\\"+$.__$+$.$_$+$.$$_+"}\\\\\\"+$.__$+$.$_$+$.$$_ +"\\\";"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$_$+$._$_+"\\"+$.__$+$. $$_+$._$$+"="+$.$_$_+";"+$.__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"{"+$.$$$_+"\\"+$.__$+$.$$_+$.$$_+$. $_$_+(![]+"")[$._$_]+"("+$.$_$_+")}"+$.$$__+$.$_$_+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"("+$.$$_$+"){"+$.$_$_+(![]+"")[$. _$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"("+$.$$_$+")}"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$. $$_+$._$$+".\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$.___+$._+$.__+"=[]};"+$.__+"\\"+$.__$+$.$_$+$. ___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$._$$+$.__+$.$$_$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$ .$_$+$.$$_+"="+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"("+$. $_$$+"){"+$.$$$$+$._$+"\\"+$.__$+$.$$_+$._$_+"(\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+$.$_$_ +"="+$.___+";"+$.$_$_+"<"+$.$_$$+"."+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$ +$.$_$+$.___+";"+$.$_$_+"++)"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$_$ +$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$.___+$._+$.__+".\\"+$.__$+$.$$_+$.___+$._+"\\"+$.__$+$.$$_+$._$$+"\\"+$. __$+$.$_$+$.___+"("+$.$_$$+"."+$.$$__+"\\"+$.__$+$.$_$+$.___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.___+$._$$+$. _$+$.$$_$+$.$$$_+"\\"+$.__$+$.___+$.__$+$.__+"("+$.$_$_+"))};"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$. __$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$._$$+$.__+$.$$_$+$._$+$._+$.__+"="+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+ $.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"(){"+$.$$$$+$._$+"\\"+$.__$+$.$$_+$._$_+"(\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\" +$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+$.$_$$+"=\\\"\\\","+$.$_$_+"="+$.___+";"+$.$_$_+"<"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+ $.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$._$+$._+$.__+"\\"+$.__$+$.$$_+$.___+$._+$.__+"."+(![]+"")[$._$_]+$.$$$_ +"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.__+"\\"+$.__$+$.$_$+$.___+";"+$.$_$_+"++)"+$.$_$$+"+=\\"+$.__$+$._$_+$. _$$+$.__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"."+$.$$$$+"\\"+$.__$ +$.$$_+$._$_+$._$+"\\"+$.__$+$.$_$+$.$_$+"\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.$_$+$.___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\" +$.__$+$.___+$._$$+$._$+$.$$_$+$.$$$_+"("+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$ ._$+$._+$.__+"\\"+$.__$+$.$$_+$.___+$._+$.__+"["+$.$_$_+"]);\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$. _$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+$.$_$$+"};"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$. $$_+$._$$+".\\"+$.__$+$.$$_+$._$_+$._+"\\"+$.__$+$.$_$+$.$$_+"="+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$ +$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"(){\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+$.$_$_+ "=(\\"+$.__$+$.$_$+$.$$_+$.$$$_+"\\"+$.__$+$.$$_+$.$$$+"\\"+$.$__+$.___+"\\"+$.__$+$.___+$.$__+$.$_$_+$.__+$.$$$_+").\\"+ $.__$+$.$__+$.$$$+$.$$$_+$.__+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"();"+$.__+ "\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$._$+$._+$.__+"\\"+$.__$+$.$$_+$.___+$._+$.__+"=" +$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$.$$__+$._$+$.$$_$+$.$$$_+"("+$.__+"\\"+$. __$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$ .$$_+$.___+$._+$.__+");"+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+"."+$.__+"\\"+$.__$+$. $_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"=((\\"+$.__$+$.$_$+$.$$_+$.$$$_+"\\"+$.__$+$.$$_+$. $$$+"\\"+$.$__+$.___+"\\"+$.__$+$.___+$.$__+$.$_$_+$.__+$.$$$_+").\\"+$.__$+$.$__+$.$$$+$.$$$_+$.__+"\\"+$.__$+$._$_+$.$__ +"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"()-"+$.$_$_+")/"+$.__$+$.$$$_+$._$$+"}}\\"+$.__$+$.$$_+$.$$_+$.$_$_ +"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"=\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$$_+$._$_+$._$+"\\"+ $.__$+$.$_$+$.$_$+"\\"+$.__$+$.$$_+$.___+$.__+"(\\\"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.$_$+$.$$_+$.__+$.$$$_+"\\"+$.__$+$ .$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.___+$._$_+"\\"+$.__$+$.$$_+$._$_+$.$_$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+ $.$_$+$.$$_+"\\"+$.__$+$.___+$.$$_+"*"+$.$$__+"\\"+$.__$+$.$_$+$._$$+"\\"+$.$__+$.___+$.$$__+$._$+$.$$_$+$.$$$_+"\\\",\\\"\\\");\\" +$.__$+$.$_$+$.__$+$.$$$$+"(\\"+$.__$+$.$$_+$._$$+"){"+$.$_$$+"=\\"+$.__$+$.$_$+$.$$_+$.$$$_+"\\"+$.__$+$.$$_+$.$$$+"\\"+ $.$__+$.___+$.$_$$+$.$$$$+";"+$.$_$$+".\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$_$+$.__$+$.__+"(\\"+$. __$+$.$$_+$._$$+");"+$.$_$$+".\\"+$.__$+$.$$_+$._$_+$._+"\\"+$.__$+$.$_$+$.$$_+"();"+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$ .__$+$.$$_+$._$_+$.__+"("+$.$_$$+".\\"+$.__$+$.$$_+$._$$+$.__+$.$$_$+$._$+$._+$.__+"())}\\"+$.__$+$._$_+"\"")())();
もちろんインタープリタも記号だけで書かれています。
これをJavaScriptとして実行すると prompt が表示されますので、さきほどの BrainF*ck の Hello, world プログラムを入力します。
すると、alert で Hello, world がきちんと表示され、無事 BrainF*ck の動きを確かめることができました。
…というだけではさっぱり意味がわからないので、少しだけ解説すると、JavaScript による BrainF*ck インタプリタは、id:kazuho さんが以前書かれていたものを拝借しました。
この BrainF*ck インタプリタを Microsoft Ajax Minifier でコードを小さくし、jjencode で記号化したものが上に示した記号だけの BrainF*ck インタプリタのコードとなります。
というわけで、初日は記号プログラミング入門ということで、駆け足で BrainF*ck の動きを確かめてみました。
なぜこのような JavaScript が動くのかについては、回を追って説明したいと思いますので明日以降もお楽しみに!