君ならどう書く 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("*");}
と思ったけどこのへんで飽きた。