新言語 neko mimi Fu**♥ ・1レス内に全命令のリファレンスが入る素敵な言語。 ネコミミ! ポインタをインクリメント ネコミミモード ポインタをデクリメント おにいさま ポインタが示すメモリ位置のデータをインクリメント 私のしもべー ポインタが示すメモリ位置のデータをデクリメント や・く・そ・く・よ ポインタが示すメモリ位置のデータを出力 フルフルフルムーン ポインタが示すメモリ位置のデータに入力 キスキス… ポインタが示すメモリ位置のデータがヌルなら対応する キス…したくなっちゃった… までジャンプ キス…したくなっちゃった… ポインタが示すメモリ位置のデータがヌルじゃないなら対応する キスキス… までジャンプ
例:Hello world おにいさまおにいさまおにいさまおにいさまキスキス…ネコミミ!おにいさまおにいさま おにいさまおにいさまキスキス…ネコミミ!おにいさまおにいさまおにいさまおにいさま ネコミミ!おにいさまおにいさまおにいさまおにいさまおにいさまおにいさまネコミミ! おにいさまおにいさまネコミミモードネコミミモードネコミミモード私のしもべー キス…したくなっちゃった…ネコミミ!おにいさまおにいさまネコミミ!おにいさま ネコミミモードネコミミモードネコミミモード私のしもべーキス…したくなっちゃった… ネコミミ!ネコミミ!や・く・そ・く・よネコミミ!おにいさまや・く・そ・く・よ おにいさまおにいさまおにいさまおにいさまおにいさまおにいさまおにいさま や・く・そ・く・よや・く・そ・く・よおにいさまおにいさまおにいさまや・く・そ・く・よ ネコミミ!や・く・そ・く・よネコミミモードネコミミモード私のしもべーネコミミモード おにいさまおにいさまおにいさまおにいさまキスキス…ネコミミ!おにいさまおにいさま おにいさまおにいさまネコミミモード私のしもべーキス…したくなっちゃった…ネコミミ! や・く・そ・く・よネコミミ!や・く・そ・く・よおにいさまおにいさまおにいさま や・く・そ・く・よ私のしもべー私のしもべー私のしもべー私のしもべー私のしもべー 私のしもべーや・く・そ・く・よ私のしもべー私のしもべー私のしもべー私のしもべー 私のしもべー私のしもべー私のしもべー私のしもべーや・く・そ・く・よネコミミ! おにいさまや・く・そ・く・よ
ある意味すげえ……
ワラタ
neko mimi fuckインタプリタまだ?
434 :
デフォルトの名無しさん :04/10/15 13:16:09
>>430 GJ!!
いろいろ置換してみると面白そうだなw
437 :
デフォルトの名無しさん :04/10/16 07:14:16
test
理論系の感覚としては0を'-'するとあくまでも-1であって、255と同一視するのには抵抗があるなぁ。 反対にメモリは基準点から対称に広がっている感覚なので、いきなり'<'するのには抵抗ない。 あと、文字コードに無条件でASCIIを使っているのも... 自己書き換えがらみを論じる場合は"><+-.,[]"に小さい数字を与えた方がコードが小さくなるはずだし、負数も含めた文字コードなんてもあっても良いと思う。
441 :
デフォルトの名無しさん :04/10/20 15:38:12
ガロア体
広い目で見るとFORTHの末裔だね
443 :
デフォルトの名無しさん :04/10/20 21:33:24
なるほどな
フィボナッチ数を再帰的に計算するプログラムを考えたのですが、調べているうちに 「原始帰納的関数はloopだけで計算可能」 というのがありました。 ということは、帰納的関数だけども原始帰納的関数でないアッカーマン関数はBrainf*ckでは 計算不可能ということで良いのかな?
つーか関数作れればいいんだよ 関数作れないなら何もできないと思っていい
BrainFuck で書いたプログラムで任意の Turing Machine を エミュレートできるから、どの帰納的関数も定義できる。 もちろん Ackermann 関数も。
>>424 すまんね、パーティションごと逝かれてしまったよ。ただいま復旧作業中だが tool-ya.ddo.jp のサイトは
完全にお遊び用だったからバックアップも取ってなかったし、ただいまあちこちのマシンから発掘作業中。
しかし件のアプレットのソースはまだ見つかってない…
あーマジでないっぽいっす。archive.org にも転がってなかったし、誰か ダウンロードしてる人居たらどっかのアップローダーか postmaster@tool-ya.ddo.ジェーピー まで送ってください。
とりあえず、俺にはまだ
>>10 の動きが、
同じならカッコ内ではなく、違ってればカッコ内としか読めない。
解説キボンヌ。
ディスク増設のためにテープに取ったバックアップ中にはっけーん。
まだ復旧作業が残ってるので再開はもうしばらくお待ちください。
ところで , の文字入力は BrainFuck の仕様的にエコーバックなしなのかね?
>>1 しか読んでないんで作るときに迷ったんだけど、大抵の処理系はエコー
バックすんのが標準かと思ってそうしたんだが (Java とか ANSI C の
getchar() とか/仕様的にエコーバックについては言及されていないと思うが
事実上ね)。
とりあえずチェックボックスとかで選べるようにすればいいんでない
>>450 乙です
復帰したらまた遊ばせてもらいます。
乙
++++[>>++++++++<<-]++[>>>+++++<<<-]++++++++[>+++++++++++<-]>-.<++++[>++++<-]>+.- ------.<++++[>+++++<-]>-.>.<<++++[>----<-]>-.++++++++++++.--.--------.++++++++++ ++++.>.<-----.---------.<++++[>+++++<-]>-.----.>.<-----------.+++++.>.<++++++.-- ----------.---.>.<++++++++++++++.--------------.++++++++++++.++++.<++++[>----<-] >.+++++++++.-----------.++.<++++++[>------<-]>--.>>.<<------.>>.<<------.++++++. ---.+++.>>.<<-------.+++++++..-------.+++++++.>>.<<--------.++++++++...------.++ ++++.---.>>.<<----.+++++++..--.----.++++++..---.+++.>>.<<-------.+++++++.------- --.+++++++++.--------.++++++++...---.+++.>>.<<--------.++++++++.-------.+++++++.. ----.++++...-------.+++++++.>>.<<.---------.+++++++++...----.++.++...---.+++.
デフォルトでエコーバックしないようにしてみた。あと文字入力モードに入ったときに 多少分かりやすくなったか。全角の扱いに関してはまた今度。 履歴見たら最初に作ってからもう2年も経ってんだな。俺も三十路に入ったよ…
コードに改行が入ってると実行したときにコードのカーソルと上2つの表示がずれてきます
お、ホントだ。
誰か任意 の入力二つに対して 割り算を行うプログラムを 作ってください。 破錠シマスタ
460 :
デフォルトの名無しさん :04/11/22 21:48:38
>>459 -----.+++++++.>>.<<--------.++++++++...------.++
++++.---.>>.<<----.+++++++..--.----.++++++..---.+++.>>.<<-------.+++++++.-------
--.+++++++++.--------.++++++++...---.+++.>
BrainFu**って一見チューリングマシンそのものっぽいけど, 実はけっこう違うよな.なんつーか,本当によく考えてある.
エニグマ暗号機に似てるとオモタ
ステップ実行のカーソル位置ずれより先に国際文字出力に対応したザンス。 Shift_JIS でも UTF-8 でも文字出力可能 (になってる事を望む…)。
ちなみにこれマルチバイト文字の入力はどうすんだろ。メモリモデル 1Byte = 16bit にして Unicode 入力にでもしなきゃ「今の位置に 一文字読み込む」とかいう動作は無理だで。相変わらず毛唐どもは てめぇの事しか考えてねぇな。
BraI18Nfuck
チューリングマシンとBrainFuckの大きな違いって何?
あああああああ・・・・テスト近づいてるのに・・・・ BrainFuckが・・・・
>>468 気持ちは解るが試験を優先しろ。(BrainFuckが楽しい場合)
気持ちは解るが頭を整理しろ。(BrainがFuckな場合)
いや、
>>468 は試験にBrainFuckが出るので焦っているのではないか?
>>470 YTなら知っているがUTと言うのは初めてな位「まさか」だよ~
[勇気] [勇気][勇気] [勇気][勇気][勇気][勇気] 生産が [勇気][勇気][勇気][勇気] 追いつかないよ .[勇気][勇気][勇気][勇気] ∧__∧ [勇気][勇気][勇気][勇気][勇気] ( ´・ω・) [勇気][勇気][勇気][勇気][勇気] /ヽ○==○ [勇気][勇気][勇気][勇気][勇気] / ||_ | [勇気][勇気][勇気][勇気][勇気][勇気] し' ̄(_)) ̄(_)) ̄(_)) ̄(_)) ̄(_)) ̄(_)) ̄(_)) ̄(_)) ̄
>>468 = テスト開始まじかだがまだプログラムが完成してない BF コーダー
名前消し忘れた… '`,、('∀`) '`,、
誰かBrainFuckで動くCPUとか作って売らないかなあ。
CからBrainfuckコードを吐くコンパイラとかないかなあ。
>>475 BrainFuck でエミュレータかあ
# と、揚げ足取り
>>477 うわ、「で」→「が」を素で脳内変換して読んでた、
今#を読んでワロタ
( ゚Д゚) ( ゚Д゚)! (;゚Д゚)・・・ (;;゚Д゚)そういえば乱数使えな・・・
>>479 言い出しっぺの法則ということで、疑似乱数発生器はおまかせしてよろしいでしょうか?
誰かBrainFuckを出力するCコンパイラ作ってくれないかな。 #本末転倒だけどw
条件分岐がうまく実現できればC→Brainfuckも夢ではない
BrainFuckのプログラムって普通に書いたら 再入可能・再配置可能・再使用可能のどれにも該当しないよなあ。
あ、再配置は可能か。初期状態でポインタの位置がずれてればいいのか。
>>479 大丈夫。優秀な乱数発生器を作ればいい
時計とか取れるようにシステム変数みたいな領域が
どこかにあればいいよね
擬似乱数のようにアルゴリズムでごまかせるものは良いが、 シードに使う現在時刻とかは無理だな。毎回入力してもらうか。
起動時にメモリがゼロクリアされてなければいいんじゃない。
POSIX API が(ry
BFでゼロクリアされてないって大変マンドクサイぞ
[-] でよくね?
>時間取得のシステム領域 そろそろ架空CPUを妄想してもいい頃なんじゃないの。 てか、ここででっち上げてデファクトスタンダードにしちまおう。
LIFE GAMEのグライダー発生器でプログラミングネタをふと思い出した。
RLE圧縮してもいいですか?
マイコンとロジックゲートを使わずにBrainFuckが走る まぁチューリングマシンみたいなもんって作品例ってありますか? はーどな話で須磨祖
初めてダウソしました。最高! なんか自分がPCの中枢に触れてるような気になれるぐらいΣd(・ω・´)イイ!!!
>>498 じゃ次はWhiteSpaceにチャレンジだ
500 :
デフォルトの名無しさん :04/12/26 16:37:09
INTERCAL の読み物はないかぇ?
501 :
デフォルトの名無しさん :04/12/27 13:19:58
即値代入ってできないんですか?
>>501 できません、もりもりインクリメントしてください。
#include <stdio.h> int main(){ int i,num; FILE *fp; printf("値?"); scanf("%d",&num); if(fp = fopen("out.txt","w")){ for (i=0;i<num;i++) fprintf(fp,"+"); fclose(fp); } }
暇なんで2chネラー向きのBrainFuckのネイティブコンパイラつーのを 作ってみるわ。もちろんWindowsネイティブな。PEフォーマット調べることから始めるからかなりまちなー。
ワラタ。まあがんばれ。
”奉仕の会”の本買えなかった…orz
問題なく使えるね。
マクロ定義して高級言語化できるようにしてくれ
BrainFuckにBrainをFuckされたんですが 訴えることは可能ですか?
>511 ワカンネェ。
Fuck されたBrainでBrainFuckをHackすることはできます。
誰か今までに発見された移動とか値コピーとかのまとめ作ってくれないか。 wikiとかで。
いやー、BrainFuckはええね。 パーサがswitch1つで出来ちゃったよ・・・
()だけのパーサ?
機械語のほうが高級じゃない?
何をもって高級というのか
これが役に立つ日は来るのか・・・
何かに応用するとか、役立つかどうかは分からないけど、 初心者に高級言語教える前にこれやった方が、覚えが早くなるんじゃないか。
カレントディレクトリの*.bfを監視して変更されたものを自動的に実行するバッチファイル for WinXP @echo off if "%1"=="brainfucking" goto loop cmd /c %0 brainfucking 2>&1 | %systemroot%\system32\find /v "ファイルが見つかりません" goto eof :loop for /f "usebackq delims=" %%f in (`dir *.bf /a:a /b`) do ( echo exec %%f bf %%f || echo error attrib %%f -a echo. ) ping localhost -n 2 >NUL goto loop :eof
コンパイラ自体は即日で出来たけど(当たり前か...) リンカができない。 Win32のフォーマットじゃないって怒られた。 見直し。鬱打氏脳。
これって0を-したらどうなるの?
00を-したらFFになるが 0を-したらどうなるんだかスラッシュになるんだべか
いろいろ試すならGUIよりも拡張命令追加したほうが楽だよ。 # コメント "コメントをstderrに出力" * # メモリとポインタをリセット ? # メモリをダンプ @ # 一命令を実行するごとにメモリをダンプのトグル
そんなんbrainfuckじゃないやい!とネットの片隅で叫ぶテスト
532 :
デフォルトの名無しさん :05/02/06 20:14:59
あげりゃレスも増えるだろう
533 :
デフォルトの名無しさん :05/02/06 21:37:42
取り敢えず自分の名前を表示するコードを作ってみた。 これ楽しいわ。
languageが回文になっていればacceptしそうでなければrejectするプログラムを書け。 00100100→accept 01101000→reject
535 :
デフォルトの名無しさん :05/02/08 15:11:39
>>534 8文字限定。きっともっと短く出来る
,>,>,>,> > > >,<,<,<,<<<<[-> > > >-<<<<]>[-> > > >-<<<<]>[-> > > >-<<<<]>[-> >
> >-<<<<]>[[-]<<<<+> > > >]>[[-]<<<<<+> > > > >]>[[-]<<<<<<+> > > > > >]>[[-]
<<<<<<<+> > > > > > >]<<<<<<<[[-]>+>++++++[>+++++++++++++++++++<-]>.----------
---.+++++.-----.--.<++++[>++++<-]>+.<<<]>-[>++++++++[>++++++++++++<-]>+.++..++
.+++++++++++.++++.<]
>>が多すぎるって怒られたorz
,>,>,>,>,>,>,>,> >+> > > >++++++[<++++[<+++++<++++> >-]>-]<<-------<+<<<<<< [<->-]<[> > > >+<<<<[-]]<[> > >-<<<-]> > >[> > >+<<<[-]]>[<<<<<-> > > > >-]<<<<< [> > > > > > >+<<<<<<<[-]]<[> > > > > > >-<<<<<<<-]> > > > > > >[>+<[-]]> [> > >+.<++++.+++++.-----.--.>++.[-]]>[>.++..++.>-.++++.<<-<<<[-]] 俺も8文字限定で作ってみた。 で、心持ち短くなった。まだまだ短くなりそう。 俺も「>>が多すぎます」って怒られたwwwwwwっうぇ ・・・orz
>>537 accept/rejectを表示させる処理が俺のよりずっとスマートだね。GJ!
acceptを表示した後の[-]はなくてもいいっぽい?
>>538 タハー(ノ∀`)
途中で弄ったときに無駄な処理作っちゃった
訂正前(line:4) [> > >+.<++++.+++++.-----.--.>++.[-]]>[>.++..++.>-.++++.<<-<<<[-]]
訂正後(line:4) [> > >+.<++++.+++++.-----.--.>++.>]>[>.++..++.>-.++++.>]
こんなもんかな
Rubyの圧勝だなw puts(if gets.chop == $_.chop.reverse then "accept" else "reject" end)
>>540 NondeterministicTuringMachine的に解いてみて。
542 :
デフォルトの名無しさん :05/02/08 22:01:41
>>541 はぁ?wわけわかんねー単語出してんじゃねえよwww
Rubyの圧勝wwwwwwwwww
痛いのが沸いてるな
>>537 01010101がrejectされるのは仕様ですか(´・ω・`)
545 :
デフォルトの名無しさん :05/02/09 12:08:15
547 :
デフォルトの名無しさん :05/02/11 02:08:22
BF->.com実行ファイルのコンパイラ誰か作ってー
548 :
デフォルトの名無しさん :05/02/11 04:19:21
Ruby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>BreinFack!
ruby厨はbrainやfuckのスペルもまともに綴れないほど知能が低いのか。 そりゃ非決定性チューリングマシンなんて聞いた事もないだろうな。
550 :
デフォルトの名無しさん :05/02/11 05:54:32
Rubyは最高言語!!!!!!!!!!!!!!!!!!
限定された条件のでのプログラムが面白いのに… 例えるなら、俳句の会に乱入にしてもっと400字で発表したほうがいい! とか言ってるようなもんと思った。
留byほどすばらしいげんごは存在しない。
命令数同じでもう少し使いやすい(あるいはもっと使いにくい)言語には出来ないものか。
554 :
デフォルトの名無しさん :05/02/11 07:50:59
超小型LISPはどうだ? もしくはforth、prologだな
555 :
デフォルトの名無しさん :05/02/11 10:48:13
Rubyとか叫ぶならこのぐらいやって欲しいなぁ +[>>>>+++++++++[<+++++++++<+++++++++++++<++++>>>-]<+.<.>>++++[<++++>-]<.[-]<++++.[-]<---.[-]<]
>>555 Ruby厨がそんなことするわけもできるわけもない。
釣られ厨のせいでスレが台無しだな
++++++[>++++[>+++>+++++<<-]<-]>>++++++.>---.---.+++.-----.-.
559 :
デフォルトの名無しさん :05/02/14 00:13:54
++++++++[>+++[>+++>++++>+++++<<<-]<-]>>-.>+.>.----.+.
>>555 短縮
+[>>>>>+++++++++[<++++[<++<+++<+>>>-]<+<+>>>-]<<+.<.>>++++[<++++>-]<.[-]<++++.[-]<---.[-]<]
>>553 BrainKill
・命令以外の基本動作はBrainF*ckと同様とする
命令
+ ポインタが示すメモリ位置のデータをインクリメントし、ポインタをインクリメントする
- ポインタが示すメモリ位置のデータをデクリメント
> ポインタを3進める
< ポインタを2戻す
. ポインタが示すメモリ位置のデータを出力
, ポインタが示すメモリ位置のデータを出力
{ ポインタが示すメモリ位置のデータの分だけ戻す
} ポインタが示すメモリ位置のデータの分だけ進める
すごろくゲームのようだ…
>>563 私が参加しているプロジェクトでは次のように歌われている。
♪一日一歩、三日で一歩、一歩進んで二歩下がる
#ダメすぎ
そりゃそうと、ポインタを進めるのに無駄に手数が増えただけで、基本的には変わらないのかな?<BrainKill
>>564 ループの命令がないじゃん。
{}を駆使するとループ組めるのかな>BrainKill
他にも+ではポインタもインクリメントされるので、同じデータを何回もイン
クリメントする時は大変そうだし、かなり頭がこんがらがりそうだ……。
え
カッコのマッチングがないので、インタプリタを作る方は本当にスイッチ1つで済むね。
入力命令がないわけだが。
+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><< +><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><< +><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><< +><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+><<+ +><<+><<+><<+><<+><<+><< ><<.><{ 'A'を無限に表示@BKill 「>>が多すぎます」にならないように工夫されてると思った。
569 :
デフォルトの名無しさん :05/02/16 01:20:12
ほ
うひょーハードウェア実装してー言語だなぁ!
標準入出力を除けば、電気使わなくても実装できそうだよな。
>>572 交通整理なんかで使うカウンタを1列に並べて
ポインタ位置に目印を置いたものを想像
↓
ソースはどうしようか…大きさの違うボールを並べるか
↓
レールにボールを転がすと適当に振り分けられて
ボタンを押したりポインタを動かしたりベルを鳴らしたり…
↓
ピタゴラスイッチ♪
…と思ったら放送終了してたのか。じゃあインクレディブルマシーンで。
>>573 カウンタならダイソーにあったよ。
ちょっと惹かれた。
TIMってまだ開発されてたのか
www BFの+ っうぇwww BFの- うはwww BFの> おkkwww BFの< みwなwぎwっwてwきwたwぜw BFの , 修正されるねwwwwwwwww BFの . ワロスwww BFの[ ワロタwww BFの] Hello,world! wwwwwwwwwwwwwwwwwwwwwwwwwwwワロスwwwうはwwwwww wwwwwwwwwwwwwwwwwwwwwおkkwwwっうぇwwwワロタwwwうは www修正されるねwwwwwwwwwおkkwwwwwwwwwwwwwwwワロスww wうはwwwwwwwwwwwwwwwwwwwwwwwwおkkwwwっうぇwwwワロ タwwwうはwwwwww修正されるねwwwwwwwwwwwwwwwwwwwwww wwwwwwww修正されるねwwwwwwwww修正されるねwwwwwwwwwww wwwwwww修正されるねwwwwwwwwwワロスwwwっうぇwwwワロタwwwおkk wwwwwwwwwwwwwwwワロスwwwうはwwwwwwwwwwwwwwwwww wwwwwwwwwおkkwwwっうぇwwwワロタwwwうはwww修正されるねwww wwwwwwおkkwwwwwwwwwwwwwwwwwwwwwwwwワロスwwwうは wwwwwwwwwwwwwwwwwwwwwwwwwwwおkkwwwっうぇwwwワロ タwwwうはwwwっうぇwww修正されるねwwwwwwwwwおkkwwwwwww wwwwwwwwワロスwwwうはwwwwwwwwwwwwwwwwwwwwwおkkw wwっうぇwwwワロタwwwうはwww修正されるねwwwwwwwwwwwwwwww ww修正されるねwwwwwwwwwっうぇwwwっうぇwwwっうぇwwwっうぇww wっうぇwwwっうぇwww修正されるねwwwwwwwwwっうぇwwwっうぇwww っうぇwwwっうぇwwwっうぇwwwっうぇwwwっうぇwwwっうぇwww修正され るねwwwwwwwwwワロスwwwっうぇwwwワロタwwwおkkwwwwwwwwwww wwwwワロスwwwうはwwwwwwwwwwwwwwwwwwwwwwwwwwwおk kwwwっうぇwwwワロタwwwうはwwwwww修正されるねwwwwwwwww
普通にワロス
VIPPERかよ・・
痴漢ネタ飽きた
このスレが建ってからもう約二年と半年経つんだな・・・
あれからホントに色々あった。。。
このスレ保守されまくりで長生きしてるよな。
>>370-372 あたりなんかGJだよな。。。
まあそれは俺だけどな。
加 BFの+ 減 BFの- 進 BFの> 戻 BFの< 始 BFの[ 終 BFの] 入 BFの, 出 BFの. Hello World! 略
>>582 Hello World!
減始進加進加戻戻減減減減減減減終進減出戻加加加加加加加加加加始進加加加進減減減戻
戻減終進減出加加加加加加加出出加加加出進加出減減減減減減減減減減減減出戻加加加加
加加加加出減減減減減減減減出加加加出減減減減減減出減減減減減減減減出進加出
>>584 気がするだけだと思うんだ
っと思っていたらわかりやすい気がしてきた。
>>587 サンクス。すごいな。目潰れるかと思った。
Brainfuckを改造してシンプルにグラフィックスを出力する機能を搭載するにはどうすればよいですか
PutPixel(100,200,0xFF8800)と標準出力に出力されたら点を打つ
普段使っている領域の前(後ろ)の部分が書き換えられたら描画する
@で描画コマンド実行(dr@w) 0: 描画コマンド番号(0=描画色設定, 1=点, , 2=直線, ...) 1, 2, 3, ... 描画コマンドに対応した引数 +>++>+++<<@ で(2,3)に点を表示
メモリの一部をVRAMにすりゃいいだろ
ねぇ、おまいら、nondeterministicTMのプログラムが書ける言語もいいけど、 deterministicTMのプログラムを書ける言語ってないの?処理時間は無視して。
597 :
デフォルトの名無しさん :2005/04/17(日) 02:00:35
俺の携帯はBREWだから、出来ないんだYO!! 誰かせめてBREWじゃなくていいから、CGIに作ってYO!!
598 :
デフォルトの名無しさん :2005/04/17(日) 02:01:12
>597 俺のもBREWなんで、CGIで作れないかなと思ったんだが、 入力の処理ってどうする? BFのソースと一緒に入力用のバッファも記述させて、 入力の命令が来たらバッファから1Byteちぎって入力とする。 とか考えたんだけど、それだと少なくともヒット&ブローはできないな。 どうせCGIにするならメモリ上にリファラとかファイルに保存される領域とか PNGで出力されるVRAMとか用意して、カウンタやBBS作れたらいいな。
インタプリタなんて10数行で作れるやん。
エンジンだけならね 使いやすくするのはめんどいよ
IDE凝るまでもなくデバッグ用拡張命令いくつか入れればそんな面倒でもないし実用性?もかなり高くなるよ。
603 :
デフォルトの名無しさん :2005/05/21(土) 23:43:48
age
604 :
デフォルトの名無しさん :2005/05/27(金) 12:32:22
>>604 それふつうの環境だと見る事ができないって言う最大の欠点があるんだよね(w
Webで公開するときは色変更してほしい位だ。
>>605 欠点なんだが、BFらしさの極限という気もするw
>>606 紙にも書けない(w
絵にも描けないおもしろさかな。
>>607 プログラマーの正しいWhitespaceの使い方
上司「○○君、出来たのかね?」
○○「はい。」
--- ここで白紙のコピー用紙を数枚差し出す ---
○○「家でWhitespaceのコードを書いてきました。確認して下さい。」
610 :
デフォルトの名無しさん :2005/06/11(土) 17:51:35
うむ。忙しくなければ、俺も一回は許す。 で、そいつと一緒にアメリカンなトム笑いをすると思う。
>>610 2度目と二番煎じは人事にチクリだよね。
#でもここを読んでしまったので一度目も無理かもな~。
ちっちゃいフォントでプリントアウトすれば無問題
Whitespaceのソースコードは素晴らしいことにどんな小さなフォントで印刷しても 可読性は低下しないからな #ゼロより低くはなりようがない
その代わり向上もしないがな
WindowsやMacintosh程度の規模のOSのコードをガムの包み紙1枚に印字することも可能だ。
つか白紙の紙用意すればそれで何のソースコードにもなるなw
これからは仕様書もWhitespaceで書こう。
>>189 8a9
> int l=0;
16,17c17,18
< case '[': if (!memory[pointer]) while (*(++p) != ']') ; break;
< case ']': if (memory[pointer]) while (*(--p) != '[') ; break;
---
> case '[': if (!memory[pointer]) while (*(++p) != ']' || l>0){ if(*p == '
[') ++l; if(*p == ']') --l; } break;
> case ']': if (memory[pointer]) while (*(--p) != '[' || l>0){ if(*p == '
]') ++l; if(*p == '[') --l; } break;
26a28
> return 0;
>++[>+++++[>+++[<<<++++> > >-]<<<+>>-]<-]>++++[>+++[<<--->>-]<-]>+++[<----->-] ++[<<<.>.<.>>.>-]>+++[>++++[<<----->>-]<-]<<<<.>+.<.> > >.>+++++[<<<------> > >-] ++[<<<<.>.<.>>.>>-]+++++[<<<-----> > >-]<<<<.>++.<.> > >---.<<<.>+++.
あれ、
>>189 って [ ] の入れ子に対応してなくね?
>>626 あーそういうことなのか、やっと理解したよ
なんか
>>623 は俺の知らない言語で書かれたコードだと思ったw
>>627 diffとpatchは覚えておくと便利ですぜ。
多重ループを再起で処理する実装気盆ぬ
>>629 D言語だけど
// brainfuck interpreter
import std.stream;
char[] memory = [0];
int pointer = 0;
char[] script = " ";
int position = 0;
int main(char[][] args){
script = args[0];
bf(0, true);
return 0;
}
void bf(int homePosition, bit active){
for(; position < script.length; position++) switch(script[position]){
case '+': if(active) memory[pointer] ++; break;
case '-': if(active) memory[pointer] --; break;
case '>': if(active) if(++ pointer >= memory.length) memory ~= 0; break;
case '<': if(active) assert(-- pointer >= 0); break;
case '.': if(active) std.stream.stdout.write(memory[pointer]); break;
case ',': if(active) std.stream.stdin.read(memory[pointer]); break;
case '[': bf(position++, active && !!memory[pointer]); break;
case ']': if(active) position = homePosition - 1; return; break;
default: break;
}
}
とりあえず std.stream.stdoutは最近のバージョンで削除された。 代替えとしてstd.cstream.doutを使おう。
632 :
631 :2005/09/13(火) 23:53:29
for文使ってるのが凄く気に入らないので再帰のみに書き直してみた。 // brainfuck interpreter import std.cstream; char[]memory = [0]; int pointer = 0; char[]script; int main(char[][] args){ if(args.length<=1)return 0; script = cast(char[])std.file.read(args[1]) ~ ']'; bf(0,true); return 0; } int bf(int position,bool active){ switch(script[position]){ case '+':if(active) memory[pointer]++;break; case '-':if(active) memory[pointer]--;break; case '>':if(active && ++pointer == memory.length ) memory ~= 0;break; case '<':if(active) --pointer;break; case '.':if(active) dout.write(memory[pointer]);break; case ',':if(active) dout.read(memory[pointer]);break; case '[':int next = bf(position + 1 , active && memory[pointer]); return bf((active&&memory[pointer]) ? position : next , active); case ']':return position + 1; default: } return bf(position+1,active); }
>>631 知らんかった。THX
やー俺も最初一文字ずつ再帰でやろうとしたんだけど、
ロジックは合ってるはずなのに全然うまくいかなくて
よく見ると色々改良されてるなあ
>>633 > ロジックは合ってるはずなのに全然うまくいかなくて
こういうときはロジックが間違ってるハズなので自分のソースでも他人の物として読みなおすといいよ。
だいたいとてつもなく間抜けな間違いにテラハズカシスな思いをするのだけど、そういう間違いって思いこみ
で気が付けなくなってるんだよね。orz
>>634 あーいや、実はテスト用のbrainfuckスクリプトが間違っていたんですわ
しょーもなっ!
>>635 なんじゃその激ワロスな事態
PCが動かない壊れたカモ(ビクビク)←実はコンセント入ってない並にワラタ
638 :
631 :2005/09/14(水) 17:10:54
高速化を重視して末尾再帰のみに変形した。 これで普通のループのみのパターンと速度はほぼ同じはず。 import std.cstream,std.file; int main(char[][] args){ if(args.length<=1)return 0; char[]memory,script = cast(char[])std.file.read(args[1]); bf(script.ptr,script.ptr+script.length,memory.ptr,memory); return 0; } char*bf_jmp(char*pos,int step,int nest){ if(!nest)return pos-step; return bf_jmp(pos+step,step,nest + (*pos=='[')-(*pos==']')); } void bf(char*pos,char*end,char*ptr,char[]memory){ if(pos == end)return; if(ptr == memory.ptr+memory.length)ptr=&(memory~=0)[$-1]; switch(*pos){ case '+':++*ptr;break;case '-':--*ptr;break; case '>':++ ptr;break;case '<':-- ptr;break; case '.':dout.write(*ptr);break; case ',':din .read (*ptr);break; case '[':if(!*ptr)pos = bf_jmp(pos+1,1,1);break; case ']':if( *ptr)pos = bf_jmp(pos-1,-1,-1);break; default: } return bf(pos+1,end,ptr,memory); }
わざわざ末尾再帰にするくらいならループでいいんじゃないのか? …などと思う俺は素人ですかそうですか
動けばいいのさ動けば
いやそれは美しくない
>>640 は実務畑でプログラムを覚えた人
>>641 はアカデミックな世界でプログラムを覚えた人。
僕は実務畑でプログラムを覚えた後でアカデミックな環境に行った変な人
だからどっちの言い分も理解できるけど、どっちももう一方をみましょうとだけ言うおじちゃんなの。OTL
あれ? ポインタ値って負の数も許容されるんだっけ?
BFのインデックスのことなら別に禁止はされてないんじゃないの。 たいていの実装ではアボーんしそうだが。
㌧クス。負の数を扱うのはアレだから、とりあえずメモリサイズ 256 にして、回り込むようにしたよ。 .NET の実行ファイル吐き出す奴は出来たから、最適化まで出来たら公開してみるよ。
えらい長いな
, の扱いがおかしい気がする
649 :
646 :2005/10/09(日) 22:37:58
, は Enter で入力された改行コードもしっかり食べるみたい。 CR or LF の文字が出てきたら、それ以外の文字が出るまでループさせたほうが良いのかな?
人が居ないな。 某スレで出てきた、菱形を書き出す BF コード。ちょっと短くなった。 >>>++++++++++[>+>>>++++<<<<<<<+++> > >-]>>>>++<<<<<<<++>++++++ ++>>++++[<<-[>+<<.>-]>>>>+[>+>..<<-]<.<<-[<+<.>>-]>>>>+[>..< <+>-]<<.<-]++++[<<+[>+<<.>-]> > > >-[>+>..<<-]<.<<+[<+<.> >-]> > > >-[>..<<+>-]<<.<-]
すげぇ。
そういえば、ある BF コードが同じ結果を出すコードの中で最短のものであるかどうかって、証明できると思う?
無理
>>652 ・証明できるのもある。
例えば
,.
はこれ以上短くならない事がしらみつぶしで証明できる。
・一般的な証明法はない
あるとすると、問題となっているコードより短いコード全ての
停止性が判定できることになる。
と思ったんだがどうだろう。
「最短であることが証明できない」コードは構成できるかな。
>>654 >・一般的な証明法はない
>あるとすると、問題となっているコードより短いコード全ての
>停止性が判定できることになる。
くあしく
656 :
652 :2005/10/20(木) 18:09:43
[] が無いと、虱潰しで最短であるかどうかが調べられそうな気がします。 この仮定が合っていれば、証明できないコードには最低限 [] が含まれていることになるんですが……。 今回 652 を思ったわけは、 1: メモリ配置の工夫によって <> を削減できる 2: <> の量は計算手順に変化を与えない から、計算手順を固定で考えれば、最短コードであるかどうかが証明できそうな気がしたんです。
657 :
654 :2005/10/20(木) 18:25:20
661 :
652 :2005/10/20(木) 21:11:05
たった今気づいたんだけど、[] の有る無しに関わらず最短コードかどうかの証明は出来るはず。 現在、最短コード候補として有限の長さ L の BF コード A があった場合、 BF の命令数は 8 だから、A より短いコードは有限個で、高々 8 ^ (L - 1) 個。 虱潰しで探せば、いつかは証明できる。 問題は、証明するのに指数時間が必要だということか。 あと , が出現したときに証明がややこしくなるということ。
アルゴリズムを提示する場合それが 有限時間内に終わることが明らかでないといけない。 +[] +[.] +[+-] ... が"hello, world"を出力しないことをどうやって検証するの? みりゃわかるってのは無しねw
>>661 そのためには、全ての長さ(L-1)以下のコードBについて、
「AとBは異なる結果を出す」
事を証明しないといけないが、それはどうする?
664 :
652 :2005/10/20(木) 21:22:51
665 :
652 :2005/10/20(木) 21:24:29
おけおけ。確かに結果が異なるかどうかを判別する方法についても議論する必要があったか。
>>662 +[] → ループ開始時にカレントポインタが非 0、かつループ内でメモリの値が変化しない → 停止しない
+[.] → 同じく
+[+-] → 同じく
... → 同じ値を3回出力している。"hello, world" にこの並びは無い。(けどこの判定の自動化は無理そう)
つまり、本質的には停止性問題なので、最短判定はできないと。
670 :
652 :2005/10/20(木) 23:38:34
う~ん。流石に停止可能性まで考えると難しいなぁ。 とりあえず、<> の削減に関しては、機械的に出来ると思うんだ。 ポインタ移動のグラフかいて、各点の間の適正距離をだして、メモリを再配置。 メモリ多く使うコードになると、これだけで随分減るしと思う。
線形合同法で擬似乱数を先頭から 255 個出力するコードが出来たです。 X(n) = (69 * X(n-1) + 255) mod 256 で、X(0) には 0 を指定の決めうちです。 >++++++++[>++++++++<-]>+++++<<+[>[>>>+<<<-]>>>[<<[<+>>+<-]>[<+>-]>-]<<<-.<+]
>>650 のコードがもう少しだけ短くなった。コツを覚えてきたみたいだ。
> > >++++++++++[>+> > >++++<<<<<<<+++> > >-]> > > >++<<<<<<<++>+
+++++++> >++++++++[<<-[>+<<.>-]>[<+>-]> > >+[>+>..<<-]>[<+>-]<<.
<-]++++++++[<<+[>+<<.>-]>[<+>-]> > >-[>+>..<<-]>[<+>-]<<.<-]
あと、
>>646 をちょっと弄った。文字じゃなくて数値が出る様にコンパイルすることも出来るように。
改行コードの扱いはちょっと考えさせてくれ。
このスレがまだあったのか・・・
まだだ…まだ終わらんよ。頼むよ('A`)
と思ったけどもうだめぽ… +++++[>++++++++<-]>.-.<+++[>+++++++++<-]>-.<++++[>++++++++<-]>-.<+++++++[>--------<-]>+.
指定された文字列を出力するBFコードを出力するソースキボン
>>670 停止問題は、「メモリが無限にある」が前提になっている。
使用メモリを有限にすれば虱潰しでいけるよ。
(実際には時間がかかりすぎるがな)
メモリが無限にあればできるはずのことができなくなったりはしないの?
コードが有限でメモリ使用量も有限であることが保証されていたとしても 停止性が保証されるわけではない。
停止性が保証されるのと 停止するかどうか判断できるというのは だいぶ違うような気が
682 :
sage :2005/11/16(水) 04:02:48
++++[->++++[> >+>++>+++< <++< <-]>++< <]> >++> > > >,<[->-<]>[[-<+< <.< <+> > > > >] < < < <.> > >-[-< < < <--[-> >.> >[->+< <.>]>[-<+>]< < <.<.<]>>.> >[-< <.> >]< <.<.<]]
sage
ふと思ったんだが、brainf*ck同士を戦わせるゲームを作ったら何気に最強じゃねえ? code warsみたいなの?
勝利条件は?
メモリスペースに双方のコードを配置して、 相手のコードを上書きして殺せば勝ちとか。
それだと、相手のコード領域を探して地雷撒くだけになりそうな悪寒。
+[>+] これだけで良いかな?地雷撒くんだとしたら。-1 があったら停止するけど。
>689 おれもそれを最初に考えたけど、それって短すぎるから、相手のコードがすごく長いときに自分が先に殺されて負けない?
691 :
689 :2006/01/02(月) 00:53:39
>>690 いや、相手も1メモリずつの書き換えしか出来ないから、小さいほうが有利かと。
うんうん、結局は地雷を撒かれる前に逃げるか地雷を撒くかの2択戦術になっちゃう。 CoreWarsはfork(?)があるからMiceみたいなコードが書けるけど。
誰も自己複製が最強って言い出さないな('ω`)
Tieraみたいに自己複製と自己書き換えが出来るのが最強。 と思ったら自己書き換えで相手と同じコードになって自爆。
695 :
デフォルトの名無しさん :2006/01/12(木) 19:11:40
>>693 brainfuckじゃ自己複製なんてできないよ
>>696 よく考えたら自己複製しても処理のノベ数が増えるわけじゃないな。
効率むしろ落ちる。orz
自立型じゃないけど、先手 0x00、後手 0xFF で多くメモリを埋めたほうが勝ち。 勝負は500ステップ、戦況を見ながら差し手が1ステップずつ入力してゆく。
潜水艦ゲームだな。
>>698 埋めるってのは、「最後に値を変化させた方」をポイントとするのかな?
つーかなかなか面白そうだな
Brainfuck v.s. Lifeはどっちが強い?
いや、そんなネタ言語と一緒にされても。
>703 ちょwww
この言語ってさ、[] を含まなければ有限長のコードに対して必ず停止することが証明できるんだよね……? 合ってる?
[]以外でループさせる方法がないだろうし、あってるんじゃない?
入力無いから続けられません……ってのは微妙に違うんじゃないか?
そこでライフゲームですよ。
BFで関数呼び出しをエミュレートする方法ある?
俺も知りたいな。 ちょっと考えてみるか。
jmp命令追加しろ
unlambda使えば関数呼び出しなんて一瞬で書けますよ( ´∀`)
書いて~。
`ii
717 :
デフォルトの名無しさん :2006/02/02(木) 05:36:12
魚の骨のスレはここですか?
719 :
デフォルトの名無しさん :2006/02/02(木) 17:52:53
720 :
デフォルトの名無しさん :2006/02/02(木) 17:57:45
要するにマシン語ですか?この言語
722 :
デフォルトの名無しさん :2006/02/04(土) 07:04:25
要するにマシン語の部分空間ですか?
723 :
デフォルトの名無しさん :2006/02/09(木) 15:47:57
もっと議論したまえ
724 :
デフォルトの名無しさん :2006/02/12(日) 14:11:11
+++++とかの表記ってまさか5クロック要するとかいう?
最適化も何もしない BF チップが出来たら言うかもしれない。 プログラミング上は 5 ステップ。
726 :
デフォルトの名無しさん :2006/02/12(日) 15:03:01
BrainFuckでLISP処理系書けるか? 書けないならゴミ
むしろ LISP 信者がゴミ
書けないとしたらチューリング完全では無いということになるよね。 BrainFuckはゴミ。
729 :
デフォルトの名無しさん :2006/02/12(日) 15:41:49
>>725 で、現在最も優れているコンパイラはその最適化処理は施してくれるのかね?
730 :
晒しage :2006/02/12(日) 15:44:15
ネタ言語に何か必死に食いついてる奴がいるな
BrainFuckとLispは目くそ鼻くそっとわけだ。 BrainFuckも出世したものだね。
Wikipediaより。 一見単純な機能しか持たないモデルがチューリング完全である例としては、 5つの基本関数だけをもつ純LISPが挙げられる。 またBrainfuckのモデルなどもそうである。 同じやんか。
あはははww あ~。でも、チューリングマシンの状態遷移集合を直接解釈するインタプリタあったら面白いかもな。 普通にありそうだな。やっぱりつまらん。
並列動作するチューリングマシンアレイがCPUの主流になる日がきっと来ると信じてる
そんで、その動作の様子を何らかの方法で視覚化して観察できたら……。 やべえ欲しい。
>>732 pure pure lisp ... 計算なんかはでぇきないの...
ってな替歌があったのを思い出したよ.
>>702 何とか堪えて読んでいたが最後のHQ9++で吹いたw
>>723 それが、量子コンピューターじゃないっけか?
良子コンピューターってどういうの?
電子とかを、量子的な揺らぎを持った状態のまま保存する。これが量子ビット。 量子ビットを揺らぎを保ったまま接続してやると、これが量子もつれ(だったかな)。 量子もつれ状態のビット群は取りうるすべての状態を確率として持っているので、 問題(条件)を何らかの方法で量子ビット群に与えてやる。 そうすると全ての状態からその条件に対する解のみが選択されて全ビットが現れるはず。 これが量子コンピュータ的演算。 間違ってたらスマソ。
>その条件に対する解のみが選択され なんか魔法みたいだな。
この宇宙が存在していること自体魔法みたいなもんだ。
全ビットを個別に取り出すことはできないよ。 何かうまい方法を使うんだが、ややこしかった。
744 :
デフォルトの名無しさん :2006/02/26(日) 00:28:58
二頭身のメイドさんがメモリ空間をちょこちょこと歩き回りながら処理してくれるBFインタプリタなんて超素敵じゃないか? ステップ実行とかあれば、視覚的に思考できるという意味ではマジ便利かも
↑アホ。 メイドさんは秋葉原行って現実見て来い。
まぁメイドさんはおいといても、 グラフィカルにしたら愛着がわきそうな気はするな。
見てみたかった・・・ 画像だけでもぷりーず
サンキュー!! うっわー、これ可愛すぎ…。
惜しむらくは、ときたまブリンクしなくなったり全速実行できなかったり入力がインタラクティブじゃないな。 #確認してないけど、キャラ画像差し替えでいいから占有面積減ってくれたらもっと嬉しい。
試してないけど、絵とか自分で描いたの?
自分でBrainfuckインタプリタ作ってみたがHello, worldは動いても
>>213-216 のヒットアンドブローとかBf Golfにある奴が動かない・・・
>>755 ネストした[]に対応したか?
[ [ ] ]
>>756 対応したつもりだが動きを追いかけると途中で無限ループにハマってる。
あーねwww
BFネイティブCPUなんか出たら発狂しそうだ
メモリのサイズを4バイトも取ってたのが間違いだった。
むしろBFでBFを定義する
最速のbfインタプリタってどれだろうか
765 :
デフォルトの名無しさん :2006/03/01(水) 11:47:46
当然アセンブリで実装してんだろうな
突き詰めれば、オートマトンの処理速度の限界は メモリのアクセスタイムによって決まる。 だから高速なメモリに直結されたデバイスをドライブできれば 使用言語は何だっていいはず。 具体的には ・普通のCPUでL1キャッシュに全部HITする程小さいデータ(プログラム) ・プログラマブルシェーダでVRAM上でやる まあ前者はその性質上アセンブラか機械語直かそれに近しい言語で記述する必要があるだろうし 後者もスクリプト言語からやれるかというとそうではないだろうけど 「アセンブラだから早い」というのは幻想。
767 :
デフォルトの名無しさん :2006/03/01(水) 13:43:08
深いパイプラインだと遷移がネックになりそうじゃね? シェーダはちょっと違うだろ。状態遷移は基本的にスカラー演算だからベクトル型の演算器には不向き。
不向き以前にシェーダで任意のアドレスのメモリを好き勝手に読み書きできるのか?
シェーダの状態をメモリの内容に対応させて、 プログラムカウンタに対応するトークンを持っているところだけが 状態遷移の権利を持つようにするんだよ。
@を出すだけでこんなに疲れるとは… >>>>>>+[<++[<++[<++[<++[<++[<++>-]>-]>-]>-]>-]>-]<<<<<<.
>>771 そこに至るまで:
・暇だったからJavaScriptでeval無しでインタプリタを実装してみる。
(数字ビュー、文字ビュー、コンプレックスビュー、メモリビューを足してみる)
・スレ冒頭の@を出す部分を見て、2^6 = 64だから再帰的に書けるのではないかと思った。
・PGなりたてだから許して。
773 :
770 :2006/03/03(金) 21:15:03
メモリコピーってこうするしかないんですかね… , [>+>+<<-] (元のを破壊して新たに二つ作る)
掛け算 ,>,<[>[>+>+<<-]>>[>+<-]<[<+>-]<<-]
出力するの忘れてた(^^;) ,>,<[>[>+>+<<-]>>[>+<-]<[<+>-]<<-]>>>>.
入力された位置までのメモリを破壊しながらポインタを移動する。 (ただし移動先まで初期化されていること) ,[[>+<-]>-]< 入力された値から1を引き引きした値の列を表示する ,[[>+<-]>-.]<
777 :
デフォルトの名無しさん :2006/03/10(金) 06:34:04
>>>>>> の代わりに 6> で認識してくれるコンパイラはどこですか?
作れ
なんと面白みのない
ちょっと書いてみたいがGUI作ったことないショボイ俺。
783 :
デフォルトの名無しさん :2006/03/16(木) 07:12:20
BFによるBFソースの文法チェッカというのを思いついたけど 眩暈がしてきて作るのやめた。
文法チェッカったって文法エラーが無いじゃん 「不正な文字です.」くらいじゃね?
括弧の対応もじゃない?
括弧は対応する必要って無いんじゃね?
暴走するっていう結果でもエラーじゃないのか。 ほんとに限りなく低級なマシン語だな(ほめ言葉)
なんと!チューリングマシンの停止問題を解決しよう、と言うのかね?
や、[ が一個しかないコードは暴走するが、これをエラーにするとしても、 他の例はおっしゃるとおり、停止性問題になってしまうから解決不可能だよね。 つまりエラーを定義するアルゴリズムが無い → 暴走してもエラーじゃない。 と思ったのさ。
>[ が一個しかないコードは暴走するが しねーだろ
]が一個しかないコードはどうなるんだろう?
そりゃ実装しだいだけど何も対策してないならテーブルのインデックスエラーじゃないの。
>>646 の人が作ったbfに[だけ入れたら怒られた。
やっぱりエラー扱いらしい。
エラーなら暴走しないか、そりゃあ。
さっき思いついたんだが、 関数呼び出しってループとifで擬似的に実装できるよな?
呼び出し以前にどうやって関数用のコードを配置して元の位置に戻ってくるのかはともかくな
ループの中にifと似たようなブロックを多数設置、 状態遷移用のスタックと、スタックポインタを用意しておいて、 そいつの値によってどのブロックを実行するか決める。 ブロックの終端でスタックをポップして前のブロックのすぐ次に戻る。 「すぐ次に戻ってくる」っていうのが難しそうだが、 できないこともないと思うんだが。
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
Branfuckで書かれたウィルスがあったら面白そうだが、この言語じゃ書けない気がする・・・
ソースコードの圧縮率が高そうだな
ランレングスでも十分縮まりそうだな。
802 :
デフォルトの名無しさん :2006/05/02(火) 21:58:38
ブレインファックって日本語にしたらどういう意味?
ファック、ファック、アーケン!
の~みそこねこね
805 :
デフォルトの名無しさん :2006/05/03(水) 02:26:59
コンパイル
何もかもが懐かしい……
スレタイの[+-]が顔に見えた
コーホー
掛け算できた。
[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++> [-]+++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++> [-]> [-]> [-]> [-]> [-]<<<<<[-<[-> > > > > +<<<<<
]> > > > > [-<<<<<+> > > +> > ]<<[<+> -> > [-]> [-]<<<<[-> > > +>
+<<<<]> > > > [-<<<<+> > > > ]<[[-]<-> ]<+<]<<]?
上記のコードでは、メモリ上の[0]と[1]を掛けて、結果の下位1バイトを[2]に、上位1バイトを[4]に格納。
※[0]はメモリ0バイト目の意味。
計算に使う領域は、バッファを含めて[0]~[6]。
上記のコードは、
[0]=134
[1]=67
を代入後、[0]*[1]の掛け算を実行して、計算結果を
[2]に下位1バイト
[4]に上位1バイト
を格納する。[2]=18,[4]=35となる。答えは8978。
最後の"?"は
>>529 の拡張命令。メモリダンプ。
実行時間かかるね。
Macro BrainFuckマダー?
次は
>>810 のようなイディオムを検出して
直接CPUの乗算を行う最適化インタプリタの開発だw
>>813 それだと直接アセンブラ書いたほうがよくね?
天才現る
>>812 linuxでもコンパイル通ったよ
GCCのバージョンは3.4.4(Gentoo linux)
読みやすくなったら、この言語の存在意義がなくなると思うんだ。僕。
でも書きやすくはなってほしい。 つまり IDE があればいいのか。
[…]のネストを色分けで表示できるとカラフルでハッピーだな
820 :
812 :2006/05/16(火) 21:40:40
>>817 そうですね。
逆にトリッキーなコードが書けなくなって、面白みが減りますね。
実用性もないし。
>>816 コンパイルし直したら、何故かあっさり通りました。
お騒がせしました。
>>817 逆にCやアセンブラをBFに変換できれば、難読化ツールとして面白いかもな
コンパイルして最適化されたら、元のアセンブラになったりしてな…
というか、JMPもサブルーチンコールもスタックも実現できんから、どうにもならんか
アセンブラを遥かに凌駕する難解言語だからな
>822 Hello, World書くのに数年かかったマルボルジェを知らんな? BFなんてはるかに読みやすい。
機械語とどっちが難解ですか?
マルボルジェのほうが難解ですたい……('∀`)
なんかわざとらしく無意味に難解にした言語って好きじゃないな その点BFは、ただ難解っていうより「シンプル」だし
なんかhtmlのへっだ出力が上手くいかない・・・
処理系の中に無理やりhttpヘッダを書き込んで解決・・・ でも、納得いかない・・・
よく見たら#!/usr/local/bin/perl bf.plのドットでASCIIの00の文字(NULL?)を打ってた・・・・orz
Vアプリ版のインタプリタ無い?
>>828 Malbolgeについては、高級言語からMalbolgeへのコンパイラができた、
っていうのを前に聞いたが…
名大っぽい。
持ってるけど、勝手に上げていいもんか。
ありがとう
>>1 のリファレンスが間違ってることに今ごろ気づいた・・・。
ほ…本当だ。
このスレ的には99bottle in bfが1つの命令で書けてしまう HQ9+はどうなの?
>842 >702-704
>>843 thx。
branfuckでインタプリタ作るか
+ +++++++ + + + + +++++++++++ ++ +++++++ + + + + + + +++++++++ +++++++++ + +++ + + + + + ++ + + + + +. + + + + + + +. + + ++. -----------.+++++++++++++.
847 :
デフォルトの名無しさん :2006/09/01(金) 11:04:14
age
この言語に特化したCPU作ったら100Ghzくらい出せんかな。
クロック上がっても同じことをするのに必要な命令数が増えるから意味なすぴ
RISC VS CISC みたいなもんか? 1Thzでたら逆転するかもな。
AからZまで出力する最短コードがわかりません 誰か教えて(`・ω・´) ++++++++[>++++++++<-] +++++[>+.+.+.+.+.<-]>+.
852 :
デフォルトの名無しさん :2006/09/10(日) 07:48:45
>>851 8命令短縮
++++++++[>+++>++++++++<<-]>++[>+.<-]
brainfuckで論理演算ってできるの? まぁできるはずなんだろうけど、どうやってやるのか見当もつかない。
破壊的 and メモリが [入力A][入力B][出力=0] と並んでいるなら [[-]>[[-]>+<]<] 破壊的 or メモリが [入力A][入力B][出力=0] と並んでいるなら [[-]>>+<<]>[-]>+<]< not が難しいな [入力A][出力=0] として [[-]>+<]>- とか
C言語をBrainFuckに変換するライブラリをC言語で作ろうぜ
関数呼び出しとかがどうなるか見ものだな。
論理演算について教えてくれたひとありがとう。 ということは、8ビット数値の論理演算もなんかできそうな気がしてきた。 まだ貼ってくれたコードも読めてないけども。
>>859 それは論理演算ではなくビット演算ではないか?
うお。そうだ。はずかし。
みんな良くこんな言語でコード書けんな。 なんかコツみたいなもんはあんのか?
先にアセンブリかじってると、案外何とかなるもんだったりする(のかもしれない)
2次元BFとかいう考えはどうかな < ポインタを左に移動 > ポインタを右に移動 ^ ポインタを上に移動 v ポインタを下に移動
いやまてよ、ポインタの値を無限次元にして、 メモリに入る値も無限次元にしたら夢がひろがりんぐ
次元の意味わかっててゆーてんか。
>>864 おぬし、BeFunge を知らんな?
むしろ知っているからこそ出てきた考えかも試練が。
ベクトルで移動できる命令も追加してくれ
>>866 もちろん
メモリの各番地に従来のメモリ全部と同等のものがあるようなものを考えて
それ全体がメモリの各番地に並んてる
ただしまあどうせ可算なので無限っていっても
たとえば素因数分解の指数とかって見ることで
普通に一個の整数にできちゃうから
あんま意味ないよなっていうのはその通りだけど
>>867 見てみる
>メモリに入る値も無限次元 のところがわかんなかったんだけど、 つまり無限配列の無限配列の無限配列の……ってことか。 なるほどね。
BFの不便さを体感すると便利なコンピュータがトランジスタやら フリッププロップやらでできてるのが信じられなくなる。
昔は真空管が2m並んだレジスタを手動でパチパチと……。 確かに別物な気がしてくる。
873 :
デフォルトの名無しさん :2006/10/02(月) 06:12:38
C++ の標準アルゴリズムっぽくしたら、ちょっとだけ実用性が無いだろうか? #include <iosfwd> template<typename BidirectionalIterator , typename InputIterator , typename CharType , typename CharTraits > BidirectionalIterator brainfuck(BidirectionalIterator p , InputIterator code_begin, InputIterator code_end , std::basic_ostream<CharType,CharTraits>& out , std::basic_istream<CharType,CharTraits>& in); やっぱり無理か。
そのテンプレート作っていい?w
>>875 いいよ。 ']' 実装しようとしたら InputIterator じゃ無理だな。
s/InputIterator/ForwardIterator でどうぞ。
>>876 ちょっと燃えてきました。(`・ω・´)
878 :
877 :2006/10/09(月) 17:04:43
暇ができたので作ってみた。 メモリの型をint,floatにしてみて、Hello, World!を実行してみたら、 数字ばっかり表示された。 あたりまえか('д`;) もうちょっと抽象化してみる。
だれかアセンブリをBFにコンパイルしる。
アルファベット = BASIC 日本語 = Perl ハングル = BrainFuck
,[.,] ラインバッファの実装に限る
携帯のflashアプリで最近BFしてるが、結局文字表示だけしかできないの? それともPCだと夢が広がるの?
入出力命令が文字しか扱えない
つまり鯖が作れるな。webアプリも作れるな。 うはwwwwwwww夢が広がりんぐwww
特定のメモリ空間をVRAMに割り当てればいい。
VRAMって直接いじれるのか……。 あれ、ああそうか。転送すればいいのか。
難解言語と自称してるくせに制御構造にgotoがないなんてお粗末だな。
何も言いません
889 :
デフォルトの名無しさん :2006/11/10(金) 22:54:39
今日もfuck♪
昨日はいざという時に中折れしてしまい、帰って一人でbrainfuck
891 :
デフォルトの名無しさん :2006/11/14(火) 23:46:23
BFで「自分自身のコードを出力するプログラム」は書けない?
893 :
デフォルトの名無しさん :2006/11/25(土) 02:46:10
たしざん > >>++++++[<++++++++++>-]<+++> >++++++[<++++++++++>-]<+++++.<.<<,.> >> >+++++++ +++. <+.<.<,.> >>.<<[-]>[-]>[-]<++++++[<++++++++>-]<[<<-> >-]>++++++[<++++++++ >-]<[<->-]<<[> >+>+<<<-]> >>[<<<+> >>-]<<[> >+>+<<<-]> >>[<<<+> >>-]<[<+>-]++++ ++[<++++++++>-]>++++++[<++++++++++>-]<+++++> >++++[<++++++++++>-]<+++> >++++++[ <++++++++++>-]<++++++> >++++++[<++++++++++>-]<+<<<.>.>.>.<<<<.
894 :
デフォルトの名無しさん :2006/11/25(土) 19:37:42
BrainFuck から、どうにかして関数を呼び出したい このままでも良いのかもしれないけど、OS 叩けないとまともな物が作れないス(´・ω・`) なんか良い仕様が出来ないものか……
誰か>894を夢から覚ましてやれよ
>>894 たしかにBFは高級すぎるよな
もちろんBoyFriendじゃない
BoyFuckでもない
>>894 BrainFuckでOSから作ればいいのでは?
>>894 自分でBrainFuck環境作って拡張すれば?
x86のLinuxなら、mem[-1..-4]がeax、mem[-5..-8]がebx…と対応を決めておいて、 拡張命令「!」でint $0x80を発生させるとか。
API呼び出しのエスケープシーケンスとかを決めてやればいいんじゃない? 出力データをどう処理するかはOSの管轄なのでBFとしては拡張無しですむ。
BF でプログラムを出力して、それを実行するとか。
com2txtみたいで面白いな。
com2txtみたいで面白いな。
CPLD買ったのでBFを実行できるCPUすぐ作れそうです
モールス信号みたいな言語だな (藁
906 :
デフォルトの名無しさん :2007/01/27(土) 17:33:06
で、??
でっていう
908 :
デフォルトの名無しさん :2007/02/11(日) 17:05:35
age
909 :
デフォルトの名無しさん :2007/04/05(木) 02:11:52
BrainF*ck じゃなくて UnLambda の話題なんですが、v 関数を ski だけで作ろうと思い立ち 何となく `Yk がそれっぽそうな雰囲気なんでとりあえず Y = ^f^p$f^a``$p$p$a^p$f^a``$p$p$a => ``s`kki``s``s`ks``s``s`ks`ki`ki``s`kki``s``s`ks``s``s`ks`ki`ki みたいに Y コンビネータを作って実行してみたんですが、なんか v 関数とは挙動が違いました。 だれか答えかヒント教えてくださいな。
あ、ごめん。変換が違ってたっぽい。よく分からんが。 Y = ``s`kki``s``s`ks`ki`ki``s`kki``s``s`ks`ki`ki けど、これでも違うみたいなんよ……。どこでバカやってんだろ。
912 :
デフォルトの名無しさん :2007/04/06(金) 17:24:30
SK より凄いやつがあった:その名は Iota と Jot
Iota and Jot: the simplest languages?
http://ling.ucsd.edu/~barker/Iota/ どちらも SK を簡素化したやつで2種類のシンボルを並べるだけなんだが、
とくに Jot では{0,1}列を「適当に」並べるだけで「正しい」構文になる、
つまりシンタックスエラーにならない、という仰天の言語仕様だ。
913 :
デフォルトの名無しさん :2007/04/06(金) 21:08:49
やっと
>>1 から読んだが、なかなか面白そうだな。
コレ使って、どんなソフトを作ってくれるか楽しみだ。
誰かに作ってもらうのが前提なのか
自分でやってみないと面白くないよ、と914は申しております。
BFほど実行環境数>>>>ソースコード数な言語はない
917 :
デフォルトの名無しさん :2007/04/08(日) 12:57:19
<[+-]> ,,,,,,,,
918 :
デフォルトの名無しさん :2007/04/08(日) 14:38:59
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. ++.--------------.++++++++.----. ++++++++++.-----------------------------------------------------------------------... +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. .----.--..-----.+.++++++++++++++.++. 後悔は、、、してない。
919 :
デフォルトの名無しさん :2007/04/08(日) 21:34:40
チューリングマシン?
920 :
デフォルトの名無しさん :2007/04/09(月) 02:47:49
ファイル読み込みと、ファイル書き込みと、shell関数相当の命令が欲しいな。 命令の種類が増えると美しくなくなるけど…
標準入出力で良ければ、そこに流し込めばいいのですが。
リダイレクトすればいいじゃない。
><を→←↑↓に変えた2D BrainFuckキボンヌ
上のほうで出てる
unicodeに八卦の文字があるので、 各命令文字を置換して眺めて楽しんでるw
926 :
デフォルトの名無しさん :2007/04/10(火) 13:07:43
コンパイラ探したけどろくなのが無いな。 自分で作ったよ。
もちろんbrainf**kでだよね?
928 :
デフォルトの名無しさん :2007/04/10(火) 13:42:15
929 :
デフォルトの名無しさん :2007/04/10(火) 19:40:07
,>>,<, >>++++++[<<-------->>-] +++++[<-------->-]<--- >+<[[-]>-< <[<->-]> ]>[-< <[<+>-]> >]< <<.
930 :
デフォルトの名無しさん :2007/04/13(金) 14:00:08
何も読まずageるよー
931 :
デフォルトの名無しさん :2007/04/14(土) 18:00:08
+ ; * ☆_+ : , xヾ:、__,..-‐‐:、、,へ.........._ く '´::::::::::::::::ヽ /0:::::::::::::::::::::::', = {o:::::::::(´・ω・)::i みんな待って~ ':,:::::::::::つ:::::::つ = ヽ、__;;;;::/ し"~(__)
>931 わー、ちゃんとAAになってる! それ、どんな命令セットのBF?
それにしてもスレタイはうまいことやったよな どう見てもゲームコントローラだ
はじめてきました 面白そうですね
935 :
デフォルトの名無しさん :2007/04/15(日) 16:02:10
∧ <[+-:;,.]> V 位に増えてもいいと思うな。
>935 その形だと、大量の弾幕吐きそうだな ボム打って発射口に飛び込んでいっぱいbuzzりたい
937 :
デフォルトの名無しさん :2007/04/18(水) 17:57:10
文字すくねぇwww
938 :
デフォルトの名無しさん :2007/04/18(水) 22:45:36
メモリ上に自分自身のソースコードをQuineしてから メモリ上のソースをインタプリタするコードって作れないかな・・・
BF-BFインタプリタはどっかに落ちてるから、それを改造するとかかね。 いや、難しそうだな……。
940 :
938 :2007/04/18(水) 23:39:52
>>939 ネストが増える毎にインタプリタの段数が増える再帰関数が作ってみたかったのだが
素直に(もう少し)高級言語で書いた方が楽かな?
aa f**k
http://up.spawn.jp/file/up15900.txt.html C++
sumomomo f**k
、すもも :>
。すもも :<
すもも :+
!すもも :-
のうち!すもも :.
のうち?すもも :,
のうちすもも :[
のうち。すもも :]
も 直前の命令と同じ命令に置換される
このコード体系で書くプログラムは+から始める事を推奨。
hello worldは略
ところで、同一メモリアドレスにBFコードとメモリを置きたいのなら
プログラムコード、ヌル文字、(普通のBFで言う)メモリの先頭アドレス、
の順に配置すれば良いんじゃね?ヌル文字を実行した時点で終了、とすれば
既存のコードも問題なく動くし。
<<[<]>[.>]\0Hello, World!\n
プログラム中に文字列リテラルを仕込めるのは反則っぽいがw
>>629-646 のような実装なら、ヌルとか持ってこなくても単に ] でプログラムの終了ができるね
942 :
938 :2007/04/19(木) 00:21:51
自己書き換え可能にするとコード中の[]が動的に書き換えられる可能性があるから スタックに積んでおく手法は残念ながら使えない。 あと、さっきの発言の「C++」は、C++のソースコードとして直接仕込むようにした、 と言いたかっただけだからあまり気にしないでくれ。
なんか良くわかんないや。 interpretする言語とされる言語をはっきり明記してくれんと……。 俺は最初両方BFと思ったけど、C++出てきたからどうやら違うようだし。
944 :
938 :2007/04/19(木) 01:30:22
BFでメモリ上にQuine→メモリ内をBFでインタプリタ、 というプログラムを書けば後は無限に多段インタプリタを行うようになるな、 と思ったのだが、プログラムカウンタとポインタを管理するための領域が必要だから 2バイトに1命令という配置になっていなければインタプリタ出来ないようだ。 しかし、メモリ上にQuineするのって標準出力と比べて遥かに難しいな・・・ 「C++」はただのaa f**kの説明・・・を書く途中で送信しただけ
インタプリタは道具の名前だろうが。
946 :
デフォルトの名無しさん :2007/04/20(金) 18:53:03
学校の休み時間中ノートの上で脳内インタプリタ働かせて Brainfuckやってたんだが、 友達に「なにやってんのー?」って聞かれたから 「Brainfuck」って言ったら結構引かれた。 ってわけで、Brainfuckのかっこいい和名考えない?
「脳姦」以外に考えられない!
パズルやってるっていえばいいのに
脑奸 (nao3 jian1)
953 :
デフォルトの名無しさん :2007/04/20(金) 21:59:46
C-
のーみそこねこね。
957 :
デフォルトの名無しさん :2007/04/22(日) 08:30:33
>>956 もうとっくに消えてるorz
もうしわけないが、再うpしてくれないか。
>>958 ありがとうございます!
さっそく居ただきました!
960 :
デフォルトの名無しさん :2007/04/22(日) 16:30:20
Brainfuck追加文字 : 画像のロード ; ロードして画像を出力 例)>:"img\\test.bmp"; > ・・・ メモリ{1}に移動して :"img\\tets.bmp" ・・・ imgフォルダのtest.bmpを読み込む このとき、test.bmpがnバイトとすると、{1}~{n-1}は画像に占領される。 {n}は、画像終了を意味する文字が入る ; ・・・ {1}から{n-1}までの画像データを出力
961 :
デフォルトの名無しさん :2007/04/22(日) 17:14:37
>>946 八則程序編制
八つで組むプログラミングみたいな意味
962 :
,+[-.,+] :2007/04/22(日) 18:06:52
ポインターゴルフ ポインターをこつこつ叩いて、ゴールまで持ってく感じ
>>958 頂きました。
俺もJavaScript実装書いてるのでパクらせ、、、参考にさせてて頂きますw
964 :
デフォルトの名無しさん :2007/04/23(月) 19:25:52
Brainfuck→脳姦→のうかん→脳幹 脳幹 電脳の中でメモリーをこつこつ叩いて、ゴールまで持ってく感じ
ゆとり「のう・・・・・・かん・・・?」
966 :
デフォルトの名無しさん :2007/04/24(火) 17:29:05
ノーコンみたいやね
967 :
デフォルトの名無しさん :2007/04/25(水) 18:20:54
もし次スレを立てるようなことがあるなら、スレタイの< >には注意な < >で
コンパイラやインタプリタばっかり出てコードが出てこない(´・ω・`)
それがこの言語の本質でもあるからな
>>969 付属のhello.bfで試したけど上手くいかないな。
次スレ案 Brainfuck +++++++[>+++++++<-]>+. コピペ用 Brainfuck +++++++[>+++++++<-]>+.
もう少しリーダブルにしろよw ここは品悪く <[+-.,]>BrainFuck 2回戦目 で
いくらなんでも板の風習を無視しすぎ
どんな風習だよ
別に意味あるプログラムにする必要はないじゃん 変に凝ろうとしたり、書き方を変える(Vol.X→X巻 等)のもわかりづらい。 今のスレの次スレということがわかるタイトルにすればよろし。
>>975 全コマンドを列挙してあるんじゃん。
>>973 みたいなのがスレタイにあるほうが嫌やわ。
【<[+-.,]>】Brainfuck【+++++++[>+++++++<-]>+.】
>>980 なんという複合スレタイ…
どう見ても両方の悪いところしか残っていない…
BrainFuck 2 <[+-.,]> でいいじゃん
Brainfuckの文字列があればあとはなんでも良いよ。
984 :
デフォルトの名無しさん :2007/04/30(月) 17:25:30
じゃあ次スレはBF拡張について話そうか。
拡張したらもはやBrainfuckとは言えないのだよ
988 :
969 :2007/04/30(月) 20:40:24
Brainf**ck
>>988 helloworldが
0=DDGSGOGJD<H
とか吐いたんだがこれはなんだ
最近知ったんだけど、これ面白いね まだよく理解できてないけどorz
抽象化した結果表現されるものは、設計者が想定した概念やイメージだ。しかし、 実在するものそのものではなく、人が考えたものであるために、このイメージは 非常に脆く、不安定だ。外部からの影響をもろに受け、形を変え易い。個々人が 持つイメージの些細な相違から認識のずれが生じ易い。扇風機の使い方は人に よって異なることはないが、人がイメージしたものは、その生成から、破棄に至る まで、非常に不安定な状態になり易い。それを防ぐには、イメージそのものをなる べく強固なものにし、インターフェースに一貫性と整合性をもたせ、外因による影響 を受けに難くく、壊れ難くするための技術を見につけ、理解を深めておくしかない。 仮想化とは対象物を不完全ながらもその性質や姿を模倣し現出させることだ。 対して抽象化は、対象物のある特徴的な側面を抽出し概念化することだ。 仮想化で抽象化の技術が使われることはあるだろうが、その逆は考え難い。 コンピュータを使い、扇風機やコタツを抽象化することはできても、仮想化する ことはできないのだ。少なくとも今の技術では無理だ。コンピュータがその姿形 を変えることはできないのだから。コンピュータが仮想化できるものは、コンピュー タそのものが直接扱うものだけだ。例えば、仮想メモリ、仮想ネットワーク、仮想 マシン、仮想キーボードといったものだ。
>992 「BrainFuck状態な人の発言」なら、ちゃんとBFのコードで語るハズだ
とりあえず、日本語喋れるBFに拡張しようぜ。
995 :
デフォルトの名無しさん :2007/05/01(火) 11:38:53
BFで書かれたBFコンパイラとかよくあるけどあれの使い方が分かんない
996 :
デフォルトの名無しさん :2007/05/01(火) 11:57:44
999ならナナリンはオレ(ンジ)のもの
997 :
デフォルトの名無しさん :2007/05/01(火) 11:59:23
999なら(戦艦)長門は俺の嫁
>>995 そのBFコンパイラを別のコンパイラでコンパイルして、標準入力からBFコードを食わせるんだ。
1000ならみんなでたのしくBrainfuck
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。