BF!”コードで、複数の値を作るために、ループ中に複数のセルで加算していく処理がありましたが、それぞれが大きい値の場合コードが長くなってしまいます。そこで、ループ制御変数と各操作セルの間にゼロの堀を作って置いて、共通の値を足すようにするコードが考えられます。A~Fでの+5,+7,+11,+12,+17,+18を行う代わりに、一旦-4,-2,+2,+3,+8,+9で非ゼロの値をセットしておいて、一括で+9させる、というコードです。[+++++++++<]<X]実例2:i番目の文字さて、2つ目の例として次の問題を挙げてみます。A問題です先ほどは「特定の値」を走査するコードがありましたが、今度は「指定の文字数」であり、性質が異なっています。前処理まずは、入力を処理する所までを実装します。[->+<],----------]これは、主に次の3つの処理から構成されています。,----------]と、入力コードを-10するようにしています。文字列の保存は1セルおきに行うため、移動は2セルずつで行います。場合、この前処理が終わった段階で、各セルの状況は次の図のようになります。スライド型ループ3:指定距離移動では、i文字目というのはどのように考えれば良いでしょうか。値に応じて、出力すべきコードの保存されたセルをオレンジで色付けしたものです。-1)$の距離のセル移動と考えることができます。そのため、制御変数を使ったループにスライド型の性質を盛り込むことで対応することができます。コードとしては次のようになります。>>]のように、2セル単位でずれていくスライド型のループになっています。中にある-[->>+<<]という、制御変数をデクリメントしつつ2セル隣に移すという処理によって、ずれた先でも制御変数を見続けることができるようになっています。図示すると次のようになります。Brainf**kというのは、あくまで「その場」のセルを使って、条件判断も含め処理を行う必要がありますから、セルの位置がずれていく処理では、常に使う値はこのように運ぶことになるのです。わりに今回までで、主だったループ処理を紹介しました。if文相当の条件分岐の話題に移りたいと思います。今回でいよいよ最後になりました。)月別アーカイブはてなブログをはじめよう!ange1さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。