三流プログラマの戯言

プログラミング初心者が気になったことを書き綴るだけ。主にc#

brainfuck 入門:ループ文と定数生成と文字出力

今回の主軸

今回は、文字出力の行い方を解説します。 プログラミング的には後でもいいんですけど、AtCoderをやるうえでは、かなり重要となるので、初めに説明しておきます。 また文字出力に必要となるループ文と定数生成の説明をしたいと思います。

目次

ループ (繰り返し)文

いきなりループかと思われるかもしれませんが、brainfuck ではこれが最も基本的な構文となります。
掛け算や割り算、果ては加算減算ですら、ループ文が使用されます。

[- code ]

現在の値の回数だけ code を実行します。-code の前でも後でも問題ないです。場合によって使い分けでください。 ただし、終了時に、繰り返し回数を格納していたメモリは 0 となります。
また、 code の開始時と終了時にポインタの位置が同じである必要があります。

定数の生成

brainfuckでは定数の生成を行う場合は、値を定数回インクリメントします。以下は10を生成するコードです

++++++++++

ただし、この方法で100といった大きい数字を生成しようとした場合は多くの+を書かないといけないことになります。
そこでそれを回避するために、ループ文を使用して生成します。
以下は100を生成するコードです。

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

ただし、この方法で100といった大きい数字を生成しようとした場合は多くの+を書かないといけないことになります。
そこでそれを回避するために、ループ文を使用して生成します。
以下は100を生成するコードです。

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

定数の変更

定数の生成を行うときに、すでにある定数を変更することによって新たな定数とすることができます。以下は、 まず、41を生成して、その後80にして、そのあと57にするというプログラムです。

+++++[->++++++++<]>+  41を生成
<+++++[->++++++++<]>- 80に変更 (40を足して1を引く)
<+++++[->------<]>--- 57に変更 (20を引いて3を引く)

文字出力

一文字の出力

brainfuckでは文字は文字コードを生成して出力を行います。 例えば H という文字を出力しようとした場合、H文字コード72 (=8x9) なので、

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

とすることで H を出力することができます。

複数文字の出力

複数の文字を出力する場合は毎回文字コードを生成するのは面倒なので、前回の値に増減させて表示を行うことがあります。 以下は Helloを出力するプログラムです。 Hello文字コードは順に、72,101,108,108, 111です。

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

ちなみに、言語仕様編 に記載されている Hello World.は少し違った方法で実現しています。

問題例

次回

次回は今度こそ基本構文の話しようと思います。

記事一覧

brainfuck 入門:リンクまとめ - 三流プログラマの戯言