BrainFuck Part.3 <[+-.,]>

■ このスレッドは過去ログ倉庫に格納されています
2009/01/08(木) 12:09:18
BrainFuckとは
 難解プログラミング言語の一つ。
 オシシメサイトはhttp://www.google.co.jp/

以下俺的見解
 ・スレッドタイトルに全命令が入る素敵な言語。
 ・1レス内に全命令のリファレンスが入る素敵な言語。
  > ポインタをインクリメント
  < ポインタをデクリメント
  + ポインタが示すメモリ位置のデータをインクリメント
  - ポインタが示すメモリ位置のデータをデクリメント
  . ポインタが示すメモリ位置のデータを出力
  , ポインタが示すメモリ位置のデータに入力
  [ ポインタが示すメモリ位置のデータがヌルなら対応する]までジャンプ
  ] ポインタが示すメモリ位置のデータがヌルじゃないなら対応する[までジャンプ

前スレ: BrainFuck Part.2 <[+-.,]>
http://pc11.2ch.net/test/read.cgi/tech/1177988460/

過去スレ: BrainFuck <[+-.,]>
http://pc11.2ch.net/test/read.cgi/tech/1036013915/
2010/01/16(土) 17:09:01
>>249
直感的には、NP完全
2010/01/16(土) 20:19:33
>>249
計算不可能な問題だと思う
2010/01/17(日) 12:19:05
>>252
実質不可能って意味ではそうかもしれんが。
現実的でない時間をかけてもいいのなら、短いものから順にブルートフォースするといつかはたどり着くわけだから計算は可能。
254253
垢版 |
2010/01/17(日) 12:23:29
いや、計算不可能かもしれない。ごめん。

無限ループかと思えるくらいに長い時間をかけて、最小BFとなるパターンと、単なる無限ループを区別するには
停止可能性の判定が必要になってくる。
2010/01/17(日) 19:49:19
プログラムの等価性判定って計算不可能だよね?
だとすれば、最小BFが計算できればその最小BF同士の比較によって等価性判定ができちゃうので計算不可能だと思う。
256245
垢版 |
2010/01/20(水) 22:10:00
short bf_opt1(char *bfcode, char *optbfcode)
{
int prevcode;
int deletecode;
/*ここに最適化処理を書きます。*/

/*1 ムダなコードの取り除き*/
while (*bfcode) {
if (prevcode == '>' && *bfcode == '<') {
*bfcode = *(-1 +bfcode) = ' ';
deletecode = deletecode+2;
}
if (prevcode == '+' && *bfcode == '-') {
*bfcode = *(-1 +bfcode) = ' ';
deletecode = deletecode+2;
}
prevcode = *bfcode++;
}
strcpy(optbfcode, bfcode);
return deletecode = deletecode+2;
}
2010/02/21(日) 14:34:22
2010/02/21(日) 18:32:02
スーパーpre記法のシンタックス・ハイライトが Brainfuck, Clojureに対応しました - はてなダイアリー日記
http://d.hatena.ne.jp/hatenadiary/20100219/1266571864
2010/02/22(月) 17:35:51
何やってんだw
2010/02/27(土) 15:51:14
bfがインタプリタ作るのが簡単な言語とはよく言われていたが、
シンタックスハイライト作るのも簡単ってのは斜め上だなぁ。気づかなかった。
2010/03/03(水) 16:39:55
プログラマーが仕事をサボっている兆候一覧

「Dvorakでもかなり早く打てるようになってきたぞ」
「念のためうちのサーバーでもGopherをサポートできるようにしときました」
「XHTML、HTML、さらにHAIKUにも準拠しています」
「brainfuckのシンタックスハイライトに対応しました」 ← new!
2010/04/10(土) 11:57:14
+[+] //まだまだ終わらせないコード
2010/04/14(水) 01:57:52
そのコードいずれオーバーフローして止まるぞ
2010/04/14(水) 02:03:54
+[-+]
2010/04/14(水) 09:13:58
ニコニコだけど、BFのインタプリタを作ってる動画
http://www.nicovideo.jp/watch/sm10384056
2010/04/14(水) 16:52:59
>>265
2010/04/14(水) 17:08:11
今日じゃねえかwww
2010/05/13(木) 00:26:54
一ヶ月前だ
2010/05/13(木) 16:03:27
今となっては昔のことだが
2010/05/19(水) 23:22:02
Brainfuckというものがあったそうな
2010/05/20(木) 00:20:07
湯水のごとく記号を使い、小さなプログラムを組んではスレに納めていたそうな
2010/05/24(月) 15:35:19
ttp://twitter.com/YewShmz/status/14212364028
2010/05/29(土) 04:23:28
2日前からBrainfuckプログラミング初めた
ようやくHelloWorldできた
>>>++++++++++[<+<<+>>>-]<[<++++>>++++++>++++++++++<<-]+++++
+++++>>[<<+>>>>+<<-]++++[>+++++<-]>>[<+<+>>-]>+++++[<++++++
+>-]<.<<<<-----.+++++.>>-.<<--.>>>---.<+.+.>>---.<<<.>>--.+
.<-.+++++.<<+++.<++++++.>>>-.<++.<<<.>>>>+.<<-.>>>.>.<<<<-.
>>--------.<<----.+++++.<------.+.<.>>>>>+++++++.<<<<<.>>>>
>>....<<<<++.++.---------.+++++.>>>-------.<+++++.<<<-.----
--.>>>++.---.<<--..+++.>>>>.<+++.<<<.+++.------.>>-.>>+.-<<
--------.<<++.<.+++++++.>>---.<<<.>>>>>>....<<<<++++.>>++++
+++++.>---.+.<<<.----.>>>>.<<<<<+++++++.>>.<<<.>>>>>++++++++.
2010/05/29(土) 07:48:52
うわぁ・・・
いまどき文字列出力くらいは拡張命令でやるのが常識だぞ
いくらなんでも非効率的に過ぎる

#!/bin/bf
printf("HelloWorld\n")
2010/05/29(土) 11:43:29
>>274
BFなんて実用目的に使うものじゃなくて、パズル感覚で遊ぶものなんだから
そっちの方が邪道だろw
2010/05/29(土) 13:01:04
音は出ないの?
2010/05/29(土) 16:20:38
任意のアドレスに割り当て
+-で操作して
.で鳴らす

とか考えたけどハードというか実装依存だね
2010/05/29(土) 16:24:55
出力したら音が鳴るインタプリタ作ってやろうかと思ったけど
よく考えたらそんな技術無かった。
2010/05/29(土) 16:33:02
楽な方法なら
三角波でド〜↑のドまでの単音ファイルを用意して
数値によって再生
2010/05/30(日) 03:33:27
出力からmidiを鳴らすインタプリタ半分完成した
音の長さや音色、テンポ、スケール、和音なんかを扱える仕様を考えてる
今日はもう寝るがな
281デフォルトの名無しさん
垢版 |
2010/05/30(日) 03:42:12
>>280
ソースきぼん
2010/05/30(日) 03:53:02
>>281
javaだけど、思い出しつつ調べつつ書いた汚いソースだぞ
すぐには見せられんわ
文字コードを音階に対応させて再生してるだけだし

一応スクリーンショット
蛙の歌を再生中
http://www.dotup.org/uploda/www.dotup.org924517.png
283282
垢版 |
2010/05/30(日) 20:14:49
とりあえず動くものが出来ました!
中のtxtをソフトの左の欄にはっつけてrunしてみて下さい!
XPなら動くと思います。
midi音源にMicrosoft GS Wavetable SW Synthを使用してます。

http://www.dotup.org/uploda/www.dotup.org925971.zip

あ、もちろん実行は自己責任で。
284282
垢版 |
2010/05/30(日) 22:07:16
反応無いけどバージョンアップだよ\(^o^)/
命令の数を4096個まで実行可能にしたよ。
スペランカーフルだよ。

http://www.dotup.org/uploda/www.dotup.org926263.zip
285デフォルトの名無しさん
垢版 |
2010/05/31(月) 01:46:40
あなたは神様ですか?
2010/05/31(月) 03:05:01
とんでもねえ、あたしゃ神様だよ
2010/05/31(月) 12:48:23
win7だと何も起きないのね
ちなみにwindowCloseイベントくらい処理してほしかったなぁ
288282
垢版 |
2010/05/31(月) 12:52:12
>>287
何も起きないってどういうことですか?
ちゃんとクローズしますよ!初期化に失敗すると閉じないのかなぁ?

休日をそれで潰しちゃったのでツケを払うのに今忙しいんです。
ごめんね><
289282
垢版 |
2010/05/31(月) 17:58:07
一応(遅いですが)仕様を連ねておこうと思います。

■インターフェイス編
・画面左欄がソース、右欄がアウトプット
・runすると同時にsetされます
 set状態ではソースの変更は出来ません
 set/unsetボタンで解除できます
・下の欄がインプットです
 ','でインプット欄の文字が1文字読み込まれます
・stepボタン右のlabelにはプログラムカウンタが表示されます(正直あまり意味ない)
・アウトプット欄には通常のbrainfuckで出力される文字のみが表示されます
■MIDI編
・MIDI出力には標準で"Microsoft GS Wavetable SW Synth"を使用しています
 一応、引数により任意のデバイスを使えます 例 brainmidi.jar "Java Sound Synthesizer"
 起動時にSystem.out.printでコンピュータ内のデバイス名をコンソールに列記してますが、私はjar実行ファイルでのコンソール出力を知るすべを知りません\(^o^)/
・デバイスのオープンに失敗してもエラーはでません
・文字コードどmidi出力の対応表です
 33〜123 : 音を出す
 1 + 引数 : テンポを引数に設定



動作報告がない
290282
垢版 |
2010/05/31(月) 18:09:47
ごめんなさい途中で送ってしまいました。。。

 2 + 引数 : 引数の音数を同時に発するように設定します
 3 + 引数 : 音の長さを設定します 引数は0〜5までそれぞれ16分音符、8分音符、4分音符、3分音符、2分音符、全音符に対応します

 * + 引数 の表記は*を出力した後引数を出力するという意味です

走り書きでごめんなさい
そして、見直すべき所がいっぱいですね

動作報告や反応がないのでどうしていいやら^^;
もうそんな下らないものはいいというのであれば去ります
もっと改良してというのであれば頑張ります

長文すいませんでした
2010/05/31(月) 19:39:12
>>282
Win7+JDK6だとbrainmidi.jarをダブルクリック
×ボタン(WindowClose)をクリック
無反応になるのよ


あとサンプルのsperanka.txtをエディタで開いて左ペインに貼り付けてからrunをすると
ウィンドウがすべてグレー(選択不可)になっているにも関わらず何もおきない(CPUも食わない)
になる

音源ってJavaからのアクセスのために特別な設定が何か必要だったっけ?

きれいじゃなくてもいいからソースがあれば手伝えるのだけど、さすがにjarだけだとめんどくさいんだ
292282
垢版 |
2010/05/31(月) 20:05:34
>>291
原因が分かりました
デバイスオープンに失敗するとデバイスアクセス時に固まるようです
私はwin7は持っていないのですが、Microsoft GS Wavetable SW Synthが入っていないのでしょう
>>291さんのPCに入っているmidi音源を第一引数として指定し実行すれば動くと思います。(必ずダブルクオーテーションで挟むように)

>音源ってJavaからのアクセスのために特別な設定が何か必要だったっけ?
特に必要はないはずです

ソースは仕様見直し、ブラッシュアップ後にうpしようと思います
おそらく数時間後
2010/05/31(月) 22:15:53
>Microsoft GS Wavetable SW Synth
普通に考えてコレが入ってないのあり得ないと思うんだが
デフォルトのMIDI音源だよね?
294282
垢版 |
2010/05/31(月) 22:39:06
バージョンうp
ソースと引数指定用バッチファイル同梱です!
ttp://www.dotup.org/uploda/www.dotup.org928595.zip

>>293
確かに入ってないとおかしいですよね。
ほかに原因があるような気がしてきた・・・

>>289の追伸ですが
文字コード32(スペース)は音の鳴らない空ノートを示します
295デフォルトの名無しさん
垢版 |
2010/05/31(月) 23:08:07
おまえどうせXPだろ
296282
垢版 |
2010/05/31(月) 23:21:56
>>295
そうですけどなにか?
XP以外のデバッグは出来ませぬ
2010/06/01(火) 00:09:14
やはりな・・・

インターネットの普及とインフラ整備によりMIDIは事実上役目を終えた
Vista以降は標準でMIDIの再生など出来ない

おまえだけ浮いているのはそのせい
298282
垢版 |
2010/06/01(火) 00:25:32
そんな・・・
7,vistaにXPユーザ数は負けたというのか・・・?
そんなことないだろ!ここはム板だぞ!!
XPは現役のはず!


と、茶番はさておき
MIDIの再生は出来ないってのは嘘ですね、流石に^^;
使用できるMIDI音源を指定できるようにはしてますのでvista,7さんも何とか出来るはずです
299282
垢版 |
2010/06/01(火) 01:23:09
どれくらいの人に動かしてもらっているか分かりませんがサンプルを
tempo
+.-
++++++++++ ++++++++++ ++++++++++ ++++++++++
++++++++++ ++++++++++ ++++++++++ ++++++++++
++++++++++ ++++++++++ ++++++++++ ++++++++++
++++++++++ ++++++++++ .
chord
>++.-.-<
init
>
++++++++++ ++++++++++ ++++++++++ ++++++++++
++++++++++ ++++++++++ ++++++++++ +++++++
main
. ++. ++. +. ++. ++. ++. +.

シンプルにドレミファソラシドを再生します
tempo chordの部分を省いてもらっても鳴ります

ソース欄に +[,.]
インプット欄に MOQRTVXY
でも同じようになります

ではおやすみなさい
2010/06/01(火) 05:08:18
>>282
java synthつかってみた、感動した
2010/06/01(火) 08:08:41
何となく虫してたけど今試してみた。すげw
302282
垢版 |
2010/06/01(火) 08:10:44
>>300
動作報告ありがとうございます!
実は私の環境ではJava Sound Synthesizerが鳴らないんですよ・・・
ググると
>Java標準のシンセ(Java Sound Synthesizer)にインストゥルメントがロードされていないため
とか出るんですけど
いまいちよく分かりませぬ/(^o^)\
303282
垢版 |
2010/06/01(火) 08:19:11
>>301
確かに、試すにはめんどくさくて不親切でリスクがありますよねー・・・
動かしてもらってありがとうございます!
2010/06/14(月) 18:27:23
最近神様が来られない。。。
2010/06/14(月) 18:37:05
邪道だとは思うけど、アルファベット一文字をマクロにすればかなり書きやすくなるよね。
小文字で定義、大文字で展開とか。ついでに数字一文字で繰り返しとか。
例えばこんな感じ。
9+[>8+>9+++>5+<<<-]>.>++.+++++++..+++.>-.a---AAAA.<++++++++.AA--.+++.AA.AA--.>+.
いかん、例が悪くて余り書き易そうに見えないw
2010/06/14(月) 18:42:18
拡張の話は別にしてもいいが
誰でも思いつきそうなのは勘弁
307282
垢版 |
2010/06/14(月) 19:16:14
#defineでマクロ定義はすでに作った
2010/06/14(月) 19:17:59
やだ、名前残ってた
恥ずかしい
2010/06/14(月) 23:15:41
誰かAPIの叩き方をだな
2010/06/14(月) 23:51:07
>>307-308
和んだw
2010/06/23(水) 00:03:38
*p番のシステムコールを呼び出す命令があれば何でもできる
2010/06/25(金) 03:39:19
>>311 神発見
2010/07/09(金) 21:37:29
ここって他のbrain系のコードの解説ってお願い出来る?
スレチだったら申し訳ないが何でhelloworldになるのか分からないのがある
一応このスレの例のhelloworldは理解してるつもりです
2010/07/09(金) 23:12:06
どうせ他にネタもないし出してみそ
2010/07/09(金) 23:33:26
vectorに合った奴何ですが
={+++++++>--->+<<!-.これでHが表示されますが何故でしょう?
=!でループするのは分かってますが、考えると++しすぎて数値が何千って行っています
Hは72なのに何故Hが画面に出るのかが分からないです
今日学校で見つけてからずっと悩んでいます
2010/07/09(金) 23:33:35
http://www.youtube.com/watch?v=FTxgrkmX2SA
2010/07/10(土) 02:00:02
純bf以外なら「vectorに合った奴」じゃなくて名前を書いてくれないと・・・
2010/07/10(土) 04:00:09
=とか!とか{とかって何だよ
2010/07/10(土) 05:20:18
ttp://www.vector.co.jp/soft/win95/prog/se484667.html
これか。
2010/07/10(土) 05:29:29
>>315
読んだ。

1セルがmod 256の数値だと仮定して、
終端ポインタがmem[30000]をさしていると考えると
最初のセルは
7 * (30000-1) -1 = 72
になるんだと思われる。

拡張命令の是非はさておき、
メモリのサイズが変わると結果も変わるので、
俺はあまり意味のあるプログラムだとは思わんね。
2010/07/10(土) 08:20:05
有難うございます。
でもどうして256何ですか?
2010/07/10(土) 08:55:40
http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88_(%E6%83%85%E5%A0%B1)
2010/07/10(土) 09:53:40
有難うございます。
符号無しで0から255の意味が最初分かりませんでしたが255から+したら0に戻るんですね
何千って数値が行くと思っていました
2010/07/10(土) 14:12:28
>>319
どうでもいいけどLinuxの実行バイナリのサイズ大きいな
静的リンクするとこんなにでかくなるのか
以下に本元の小ささの凄さが分かるわ
2010/07/12(月) 01:23:09
バイナリ配るって発想が・・・・
2010/07/12(月) 02:27:30
つーか32bitでUbuntuならARMでも動くのかとか突っ込みたくなるな
2010/07/12(月) 11:10:21
そういやCで書かれたBrainFuckのインタプリタのソースコードって公開されてなくないか?
JSとかは良く見るけどさ
328デフォルトの名無しさん
垢版 |
2010/07/12(月) 12:23:37
逆じゃね?

一番多くサンプルあるのがCだろ
実装が楽だし、よくポインタ理解度チェックとして初心者の練習問題に使われてるし

歴史的経緯から考えてもCが多いだろうよ
2010/07/12(月) 15:11:14
ARMだったらCよりThumbで書いた方が楽しそう
2010/07/12(月) 17:07:05
thumbはマゾいな
楽しさなら個人的にはarmの方が上だなぁ
2010/07/15(木) 21:10:21
新しいesolang覚えたらHelloWorldとQuineの次は大体BFインタプリタ
332デフォルトの名無しさん
垢版 |
2010/07/15(木) 23:11:09
BFのQuine書けるやつは凄い
2010/07/16(金) 15:37:19
BFインタプリタ作ってみようと思ったが[][][]のようにループが複数ある時どう書けばいいの?
[[]]とか中に複数あるならいいんだけど、[][]と離れると動かない
2010/07/16(金) 19:07:44
バックトラックのときに"]"の数を数えるカウンタを用意して、
"]"が来たらカウンタを増やす
"["が来たらカウンタを減らす
カウンタが0のときに"["が来たら、そこに飛ぶ。
でいいと思うよ。
2010/07/22(木) 03:16:23
こっちの方が構文が複雑だな
http://extreme.pcgameshardware.de/attachments/64656d1232652813-fallout-3-das-uberlebenshandbuch-terminal-60-.jpg
2010/07/22(木) 08:14:33
FO3か。それメモリダンプからパスワード当てるって設定だから、
構文も何もないよ。
2010/07/22(木) 12:25:38
女の没論理性はいかんともし難い。
2010/07/22(木) 12:43:24
仕事中暇だったから、上のbr系使ってhelloworldを出力するCソースを吐き出し
それをビルドして実行させてみた

++++++++[****{*****{*************}}-]***|>{{|+>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|<<<
<<<<<<<<<<<++++++>----->++++>+++++++++++++>---->--->}}&{>&++++++++++++++++++++>
+++++++++++>++++++++++++>---->+>+++++++>&++++++>>|}|+++++++++++++++++++>{{{&+++
+++++++>}|+>|++++++>|++++++++++++>}}|--->{{|+++++>|------->|+>|++++++>}|>|+>{|+
++++++++++++++++++>++++++++++>}}///|>|>|>|>{{|++++++++>|+++++++++++++>|++++++++
++++>|+++++++++++>}|>}|++>{{|>++++++[<----->-]<-->|--->|++++>|++++>|+++++++>}|+
+++>}|>{{|+++++++++++++++>|+++++++>|++++++++++>|++++>|---->}}|+>|++>{|+>|>++++[
<+++++>-]<->++++++++++>}|>|>|>|>{{|++++++++++>|--->|++++++++++++>|+++++++++++++
>|++++++++++>|++++++>}}|>{|++++++++>|>++++[<+++++>-]<->++++++++++>{|>+++++[<+++
+>-]<+@

./braineasing hello.txt > hello.c && gcc -o hello.o hello.c && ./hello.o && rm hello.o hello.c

ふぅ…何やってるんだろ俺…
2010/07/22(木) 14:09:55
暇すぎるだろw
俺にその暇分けろ!
2010/07/22(木) 15:43:41
暇は作り出すものだ
2010/07/22(木) 15:47:44
暇乞い
2010/07/22(木) 19:13:26
俺もやろうとしたらめんどくさ過ぎてやめたw
何時間掛かったんだ?
2010/08/19(木) 23:07:17
おい、おまえら向けのサイトができてたぞ。
SqueakやScartch 系列のビジュアルプログラミング言語だが、かなり難解

衝突プログラミングがキモ

プログラミン | 文部科学省
http://www.mext.go.jp/programin/

ドラッグ&ドロップで簡単プログラミング 文科省が子ども向けに公開、まとめサイトも登場 - ITmedia News
http://www.itmedia.co.jp/news/articles/1008/19/news082.html

まとめ:プログラミン作品ギャラリー 『プログラミンでつくったよ!』を集めるサービス
http://programin.jp/


サンプルのジャンケンとシューティングを見ればできることがわかるとおもう

加算器
http://www.mext.go.jp/programin/share/?share_id=afde3d7c491b1839b35fe89ab8bf9dd0
2010/08/20(金) 22:13:12
プログラミンでbrainfuckきてたw

作りかけのbrainfuck: http://bit.ly/cpn2FL

瓶詰堂日記
http://www.binzume.net/diary/2010-08-20#A1
345デフォルトの名無しさん
垢版 |
2010/08/20(金) 22:13:35
落ちそうになってるのでage
2010/08/20(金) 23:05:28
sage
2010/08/20(金) 23:58:38
sageでも落ちないよ
2010/09/13(月) 05:39:26
あげ
2010/09/25(土) 22:52:38
Malbolgeを読める、または書ける香具師っているのかな?w
2010/09/26(日) 05:21:38
某大学の研究でHello Worldは書けたらしいが…
読むのは無理だろw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況