自分のポインタの知識を確かめる為に

 brainf*ck(これを読む知り合いの女の子もいるので、正式名称はとてもじゃないけど書けましぇん)で遊んでみた。ASCIIテーブルとにらめっこをしたのは初めてだ。四則演算や条件分岐に関する命令がないので「はて…」と考えたが、本気で実装しようとすると相当辛いことがなんとなく想像できた。単純に言えば、'['']'ループ(正確にはgotoの様なものだが)を使って、指定アドレスの値がNULLかどうかを確認するというものだろう。ってか、他に条件分岐のできそうな命令がないし。
 ASCIIテーブルは(拡張も含めて)0〜255までなので、やろうと思えば頑張って'+'を手で書くこともできるが、短気な俺は、ついついこういうのでは素因数分解などを使って楽できないかを考えてしまう。例えば"A"のASCIIコードは65なので、65 = 64 + 1 = 2^6 + 1と考えられる。じゃあ2^6をどうやって計算するべ、と色々試してみたら、どうやら演算子の数+1バイトを確保する必要があるみたいだ。実際のコードに落としてみると、2^6 = 2 * 2 * 2 * 2 * 2 * 2なので、

++[>++<-]>[>++<-]>[>++<-]>[>++<-]>[>++<-]>+.

 こんな感じになる。現実的には

++++[>++++<-]>[>++++<-]>+.

 とか

++++++++[>++++++++<-]>+.

 あたりが可読性(ってか、brainfu*kに可読性なんてあったか?)の問題からもベターなラインじゃないかと思う。
 で、当初の目的だったポインタ理解の確認…、全然ムリ。