プチコンまとめArchive

Brainfuck Terminal OSP

パンくずリスト

このページの最終更新 : 2022/09/20 (火) 12:48:54

2017年12月2日投稿 / 投稿者 : Ryou Tanpo / タグ : 投稿プログラム ツール Brainfuck

概要

Brainfuck Terminal とは

Brainfuck プログラムを、TXT ファイル、またはコマンドラインから実行できるターミナルのようなものです。

そもそも Brainfuck とは

Brainfuck は C や SmileBASIC のようなひとつのプログラミング言語ですが、命令として8文字の記号(+ - < > [ ] , .)しか使わない特徴があります。
可読性は低く、文字列を表示するだけで何十文字ものプログラムになりますが、世の中には Brainfuck で書かれた、Brainfuck を実行するインタプリタもあるもので、与えられたたった8文字の命令で、どこまでのことが実現できるか試している人もいる...のかな。

基本的な考え方としては、いくつかの要素数 *1 の配列と、配列のある要素を指すポインタ *2 があり、ポインタを増やしたり、減らしたりすることで配列の要素を選択して、要素を操作する、ということです。また、データを画面に表示するときもポインタで選択された要素が表示されます。

例えば、SmileBASIC に A[256] という配列変数と P という変数があったとして、 P をポインタとします。すると、P が 0 であるときは、「画面に文字を表示してくれー」といったときに A[0] が表示されることになります。つまり、同様に P が 3 だったときは、 A[3] が表示されます。
これは、画面に文字を表示する場合に限らず、実際に要素の値を操作するとき、また SmileBASIC でいう WHILE に相当する命令などでも同じです。

SmileBASIC と違って、実際に要素の値を増やすとか、画面を表示する際に「何を」操作するとか、「何を」表示するとかを指定しない代わりに、ポインタを動かして要素を選んで、「じゃあ表示して」といわれたときは、そのポインタが指している要素を表示すると言った感じです。

まあ、実際にリファレンスやサンプルプログラムを見ればわかると思います。

使い方

実行するとプロンプトが出てくるので、専用のコマンドか、直接 Brainfuck プログラムを入力します。

  • "," による入力待ちでは、L ボタンを押しながら Enter キーを押すと、文字コード 0 を入力したことになります。つまり、入力した文字コードをループの継続条件にしている場合 *3 は、この操作を行うことでループを終了させることができます。
  • X ボタンでプログラムを停止します。(ver1.0.1 のみ)
  • Brainfuck プログラムでは、Brainfuck の各命令 以外は無視されます。

実行例

  1. BRAINFUCK> ,[.,]
  2. ABC
  3. BRAINFUCK> L ECHO
  4. L:ファイル’ECHO’がみつかりません
  5. BRAINFUCK> S ECHO ,[.,]
  6. BRAINFUCK> L ECHO
  7. ABC
  8. BRAINFUCK>

プロンプトでのコマンド

  • 実行するとプロンプトが出現して入力待ちになります。
  • Brainfuck プログラムを直接入力できるほか、ファイルからの実行のために以下のコマンドが用意されています。
    • コマンドと各引数はスペースで区切ってください。
F
FILES と同様のファイル一覧を表示します。
L ファイル名
指定されたファイルから Brainfuck プログラムを実行します。
S ファイル名 プログラム
指定されたファイルに Brainfuck プログラムを保存します。プログラムにスペースを含むことはできません。

Brainfuck リファレンス

>
ポインタを 1 進めます。
INC P
<
ポインタを 1 戻します。
DEC P
+
ポインタの指す要素を 1 増やします。
INC A[P]
-
ポインタの指す要素を 1 減らします。
DEC A[P]
[
ポインタの指す要素が 0 であるとき、対応する ] にジャンプします。
WHILE A[P]
[
ポインタの指す要素が 1 であるとき、対応する [ にジャンプします。
WEND
,
ポインタの指す要素に 1 文字入力します。値は入力された文字コードとなります。
REPEAT K$=INKEY$():UNTIL K$!="":A[P]=ASC(K$)
.
ポインタの指す要素を文字コードと解釈して表示します。
PRINT CHR$(A[P]);

サンプル

echo

  1. ,[.,]
  • 入力された文字を表示します。
  • L ボタン + Enter キーで終了できます。

プログラムリスト

ver1.0.0

IMG_3869.PNG
修正
  • @2 の後の INC M[P]DEC M[P]

ver1.0.1

IMG_3876.JPG

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)


*1 この Brainfuck インタプリタでは 256 個
*2 配列の添字と考えた方がいい
*3 例えば ,[.,]