X



BrainFuck Part.3 <[+-.,]>
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
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/
0491デフォルトの名無しさん
垢版 |
2013/01/22(火) 23:39:43.75
変形版Brainfuck

ジャンプ先のプログラムカウンタの値を記憶するためのスタックを用意しておく

  > ポインタをインクリメント
  < ポインタをデクリメント
  + ポインタが示すメモリ位置のデータをインクリメント
  - ポインタが示すメモリ位置のデータをデクリメント
  . ポインタが示すメモリ位置のデータを出力
  , ポインタが示すメモリ位置のデータに入力
  * 現在のプログラムカウンタの値をスタックに入れる
  / ポインタが示すメモリ位置のデータがヌルでなければ、スタックから取り出した値までジャンプ
   ヌルならばスタックから値を抜き去り、次の命令にジャンプ


本家BFの場合は対応する括弧を調べる作業が必要だが変形版だとその必要はない
そのかわり後方へのジャンプはできないが、原理的には本家と同じくチューリング完全(…だと思う)
0497デフォルトの名無しさん
垢版 |
2013/05/05(日) 21:43:34.84
いっそのこと膨大な糖衣構文を作ったほうがいいかと
0499デフォルトの名無しさん
垢版 |
2013/05/05(日) 21:55:07.84
(>)|(>>)
1つ後の値と二つ後の値のビット論理和を現在の場所に代入

(>)||(>>)
ビット論理和じゃなくて普通の論理和
0501デフォルトの名無しさん
垢版 |
2013/05/05(日) 22:00:24.43
((>)|(>>))|((<<)|(<))
1つ後の値と二つ後の値のビット論理和と
2つ前の値と一つ前の値のビット論理和の
ビット論理和を現在の場所に代入
0506デフォルトの名無しさん
垢版 |
2013/05/06(月) 00:41:08.24
メモリフィールドが階層的になってて
特定の番地を全ての階層で同期とかできると楽しそう
0507デフォルトの名無しさん
垢版 |
2013/05/06(月) 08:26:09.23
オブジェクト指向のBrainFuckとか作れないかな?
0516デフォルトの名無しさん
垢版 |
2013/05/11(土) 01:48:40.71
文字入力は入力された一文字をポインタが指すメモリに代入するだけだろ
文字列を入力しているのは処理系がバッファを使ってるだけなんでは
0517デフォルトの名無しさん
垢版 |
2013/05/11(土) 20:01:40.22
>>515
最後は「>.」じゃないかな
あと、文字数が256以上の時と、マルチバイト文字を含む場合にも対応できるようにしたいね
0519デフォルトの名無しさん
垢版 |
2013/05/28(火) 21:10:00.01
+[+]

