タグ

ブックマーク / mametter.hatenablog.com (4)

  • 放射線耐性 Quine (1 文字消しても動く Quine) - まめめも

    ref: https://github.com/mame/radiation-hardened-quine 放射線はメモリエラーを引き起こすらしいです。そんな放射線が飛び交う過酷な環境でも、できることなら Quine したい。 ということで、プログラム内の 1 文字をランダムに消しても元のプログラムを出力する、なんともロバストな Quine を書きました。*1 何を言っているかわからないと思いますが、こんなふうに動くものです。 # ランダムに 1 文字消すスクリプト $ cat mutate.rb src = $<.read src[rand(src.size), 1] = "" print src # rrquine.rb からランダムに 1 文字消したプログラムを生成する $ ruby mutate.rb rrquine.rb > broken.rb # 壊れたプログラムを実行する (

    放射線耐性 Quine (1 文字消しても動く Quine) - まめめも
  • quine リレー - まめめも

    Update (2013-07-15): I improved this program to 50-language version. 50 言語版にパワーアップさせました。 これはこのプログラム自身を出力する Unlambda プログラム、を出力する Whitespace プログラム、を出力する brainfuck プログラム、を出力する Java プログラム、を出力する C プログラム、を出力する Haskell プログラム、を出力する OCaml プログラム、を出力する Lua プログラム、を出力する Perl プログラム、を出力する Python プログラム、を出力する Ruby プログラム、です。 # ruby l=92.chr;eval s="s=s.dump[r=1..-2].gsub(/("+l*4+"){4,}(?!\")/){|t|'\"+l*%d+\"'%(t .s

    quine リレー - まめめも
  • Re: "どちらでもいい" - まめめも

    ref: http://www.kmonos.net/wlog/96.html#_2319090427 C 言語ならすでに書けますよね。100 年後の C コンパイラならきっと最適化してくれる。 void toss(int x, int y) { } int head(int *p) { *p = 1; return 0; } int tail(int *p) { *p = 0; return 0; } int cointoss(void) { int n; toss(head(&n), tail(&n)); return n; } int where_is_the_max_element(int *arr, int len) { int i, max_i = 0; for (i = 1; i < len; ++i) if (arr[max_i] < arr[i] || (arr[max_

    Re: "どちらでもいい" - まめめも
    rawwell
    rawwell 2009/05/27
    "ただ、これで本当に cointoss() が 0 か 1 を返すと保証されるかどうかはよくわからないし確かめてない。sequence point がどうのこうの?"
  • eval の速度比較 - まめめも

    ruby 1.9 は ruby 1.8 より eval が 3 倍くらい遅いというのは有名 (?) な話です。では、他の LL と比べてどうなんだろうと思ったので、比較をしてみました。 "1" を 100000 回 eval する eval の前処理と後処理にかかる時間の比較。 ruby 1.8 (trunk) : 0.22 sec ruby 1.9 (trunk) : 0.82 sec perl 5.10 : 1.23 sec python 3.0rc1 : 1.83 sec php 5.3 alpha 2 : N/A (> 180 sec)この結果だけみると、ruby 1.9 の eval はそれでも速い方に見えます *1 。 それはともかく PHP が激遅なんですが、どうも eval を繰り返し呼ぶと、なぜか呼んだ回数以上にどんどん遅くなる (O(n^3) くらい?) ので、意味のあ

    eval の速度比較 - まめめも
  • 1