解説


文字列 文字ずつ読み込み、その都度文字列 を出力していく方針が書きやすいと思います。
以下の想定解のようなwhile文で挟むことで、入力された文字を全て読み切るまで(改行文字を読み込むまで)、プログラムが動き続けます。

想定解(Brainfuck)
,----------
[++++++++++	//Sを1文字ずつ読み込むwhile文 改行文字「文字コード10」が来たら終了
	[->+>+<<] //1つ右隣と2つ右隣にポインタの値をコピー
	>------------------------------------------------ //'0'の文字コードである「48」を引く
	[->.<] //ポインタの値が0になるまで文字を出力
	>[-]<< //ポインタの値を初期化
,----------]

想定解のコードで使ったテクニックを紹介します。

  • [-] :指しているポインタの値を0にする。(ポインタの値が0になるまで値を減らすため)
  • [->+<] :指しているポインタの値を右隣のポインタへ移行させる。(ポインタの値が0になるまで値を移し続けるため)

上記のコードでは、入力した値を二つのポインタにコピーして、
「何回出力したか数えるカウンタ用」「出力する文字コードを保存する用」に分けています。
カウンタ用のポインタは を引くことで、文字を数値として扱うことができるようになります。

追加問題


文字列 が与えられるので、文字列 を復元するコードを Brainfuck で書いてください。