AtCoder Beginner Contest 114 B

atcoder.jp

結果

一発AC

学んだこと
  • integer#timesをrange#eachと混同しないこと。
  • 公式リファレンスちょっと慣れた。
  • min(x, y)ではなく[x, y].min
  • string#charsで文字列の1文字ずつを要素とする配列にできる。
  • enum#each_consで1つずつずらして123,234,345...ととっていくことができる(下記のコードではつかっていない)
  • mapをうまくつかえるといい。コード量が減るし、この場合だとmin_difっていう変数とか、その初期値の設定とかが不要になる。使うタイミングとは「ある配列に対して、その要素と一対一で対応する要素をもつ配列をつくる」とき。
最初に書いたコード
s = gets.chomp

min_dif = 999
(s.size-2).times do |i|
  min_dif = [min_dif, (753 - s.slice(i,3).to_i).abs].min
end

p min_dif
修正したコード
s = gets.chomp
p (0..s.size-3).map{|i|(s.slice(i,3).to_i - 753).abs}.min