« brainf*ck で計算機 | メイン | DNS ラウンドロビンと高可用性 (High Availability) »
2006年06月28日
brainf*ck でマジメに素数探索
「キミならどう書く 2.0 - ROUND 1 - 」の〆切は過ぎていますが、逃避力を発揮して brainf*ck で書いてみました。
竹迫さんのものとは違い、brainf*ck で素数探索を行っています。でも brute force なアルゴリズムなので遅いです (笑)
>++++[<++++++++>-] // 0 pm2 = ' '
>+++++++[<++++++++>-]<+>+++++++++> // 1 pm1 = '9' p0 = 9
>++++++++++[<++++++++++>-]<-- // 1 p1= 98 p2 = 0
[
>[-]<[->+>+<<]>>[-<<+>>]<- // 2 p2 = p1 m 1
[
>[-]<<[->>+>+<<<]>>>[-<<<+>>>]<+ // 3 p3 = p1 p 1 p4 = 0
[
>>[-]>[-]<<[>+>+<<-]>>[<<+>>-]< // 5 p5 = p4 p6 = 0
>[-]+<[>-<[-]]>[-< // 5 if (p5 == 0) then
<<<[->>+>>+<<<<]>>>>[-<<<<+>>>>]<<+> // 5 p4 = p2 p 1
>]<
<- // 4 p4 m= 1
<- // 3 p3 m= 1
]
> >[-]+<[[-]>-< ]>[-< // 4 if (p4 == 0) then
>>[-]+<< // 4 p6 = 1
<<[-]+>> // 4 p2 = 1
>]<
<<- // 2 p2 m= 1
]
>>>> >[-]+<[[-]>-< ]>[-< // 6 if (p6 == 0) then
<<<<<<<.> // 0 print pm1
>>[-]++++++[<<++++++++>>-] // 2 p2 = 0 p0 p= 48
<<.>> // 2 print p0
++++++[<<-------->>-] // 2 p2 = 0 p0 m= 48
<<<<.>>>>>>>> // 6 print pm2
>]<
<<<<<- // 1 p1 m= 1
>>[-]<<<[->>+>+<<<]>>>[-<<<+>>>]< // 2 p2 = p0 p3 = 0
>+<[[-]>-< // 2 if (p2 == 0) then
<<->> // 2 p0 m= 1
]>[-< // 2 else
<<+++++++++ // 0 p0 p= 9
<->>> // 2 pm1 m= 1
>]<
< // 1
]
これで 456 バイトです注。特にコードサイズの最適化はしていません。
また、速度の最適化もしていないので、実行にあたっては高速な処理系をご用意ください。試した範囲では、BF online では10秒ほどで結果が表示されましたが、弾さんの処理系では、1分たっても終わらないような感じです。
それでは、 Have fun!
注: 手で数えたので違うかも
投稿者 kazuho : 2006年06月28日 17:12
トラックバック
このエントリーのトラックバックURL:
https://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/667
このリストは、次のエントリーを参照しています: brainf*ck でマジメに素数探索:
» brainfu.k - BF2JS opimizing compiler from 404 Blog Not Found
BFにはまっておられる奥さんに。
Kazuho@Cybozu Labs: brainf*ck でマジメに素数探索
また、速度の最適化もしていないので、... [続きを読む]
トラックバック時刻: 2006年07月04日 08:21
コメント
Language::BF で
Perlでコンパイル実行
> /usr/bin/time perl -Ilib t/prime.pl
> 97 89 83 79 73 71 67 61 59 53 47 43 41 37 31 29 23 19 17 13 11 07 05 03 02
> 18.23 real 17.85 user 0.08 sys
C に変換
>/usr/bin/time ./a.out
>97 89 83 79 73 71 67 61 59 53 47 43 41 37 31 29 23 19 17 13 11 07 05 03 02
> 0.39 real 0.38 user 0.00 sys
でした。compilerでこれですから、interpreterでは遅いのも納得。
Dan the Brainfu.ker
投稿者 弾 : 2006年06月28日 18:35
> compilerでこれですから、interpreterでは遅いのも納得。
ありがとうございます。コンパイラでもこれだけかかるのですね。
アルゴリズムと bf の冗長性、両方のせいでしょうか (^^;
投稿者 kazuho : 2006年06月28日 20:53