4: 2009-12-20 (日) 08:30:58 HOSINO[6] [7] | 5: 2009-12-20 (日) 13:20:59 HOSINO[6] [8] | ||
---|---|---|---|
Line 235: | Line 235: | ||
+[>,.<] | +[>,.<] | ||
これさえあれば、一時的にコンソールにメモをすることが出来ます。~ | これさえあれば、一時的にコンソールにメモをすることが出来ます。~ | ||
- | |||
***charsプログラムを作る! [#r0398d88] | ***charsプログラムを作る! [#r0398d88] | ||
同じくabcdwでおなじみのcharsプログラムです。~ | 同じくabcdwでおなじみのcharsプログラムです。~ | ||
Line 246: | Line 245: | ||
[>.+<-] | [>.+<-] | ||
色々と最適化の余地があるので、考えてみてください。~ | 色々と最適化の余地があるので、考えてみてください。~ | ||
+ | ***1~10の合計を数える! [#x095ab75] | ||
+ | K-tanさんがGUIGUI01/memoシリーズで作ったプログラムの一つである、1~10の合計を数えるプログラムをBrainf*ckで作っていきたいと思います。~ | ||
+ | ++++++++++ +++++++++ ++++++++ +++++++ ++++++ | ||
+ | +++++ ++++ +++ ++ + | ||
+ | . | ||
+ | これは誰でも思いつくと思います。~ | ||
+ | これを実行すると、7と表示されます。7の文字コードは55なので、1~10の合計は55であることが分かります。~ | ||
+ | しかし、この方法だと55回+を打ち込まないとこのプログラムは作れないので、実行しなくても何回+を打ち込んだか数えればいい話です。~ | ||
+ | それはBrainf*ck的には勿論のこと、一般常識に照らし合わせてみても全然カッコ良くないので、ループを使って数えさせてみます。~ | ||
+ | ++++++++++ | ||
+ | [[>+>+<<-]>-[<+>-]<] | ||
+ | >>. | ||
+ | ちょっと複雑なループですが、要は1~10の合計を数えさせているだけなので、じっくりと読んでみてください。~ | ||
+ | さきほどのプログラムに比べればだいぶ良くなりましたが、答えは55なのに7と表示されるのがあまりカッコよくありません。~ | ||
+ | しかし、Brainf*ckで55と表示させるのはかなり難しいので、1~10の合計の数だけ1を表示して、1行ずらして10ごとに0~9の数字を表示させてみます。~ | ||
+ | ただ、文字コードを全て暗記している人にとっては、わざわざ1を数えるよりも7と表示されたほうがいいかもしれないので、7と表示する部分も残しておきました。~ | ||
+ | ++++++++++ | ||
+ | [[>+>+<<-]>-[<+>-]<] | ||
+ | >>. | ||
+ | >++++++++++.++++++++++++++++++++++.------------------------- | ||
+ | [>+>+++++++<<-] | ||
+ | < | ||
+ | [>>?>.<<<-] | ||
+ | >++++++++++. | ||
+ | >>>>+++++ | ||
+ | [>++++++++++>++++++<<-] | ||
+ | >-- | ||
+ | >++ | ||
+ | >++++++++++ | ||
+ | [><<<.+>>>+++++++++[><<<.>>><-]<-] | ||
+ | かなり汚いプログラムですいません。~ | ||
+ | 書いているときは全く問題なかったのですが、今改めて見ると書いた自分でも「なんじゃこりゃ?」状態です。~ | ||
+ | しかし、それがBrainf*ckの醍醐味だと思うので気にしないことにします。~ | ||
+ | なお、プログラム中の?を.に変えれば、一部のOSでは1~10の合計と同じ回数音が鳴ります。~ | ||
+ | うるさくしても問題ない環境で試してみてください。~ | ||
+ | 最後に、これまでの集大成として、1~10の合計を文字コードとみなして表示する前にASCIIcodeと表示させたいと思います。~ | ||
+ | これでいきなり7と表示されても戸惑う事が少なくなるはずです。~ | ||
+ | ++++++++++ | ||
+ | [>++++++>++++++++>++++++++++>+++++++++++<<<<-] | ||
+ | >+++++.>+++.<++.++++++..>>-.>+.<+.+.>> | ||
+ | ++++++++++ | ||
+ | [[>+>+<<-]>-[<+>-]<] | ||
+ | >>. | ||
+ | >++++++++++.++++++++++++++++++++++.------------------------- | ||
+ | [>+>+++++++<<-] | ||
+ | < | ||
+ | [>>?>.<<<-] | ||
+ | >++++++++++. | ||
+ | >>>>+++++ | ||
+ | [>++++++++++>++++++<<-] | ||
+ | >-- | ||
+ | >++ | ||
+ | >++++++++++ | ||
+ | [><<<.+>>>+++++++++[><<<.>>><-]<-] | ||
+ | ?を.に変えると音が鳴るのは今回も変わりません。~ | ||
+ | このレベルのプログラムが問題なく読めて、作れるようであれば、十分%%変人%%だと思います。~ |
(This host) = http://osask.net