はじめに
こちらのpaiza×Qiita記事投稿キャンペーンのCランク問題を、コードゴルフの要領で最小文字数で解答することを目指しました。
言語はJavaScriptです。
他のランクはこちら
多分これが一番短いと思います
宝くじ
process.stdin.some(l=>{[a,b,...c]=(0+l).trim().split`
`;c.map(d=>{d-=a;console.log(d?~d&&d-1?d%1e4?d%1e3?"blank":"third":"second":"adjacent":"first")})})
153文字
0+l
で入力された数字を数値の配列に変換。
jsでは0がfalse扱いされることを利用し、三項演算子で色々と処理しています。
まず、それぞれの宝くじ番号(d)から当選番号(a)を引き、以下を確認しています。
- 0のとき:1等
- ビット反転して0(d=-1)か1引いて0(d=1)のとき:前後賞
- 10000(1e4)で割った余りが0のとき:2等
- 1000(1e3)で割った余りが0のとき:3等
- その他:はずれ
野球の審判
s="strike";t="ball";u=v=3;process.stdin.some(l=>{[a,...b]=(0+l).split`
`;b.map(c=>c&&console.log((c==s?--u?s:"out":v--?t:"four"+t)+"!"))})
138文字
uが0になったらout!
、vが0になったらfourball!
を出力します。
bの最後には空白文字列が来るので、それをc&&
で弾いています。
みかんの仕分け
process.stdin.some(l=>{[a,...b]=(l+"").split`
`;a=a.split` `[0];b.map(c=>c&&console.log(a*Math.round(c/a)||a))})
112文字
a*Math.round(c/a)が0の時はaを出力します。
Fizz Buzz
process.stdin.some(l=>{for(i=1;i<=l;i++)console.log(i%15?i%3?i%5?i:"Buzz":"Fizz":"Fizz Buzz")})
95文字
入力が数字と改行だけなら文字列にしたり改行を消さなくても数字扱いされるようです。
残り物の量
process.stdin.some(l=>{[m,p,q]=(0+l).split` `;console.log(m*(100-p)*(100-q)*1e-4)})
83文字
今回はlを文字列にするのは不要なので0+lで数値に変換。
おわりに
今回は文字の出力が多くなったのでDランクよりも全体的にコードが長くなりましたが、コードは全体的に綺麗なんじゃ無いかと思います。
特にFizz Buzzは良いコードになったと思います。