四六時中IYH このページをアンテナに追加 RSSフィード

2007-05-08

お勉強

ラムダ計算を学ぼうとしたら

            ___
       /      \
      /ノ  \   u. \ !?
    / (●)  (●)    \
    |   (__人__)    u.   |
     \ u.` ⌒´      /
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


         ____
       /      \!??
      /  u   ノ  \
    /      u (●)  \
    |         (__人__)|
     \    u   .` ⌒/
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

ってな感じになった。

基礎知識がすっ飛んでる。

FizzBuzz問題

寝る前にこんな物を見つけた。

はてなブックマーク - どうしてプログラマに・・・プログラムが書けないのか

とりあえずCで普通に書いたら

 for(int i=1;i<101;i++){
  if(i%3==0) printf("Fizz");
  if(i%5==0) printf("Buzz");
  if(i%3&&i%5) printf("%d",i);
  puts("");
 }

で、変態的に書いたら

 int c=0x30490610,d=c,e;
 for(int i=1;i<101;i++){
  e=d&3;
  if(e&1) printf("Fizz");
  if(e&2) printf("Buzz");
  if(!e) printf("%d",i);
  if(e==3) d=c;
  else d>>=2;
  puts("");
 }

まぁ長くて意味無いけど。

anarchy golf - FizzBuzz」の所で最短コードランクが載っているんだがCで73byteってどうやるんだろう?

int main(){for(int i=1;i<101;i++){if(i%3==0)printf("Fizz");if(i%5==0)printf("Buzz");if(i%3&&i%5)printf("%d",i);puts("");}}

で122byteだしなぁ。

追記:

 for(int i=1;i<101;i++){
  printf(i%3?"%s":"Fizz%s",i%5?"":"Buzz");
  if(i%3&&i%5) printf("%d",i);
  puts("");
 }

って出来るか。そうすると、

int main(){for(int i=1;i<101;i++){printf(i%3?"%s":"Fizz%s",i%5?"":"Buzz");if(i%3&&i%5)printf("%d",i);puts("");}}

で112byte。まだまだ遠い。

FizzBuzz問題 続き」に続く