久々にCodinGameのClash of Codeをやったんですけど、やっぱり楽しいですね・・・
特にShortest Mode(いわゆるコードゴルフ)が楽しいです。
今回もいいコードをたくさん見たので、自分の備忘録も兼ねてそれらをまとめます。
2次のベクトルの和を2で割ったものを出力
例えば、[5, 2]と[3,10]が与えられたなら、和が[8,12]なので、2で割った[4,6]を出力、という問題です。出力する2つの数が整数になることは保証されています。
僕のコード(142文字)
a=readline().split(' '); b=readline().split(' '); console.log((parseInt(a[0])+(parseInt(b[0])))/2 +" "+((parseInt(a[1]))+(parseInt(b[1])))/2);
普通に書いただけです。
1位の人のコード(100文字)
g=()=>readline().split(' ').map(e=>+e);h=Math.floor;[r,c]=g();[e,f]=g();print(h((r+e)/2),h((c+f)/2))
関数の略し方がかっこいい・・・
与えられた整数が桁順にその桁の数を見て行ったときに「前の桁より増える」と「前の桁より減る」の両方があるかどうか?
例えば、「12341」などがtrueです。
僕のコード→ショートコーディングにこだわろうとしすぎて、正解が出せず
2位の人のコード(73文字)※javascript
a=readline() x=[...a].sort() print(!(a==x.join``||a==x.reverse().join``))
1位の人のコード(47文字)※ruby
n=gets.chars r=n.reverse p n.sort!=n&&r.sort!=r
なんと美しい・・・
数字nとn個の文字列(全て文字数が異なる)が与えられ、文字数が短い順に出力
2位の人のコード(103文字)※python
wo=[] for i in range(int(input())):wo.append(input()) wo.sort(key=lambda s:len(s)) for w in wo:print(w)
lambda関数使うのかっこいい。
1位の人のコード(55文字)※ruby
puts gets.to_i.times.collect{gets}.sort_by{|x|x.length}
指示を全く無駄なくコード化した、って感じですね、すごい。
整数nとmが与えられ、n#/m#を計算(#は素数階乗の記号)
整数Aの素数階乗 A#というのは、A以下の素数の積のことです。例えば8#は2*3*5*7=210です。
これは以前の記事で紹介した、rubyのprimeメソッドを使い、1位とれました!!!(108文字)
require'prime' p (1..gets.to_i).select{|x|x.prime?}.inject(:*)/(1..gets.to_i).select{|x|x.prime?}.inject(:*)
普通にn#/m#を計算していますが、今振り返ると、こう書いた方が短いですね(合ってるハズ・・・)。
require'prime' x=gets.to.i y=gets.to.i p ((y+1)..x).select{|x|x.prime?}.inject(:*)
まぁなんであれ、新しく習得したスキルで解けるのは嬉しい!
続けていくぞ!