BrainFuck ダイナマイツ

Sun Java ダウンロードページ

資料的 ASCII コード表

  0001 0203 0405 0607 0809 0A0B 0C0D 0E0F
00 BS NL
10
20   ! " # $ % & ' ( ) * + , - . /
30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
40 @ A B C D E F G H I J K L M N O
50 P Q R S T U V W X Y Z [ \ ] ^ _
60 ` a b c d e f g h i j k l m n o
70 p q r s t u v w x y z { | } ~

親切な説明

BrainFuck とは以下の 8 個の命令だけで全ての処理を行う難読系プログラミング言語です (名称がアレですがこれでも立派なチューリング完全Google I'm Feeling Lucky™なんです)。 C/C++ のポインタなどのメモリ操作イメージを初心者に叩き込ませるのには最適かと思われます。

>ポインタをインクリメント
<ポインタをデクリメント
+ポインタが示すメモリ位置のデータをインクリメント
-ポインタが示すメモリ位置のデータをデクリメント
.ポインタが示すメモリ位置のデータを出力
,ポインタが示すメモリ位置のデータに入力
[ポインタが示すメモリ位置のデータが 00 なら対応する ] へ移動
]ポインタが示すメモリ位置のデータが 00 でないなら対応する [ へ移動

例えば「Hello, World!」と表示するためのプログラムは以下のように記述します。

Hello, World
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+
++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

アプレットの使い方

各部位の使い方は以下の通りです。

コード 実行する BrainFuck コードを入力します。
実行 すべての命令を実行します。
ステップ ボタンを押すたびに 1 命令ずつ実行してゆきます。
中断 実行中の命令をブレイクしてステップ実行に移行します。
中止 実行またはステップ中の処理をとりやめます。
文字コード 出力命令 (.) の文字コードを選択します。
Echoback 入力時のエコーバックの有無を選択します。

この実装では BrainFuck 仕様に対して以下のように定義しています。

コード中の空白文字 (空白、改行、タブ等) は無視します。
制御コードはバックスペース BS (0x08) と改行 NL (0x0A) をサポートしています。
文字入力命令 (,) を実行するには、緑色のカーソルが点滅している黒いコンソールをクリックしてキーボードを打ってください。

ローカルインストール

このサイトは個人運営で行っているため不定期に、または長期間アクセスできなくなることがあります。このサーバにつなげたりブラウザを起動しなくても使用できるようにインストールできるようにしましたのでご利用ください。なお、インストールには Java2 SE 1.3 以降が必要です。

Java2 SE 1.4 以前をご利用の方は [コントロールパネル]-[Java] から起動およびアンインストールが可能です (Windows)。

Java2 SE 5.0 以降をご利用の場合は同様の Java コントロールパネルのインターネット一時ファイルか、メニューやデスクトップに作成したショートカットからの起動が可能です。アンインストールには Java コントロールパネルやプログラムの追加と削除から行えます。

動作環境

対応 Java 実行環境は JDK 1.1 以降です。

正しく動いてるっぽい環境
  • Microsoft Internet Explorer 6.0 (Windows 2000, Windows XP)
  • Sun JDK 1.1.8 Applet Viewer
  • IBM JDK 1.3 Applet Viewer
  • Sun JDK 1.6 (Windows XP)
  • Sun JDK 1.6 (Linux)
  • Sun JDK 1.6 (Solaris 10)
実行中の中断・中止が不能な環境
  • Netscape Communicator 4.79 (RedHat Linux 7.3 KDE)

ソースのダウンロードと関連リンクなど

この BrainFuck のソースは以下からダウンロードできます。

その他、関連リンク。

改変履歴

  • 2008年02月02日: Java Web Start に対応。
  • 2008年02月02日: 実行位置のハイライトをソースの上に表示するよう修正。
  • 2008年02月02日: メタキー押下をキー入力とみなさないよう修正。
  • 2004年11月24日: 文字エンコーディング指定が出来るように拡張 (ちゃんとできてるか不安)。
  • 2004年11月15日: 入力モードを分かりやすいように文字表示。入力のエコーバックをデフォルトなしに。
  • 2002年11月03日: GUI 少々変更。
  • 2002年11月03日: リソースを外出しして国際化対応 (ja, en のみ)。
  • 2002年11月03日: コード末尾に空白文字が入っていると動かないというアホらしいバグを修正。
  • 2002年11月03日: 入力待ちになったときにコンソールへフォーカスを移動するように変更。
  • 2002年11月03日: (早朝) 目を覚ます。20 時間以上寝てたことに驚愕する。入力文字をエコーバックするように変更した。
  • 2002年11月02日: (早朝) 出来たので寝る。
  • 2002年11月01日: (深夜) 会社から帰ってきて突然作り始める。