君ならどう書く 2.0 - ROUND 3 -

LL Ring が近いからやりました。

http://ll.jus.or.jp/2006/blog/doukaku3

をまぁさっくりと LL で。

i,j,m;main(c,v){char**p=v;for(;++i<c;)m=m>atoi(p[i])?m:atoi(p[i]);for(;++j<c;puts(""))for(i=20*atoi(p[j])/m;i--;)printf("*");}

5分ほどですらすらと。5分かかった時点で LL じゃねーんじゃないかとか思いつつ。とにかく。言いたいことは、ショートコードには LLC のヒントがあるような気がしたというか。

  • C には型推論がある。型のない宣言は int に推論されます!しかも右辺値なくてもいいんですよ。
  • 空白が全くない。インデントの制限だのはワンライナーの敵ですが、Cで空白が必要なことはまずありません。
  • .bss に置いたものは初期値 0 が入ってる。 i=0 とかを省略できます。
  • 後置 ++ が異様に便利。副作用を伴ってて、演算対象とは別な値を返す関数というのは思いの他便利。スタックの pop で pop した値を受けつつスタックを縮めるような感覚。
  • マクロ使わない限り include なんて無くていいです
  • argv の型は int です

でもまぁ見るからに長いので短くしよう。

i,m;main(c,v){int*p=v;for(;++i<c;m=m>v?m:v)v=atoi(p[i]);for(;--c;puts(""))for(i=20*atoi(*++p)/m;i--;)printf("*");}

と思ったけどこのへんで飽きた。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h