前提・実現したいこと
アルゴリズム学習の一環でAtCorderの問題Aをかたっぱしから実施している初学者です。
ちょっと古い内容ですが、下記の問題の解答がなぜこうなるのかが理解できません。
問題
AtCoder Beginner Contest 018
A - 豆まき
解答
ruby
11 line = [] 22 while lines = gets 33 line << lines.chomp.split.map(&:to_i) 44 end 55 line = line.compact.inject(:+) 66 puts line.map{|l| line.sort.reverse.index(l) + 1} 7 8# ruby 2.3.3(AtCorder仕様)
1〜5行目は理解しているのですが、6行目の動きが不明です。なぜこうなるのか、、、
もしご存知の方がいらっしゃいましたら解説していただけると幸いです。この解答でなくてもこんな解き方あるよとか、参考になるような記事などありましたら是非ご教授願います!!
恐縮ではございますが、当方rubyで学習しておりますので、できればrubyで解説していただけたら助かります。よろしくお願いします。
追記
ご指摘をいただきましたのでもう少し明示的に説明します.
map{|l| line.sort.reverse.index(l) + 1}
mapの{ }内の処理がよく理解できずに混乱していました。配列を昇順にして降順にして要素番号に1を足しているという処理だと思うのですが混乱しています。
0 1 2 <= 要素番号 [12, 18, 11] [11, 12, 18].sort [18, 12, 11].sort.reverse <=に+1しても 1 2 3 になるのでは?
といったように混乱しています。
回答4件
あなたの回答
tips
プレビュー