k-tokitoh

AtCoder Beginner Contest 114 B

2018-12-22

[atcoder.jp](https://atcoder.jp/contests/abc114/tasks/abc114_b)
結果

一発 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