はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC272のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。
A - Integer Sum
a-272.rb
gets
- puts gets.split.map(&:to_i).sum
+ puts gets.split.sum{ |e| e.to_i }
B - Everyone is Friends
b-272.rb
n, m = gets.split.map(&:to_i)
hash = {}
m.times do
array = gets.split.map(&:to_i)
k = array.shift
for i in 0..k - 2
for j in i + 1..k - 1
next if hash[[array[i], array[j]]]
hash[[array[i], array[j]]] = true
end
end
end
puts hash.uniq.size == (1..n - 1).sum ? "Yes" : "No"
解説
連想配列hashを使って、同じ舞踏会に参加したかを記録しています。最後に、連想配列の大きさが場合の数と一致していればYes、一致していなければNoを出力します。
C - Max Even
c-272.rb
# 修正前
n = gets.to_i
a = gets.split.map(&:to_i).sort.reverse
e = a.select{ |factor| factor.even? }.sort[-2..] || [-1]
o = a.select{ |factor| factor.odd? }.sort[-2..] || [-1]
puts [e.sum, o.sum].max
c-272.rb
# 修正後
gets
a = gets.split.map(&:to_i)
array = a.partition{ |i| i.even? }
e = array[0].max(2)
o = array[1].max(2)
e = e.size == 2 ? e.sum : -1
o = o.size == 2 ? o.sum : -1
puts [e, o].max
解説
和が偶数となるのは偶+偶または奇+奇の場合なので、selectメソッドを使ってaの要素のうち偶数で大きいもの2つおよび奇数で大きいもの2つを取得しています。なお、そのような要素が2つ以上ない場合はnillとなってしまうので、nillにならないように-1を設置しています。最後に、和の最大値を出力すればOKです。