単語記事: Brainfuck

編集

Brainfuckとは、難解であるとされるプログラミング言語の一つである。
名称が良いものではないため、通常はBrainf*ckと書く。

概要

BrainfuckUrban Müllerが開発したプログラミング言語で、コンパイラが極限に小さくなるように考案された言で、実用的な言ではない。実際のコンパイラは1KBもない。

実行可な命令は8つしか存在しないが、このプログラミング言語は立チューリング完全であり、理論的にはC言語で記述可な命令と同様の表現を持つことが分かっている。

実行可能な命令

Brainfuckには8つの命令が存在する。これらを組み合わせることで普通プログラムと同様の事が実行することができる。 

プログラム例

プログラムの基本はやっぱりHello worldを出するプログラム


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

 

プログラム説明

最初のポインタの位置で値を9回インクリメントする。最初のループで最初のポインタに入っている値をループカウンタとし、2番ポインタの値を8×9=72、3番ポインタの値を11×9=99、4番ポインタの値を5×9=45にする。

2番ポインタに入っている値は72で、これを文字コードで出すると"H"になる。
ポインタインクリメントし、3番ポインタの値を2回インクリメントして101にして出すると、"e"になる。
それをさらに7回インクリメントすると"l"になり、2回出する。さらに3回インクリメントして"o"にする。
ポインタインクリメントし、4番ポインタの値を1回デクリメントして44にして出すると","になる。
それをさらに12回デクリメントすると" (半角スペース)"になる。

以降、ポインタの移動とインクリメント・デクリメントを繰り返して出すると、最終的には「Hello, world!」と出(表示)される。
文字コード表に関しては文字コードググれば見つかるかもしれない。

 

関連動画

 

関連項目


【スポンサーリンク】

携帯版URL:
http://dic.nicomoba.jp/k/a/brainfuck
ページ番号: 391769 リビジョン番号: 2054188
読み:ブレインファック
初版作成日: 08/07/24 22:29 ◆ 最終更新日: 14/07/15 03:19
編集内容についての説明/コメント: 関連項目追加・不要な空白の削除
記事編集 / 編集履歴を閲覧
このエントリーをはてなブックマークに追加

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

"Hello, w...
Hello, wo...

Brainfuckについて語るスレ

44 : ななしのよっしん :2015/09/20(日) 16:53:36 ID: ODeX0e9dEL
--[>--->->->----->++>-<<<<<<-------]>--.>---------.>--..+++.>++++++.>----.>+++++++++.<<<.+++.------.<-.>>>+.
(108 bytes)

デクリメントのループを使い、145回繰り返す

参考:
http://copy.sh/brainfuck/
https://www.reddit.com/r/tinycode/comments/1oqgwm/shortest_hello_world_brainfuck_code/
45 : ななしのよっしん :2015/11/28(土) 16:04:44 ID: 3tx/L2jQxw
++++[>++++<-]>[>++++++++>+++++++>++>+++++++>++++++>++++[<]>-]>
[>]<+.<<----.>+.---.[<]>--.>>>-.<<-.>>.<<.+++.---.>.>----.>+++.<<.<+<-----<++[>>.
<.>-.-.++<<-]>>>.<+++.++.---.+++.>.>+++++++.<.>----.>.<++.>.---.[<]>+++++.


++++[>++++<-]>[>++++>+++++>++>++++++++>++++++>++++++>+++++
(省略しています。全て読むにはこのリンクをクリック!)
46 : ななしのよっしん :2015/11/29(日) 00:10:36 ID: 3tx/L2jQxw
>>37
++++[>+++++<-]>[>+++++>++++++<<-]>+++.------.>.----.+.
47 : ななしのよっしん :2015/12/08(火) 00:23:24 ID: aJTQ4U8fPH
"hello,world" やってみた
c:+ e:> g:[ b:.
d:- f:< a:]

タイトル:"Hello, world!"
Twitterで紹介する


48 : ななしのよっしん :2015/12/21(月) 18:27:55 ID: aJTQ4U8fPH
A-Zまで表示(大文字
+++++[>+++++<-]>+>++++++++[>++++++++<-]<[>>+.<<-]

a-zまで表示(小文字
+++++[>+++++<-]>+>+++++++++[>+++++++++++<-]>---<<[>>+.<<-]
49 : ななしのよっしん :2015/12/21(月) 18:44:33 ID: aJTQ4U8fPH
A-Za-z(大文字→小文字)を順に表示
+++++[>+++++<-]>+[>+>+<<-]>>[<<+>>-]++++++++[>++++++++<-]<<[>>>+.<<<-]>>>++++++<<[>>+.<<-]
A-Za-z(大文字改行)小文字
+++++[>+++++<-]>+[>+>+<<-]>>[<<+>>-] カウンタセット
++++++++[>++++++++<-]<<[>>>+.<<<-] 大文字表示
>>>>+++++++++++++.---. 改行
<++++++<<[>>+.<<-] 小文字表示
50 : ななしのよっしん :2015/12/23(水) 17:13:10 ID: aJTQ4U8fPH
ある文字XのN文字後の文字Yを出
>++++++++[<++++++>-],<[>-<-] //Nの入
>>, //Xの入
<[>+<-]>. //Yの計算と出
51 : ななしのよっしん :2017/02/16(木) 19:31:16 ID: L3Y55rg74C
Brainfxxkは文字以外にも出できるのですか?
すみません、あまり詳しくないのでよくわからないのですが、理論的にC言語と同等というのがいまいちピンとこないです……
52 : ななしのよっしん :2017/02/17(金) 20:57:15 ID: ooVJor2rlT
>>51
チューリング完全っていうのは数学的な概念で、「限のメモリがあれば有限の時間で答えが出る」ような問題であれば何でも(限のメモリと有限の時間で)解けるような計算機をしてチューリング完全であると言う。
もう少し噛み砕いて言うと、人間がコンピュータに解かせたいと思うような問題には、ひたすら頑れば解ける問題と、頑っても駄な問題がある。
たとえば、1000の階乗を計算するのはコンピュータにとってはそんなに難しいことじゃない(頑れば解ける問題の例)。頑っても駄な問題の例としては、わかりやすいのだとパラドックスの類がある。
プログラミングを頑れば論理的に推論するプログラムは作れるんだけど、そこにクレタ人のパラドックスとか床屋パラドックスとかを突っ込むと、答えは出ない(あるいは、ちょっと賢くプログラムを作っておけば「この命題矛盾してる」って言ってくれるのかもしれない)。

で、計算した結果を文字として出するか画像として出するかなんていうのは、計算機の本質的な部分とは何も関係ない話で、そこをして
(省略しています。全て読むにはこのリンクをクリック!)
53 : ななしのよっしん :2017/02/18(土) 11:53:39 ID: L3Y55rg74C
>>52
丁寧なご説明ありがとうございます。なんとなくわかったような気がします。ちょっと自分でもいろいろ触ってみながら勉強してみます。
ニコニコニューストピックス
電ファミwiki
  JASRAC許諾番号: 9013388001Y45123
  NexTone許諾番号: ID000001829