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)
という書き方がでてくるようにしたい。