週1でも日記

  • このサイトに書かれていることは間違っているかもしれませんので、ご注意ください。
  • 非推奨環境: フォントの大きさが Unreadable な xterm 上のテキストブラウザ
2005][07][08][09][10][11][12][
2006][01][02][03][04][05][06][07][08][09][10][11][12][
2007][01][02][03][04][05][06][07][08][09][10][11][12][
2008][01][02][03][04][05][06][07][08][09][10][11][12][
2009][01][02][03][04][05][06][07][08][09][10][11][12][
2010][01][02][03][04][05][06][07][08][09][10][11][12][
2011][01][02][03][04][05][06][07][08][09][10][11][12][
2012][01][02][03][04][05][06][07][08][09][10][11][12][
2013][01][02][03][04][05][06][07][08][09][10][11][12][
2014][01][02][03][04][05][06][07][08][09][10][11][12][
2015][01][02][03][04][05][06][07][08][09][10][11][12][
2016][01][02][03][04][05][06][07][08][09][10][11][12][
2017][01][02][03][04][05][06][07][08][

2007年18週129日星期3 12:00:00 AM 00:00:00

one liner の訳語が一行野郎なのが気に入らない 20:47 one liner の訳語が一行野郎なのが気に入らないを含むブックマーク

せいぜい数十文字の情報しかないのに野郎なんて人間ぶった顔しやがって、手前なんぞよりウイルスの方がはるかに情報量が多いじゃねえか、この一行野郎が、と思う訳です。

でもそれは私が one liner に人格を感じられないことに問題があるのだと思います。one liner を一行野郎と呼ぶ人たちは、きっと one liner に人格があるように感じているのだろうと思います。そういう人たちにとっては、一つ一つの one liner が、熱血だったり冷酷だったりツンデレだったり素直クールだったり攻めだったり受けだったり剛毅果断だったり優柔不断だったり派手だったり地味だったりそんな一つの形容詞では語れない複雑な性格であるように感じていて、それぞれが特別なオンリーワンなんだろうなと思います。

この頃はやりの FizzBuzz 20:47 この頃はやりの FizzBuzzを含むブックマーク

anarchy golf の FizzBuzz の話です。

はてなブックマーク - yshlのマーキング痕 - 2007年5月8日 に書いた

echo '#include<stdio.h>\nint n;int main(){for(;++n<101;)printf("%.d%s%s\\n",n%3*n%5?n:0,n%3?"":"Fizz",n%5?"":"Buzz");return 0;}'|gcc -Wall -x c -;./a.out

は(ゴルフ的に)余計なものを除くと

n;main(){
    for(;++n<101;)
        printf("%.d%s%s\n",n%3*n%5?n:0,n%3?"":"Fizz",n%5?"":"Buzz");
}

の 84 byte で、現在の C の 1 位の 73 byte より 11 byte も多い訳です。これを(ふぃづばづ - Cozy Ozy を参考にしないで)どうにか縮めたいのですが、剰余 4 回が多いような気がするので減らしてみます。

n;main(){
    for(;++n<101;)
        printf(n%3?"\n%s":"\nFizz%s",n%5?"":"Buzz")-1||printf("%d",n);
}

剰余 2 回で 86 byte。長くなってしまった。あと、最初に余計な改行がついてしまうので不合格。で、何故か目的が剰余を減らす方向にすりかわってこんなものを書いてしまう。

main(n){
    goto A;
    while(n<101){
        printf("%d\nFizz\n",n);n+=2;
        printf("%d\n",n++);
        printf("%d\nFizzBuzz\n",n);n+=2;
A:
        printf("%d\n",n++);
        printf("%d\nFizz\n",n);n+=2;
        printf("%d\nBuzz\nFizz\n",n);n+=3;
        printf("%d\n",n++);
        printf("%d\nFizz\nBuzz\n",n);n+=3;
    }
}

ちなみに 245 byte*1

あと PostScript の 1 位の 51 byte にようやく追いついたのですが、Statistics が違うのが気になります。私のは

1 1 100{dup 5 mod 0 eq 1 index 3 mod 0 eq{(Fizz)print/ exch}if{/Buzz}if =}for

バイナリ化したものです。また差をつけられました。

TCC 21:49 TCCを含むブックマーク

Tiny C Compiler (version 0.9.23) って文字列リテラルのなかに改行をそのまま書いてもコンパイルが通るのか。

#include<stdio.h>
int main(){
    puts("Hello, world!
You are welcome!");
    return 0;
}

*1:もちろん n;main(i,j){for(j=1;++n<101;i=i-2?i+1:0,j=j-4?j+1:0)printf("%.d%s%s\n",i*j?n:0,i?"":"Fizz",j?"":"Buzz");} などとした方が短い

2005)(07)(08)(09)(10)(11)(12)(
2006)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2007)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2008)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2009)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2010)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2011)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2012)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2013)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2014)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2015)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2016)(01)(02)(03)(04)(05)(06)(07)(08)(09)(10)(11)(12)(
2017)(01)(02)(03)(04)(05)(06)(07)(08)(
388831