こんなんでいいの?
0520デフォルトの名無しさん
垢版 |
2013/05/28(火) 23:01:12.42
文字入力は呼び出し側の責任としても
ループ回数はコード内に書かれるべき…じゃないのか
0521デフォルトの名無しさん
垢版 |
2013/11/07(木) 04:13:05.65
BFのコンパイラ書いているのですが、最適化の議論ってどこかにありますか。
思いついて実装したのは、
@連続する+-や<>をまとめる(これは自明。>>>>> をadd r0, #5 にするとか)
Aメモリからレジスタに値をロード済みかを覚えておいてロード命令を減らす
です。
考えているだけのは、ループの頭でポインタの位置が不変かを判断し、ポインタの移動範囲を検出して、レジスタに割り当てるというものです。
例えば[>+<-]のようなループの場合、ポインタは当初の値(0)と次の値(+1)にしか移動しないので、これらの指すデータをレジスタに割り当て、
ループ脱出時にメモリに書き戻してやればいいかなと考えています。

動的コード生成をしているので軽い処理がいいのですがそうでないのも知りたいです。
対象CPUはARMで、使用マシンはなぜかHP50gっていうグラフ電卓です。
0523デフォルトの名無しさん
垢版 |
2013/11/07(木) 12:45:19.07
いっそC++へのトランスレータにして、後はC++コンパイラの最適化に任せるのはどうだろう。
0524デフォルトの名無しさん
垢版 |
2013/11/07(木) 13:18:00.81
>522 アイデアが出たらぜひ教えて下さい。
>523 それって既にあるのでは。BFでプログラムするのと同様でパズルみたいなものと思ってください。

[>+<-]をコンパイルした実行命令数(N=ループ回数)
@素朴版 12N+3
Aロード最適化 11N+3
B>+< を最適化 9N+3
Cレジスタ最適化 5N+6
D手動コンパイル 4N+6

詳細は、
http://pastebin.com/pk8fST8h

レジスタ割当:
r0: 汎用
r1: ポインタ
r2: [r1, #1]
Aはr0と[r1]がエイリアスになっているかを覚えてロード命令を削減
Bは>+<のようなパターンでポインタのinc/decを省く。
CはAに加えてr2と[r1,#1]をエイリアスにする。
Dは自動化は考えずに手でガリガリ記述
0525524
垢版 |
2013/11/07(木) 15:18:20.89
脳内コンパイラがこんなコードを生成しました。
ローカルな最適化では定数部を除いてこれ以上は無理そうですね。
ldrb r0, [r1]
ldrb r2, [r1, #1]
cmp r0, r0, #1
b l1
l0:
add r2, #1
subs r0, #1
l1:
bne l0
strb r0, [r1]
strb r2, [r1, #1]
実行命令数 7 + 3N

本来なら、
ldrb r0, [r1]
ldrb r2, [r1, #1]
add r2, r0
strb r2, [r1, #1]
mov r0, #0
strb r0, [r1]
実行命令数 6
とか定数命令でできるのですが、、、
0526名無し募集中。。。
垢版 |
2014/06/08(日) 09:57:05.09ID:TcDR/+bL
万能言語ならぬ全能言語

world* CreateWorld (darkness* Darkness) {
world* World = new World(Darkness);
World->Day = 1;
light* Light = CreateLight();
if (isGood(Light)) add(World, Light);
else throw BadCreation(Light);
Light->Name = "Day";
Darkness->Name = "Night";
++(World->Day); // World->Day = 2

/* 中略 */

bone* AdamsRib = (Adam->Rib[12])->Remove();
woman* Eve = CreateWoman(AdamsRib);
Eve->Name = "Eve";
add(World, Eve);
++(World->Day); // World->Day = 7
World->Sabbath->Interval = 7;
rest();
return World;
}
0530デフォルトの名無しさん
垢版 |
2014/06/20(金) 07:05:56.84ID:ha/mjnLs
BFオワタ・・・
http://pc.watch.impress.co.jp/docs/news/yajiuma/20140620_654252.html

IT'S SHOWTIME
HEY CHRISTMAS TREE isLessThan10
YOU SET US UP @NO PROBLEMO
HEY CHRISTMAS TREE n
YOU SET US UP 0
STICK AROUND isLessThan10
GET TO THE CHOPPER n
HERE IS MY INVITATION n
GET UP 1
ENOUGH TALK
TALK TO THE HAND n
GET TO THE CHOPPER isLessThan10
HERE IS MY INVITATION 10
LET OFF SOME STEAM BENNET n
ENOUGH TALK
CHILL
YOU HAVE BEEN TERMINATED
0533デフォルトの名無しさん
垢版 |
2016/03/09(水) 22:33:27.65ID:m6u1yQ86
,
 [eax,ebx,ecx,edx,esi,edi][*ptr&0x0f] = ptr[1] if *ptr>>4==0
 ptr[1] = [eax,ebx,ecx,edx,esi,edi][*ptr&0x0f] if *ptr>>4==1
 in eax, ptr[1] if *ptr>>4==2
...


みたいな感じでいけそう
0534デフォルトの名無しさん
垢版 |
2016/03/29(火) 09:32:40.37ID:/c8bAcK4
サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
0535デフォルトの名無しさん
垢版 |
2016/08/07(日) 17:02:49.48ID:sg2m+nAp
>>1
0537デフォルトの名無しさん
垢版 |
2018/05/23(水) 23:01:23.24ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

67IJR
0538デフォルトの名無しさん
垢版 |
2018/07/04(水) 23:06:42.04ID:gFgZc5FG
2Q3
■ このスレッドは過去ログ倉庫に格納されています

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