AtCoder Beginner Contest 125 by Ruby

atcoder.jp

  • 「各要素を除いたときの最大公約数をそれぞれ求めて、その最大値を返せばよい」ということには気づけた。
  • gcdの計算では結合則が成立するので、両端から順に最大公約数を算出し、配列としてメモっておく方法を発想できたかった。
  • 降順のイテレートはRange#eachでは不可。Integer#down_toなど使うべし。
(1..10).each {|i| print i, " "}      # => 1 2 3 4 5 6 7 8 9 10
(10..1).each {|i| print i, " "}      # => (出力なし)
10.downto(1) {|i| print i, " "}      # => 10 9 8 7 6 5 4 3 2 1

atcoder.jp

  • 回答みたらさくっと解けた。
  • 与えられた操作によって「任意の2つの数の正負を反転できる」ことに気づきたかった。
  • ruby 2.3.3だとArray#sumがつかえない。array.inject(0) {|sum, a| sum + a}としてもよいが、これはinject(:+)と書ける。すっきり!
  • array.map {|a| a.abs}とか書いちゃったけど、ぱっとarray.map(&:abs)という書き方がでてくるようにしたい。