結果

問題 No.571 3人兄弟(その2)
ユーザー muu16muu16
提出日時 2018-11-25 22:49:23
言語 Ruby
(3.3.0)
結果
AC  
実行時間 85 ms / 2,000 ms
コード長 2,729 bytes
コンパイル時間 670 ms
コンパイル使用メモリ 11,308 KB
実行使用メモリ 15,344 KB
最終ジャッジ日時 2023-08-26 20:16:39
合計ジャッジ時間 3,204 ms
ジャッジサーバーID
(参考情報)
judge13 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 84 ms
15,236 KB
testcase_01 AC 84 ms
15,104 KB
testcase_02 AC 85 ms
15,144 KB
testcase_03 AC 83 ms
15,140 KB
testcase_04 AC 84 ms
15,108 KB
testcase_05 AC 83 ms
15,112 KB
testcase_06 AC 82 ms
15,248 KB
testcase_07 AC 85 ms
15,088 KB
testcase_08 AC 84 ms
15,144 KB
testcase_09 AC 85 ms
15,092 KB
testcase_10 AC 85 ms
15,116 KB
testcase_11 AC 85 ms
15,344 KB
testcase_12 AC 84 ms
15,256 KB
testcase_13 AC 83 ms
15,092 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

a = gets.chomp.split(" ")
 b = gets.chomp.split(" ")
 c = gets.chomp.split(" ")

 # そしてmapメソッドを使って配列の文字列を数値にします
 aa = a.map(&:to_i)
 bb = b.map(&:to_i)
 cc = c.map(&:to_i)
 # aa[170, 60]
 # bb[180, 70]
 # cc[160, 50]
 # ↑それぞれ今この様な配列になっているから
 # これをhashにします

 h = { "A" => aa[0], "B" => bb[0], "C" => cc[0]}
 w = { "A" => aa[1], "B" => bb[1], "C" => cc[1]}
 #こんな感じになる
 # h = { "A" => 170, "B" => 180, "C" => 160}
 # w = { "A" => 60, "B" => 70, "C" => 50}

 # 次にsortメソッドを使ってhashの値を高いもん順にならべかえる
 # 身長の高い順
 hh = h.sort { |(key1, val1),(key2, val2)| val2 <=> val1 }
 # こんな感じ[["B", 180], ["A", 170], ["C", 160]]

 # 次は体重の軽い順にsortする
 ww = w.sort { |(key1, val1),(key2, val2)| val1 <=> val2 }
 # こんな感じ[["C", 50], ["A", 60], ["B", 70]]

 # 体重よりも身長の方が優れている優先度が高いから
 # 身長が高い人に点数を多く与えてあげる
 # eachメソッドを使って1位の人に30点をあげる
 # そしてそこから身長が低くなるにつれて点数を
 # 10点ずつ低くする計算式を作る

 #lankにはまず1位の人に30点を上げたいから30を代入して上げます
 lank = 30
 #previousには前回の人の値が入る
 #けど最初の人は前回の人がいないから初期値として
 #0を入れといて上げます
 previous = 0
 score = {"A" => 0, "B" => 0, "C" => 0}
 hh.each { |key, val|
   if previous > val then
   # if文がfalseになる様に0を入れておく
   lank -= 10
   # 前回より小さいならlank(点数)を下げる
   # 最初は30点入っている
   end
   previous = val
   score[key] = lank
 }

# 150
# 140
# 150
# {"A"=>30, "B"=>20, "C"=>30}

lank2 = 4
#previousには前回の人の値が入る
#けど最初の人は前回の人がいないから初期値として
#0を入れといて上げます
previous2 = 0
score2 = {"A" => 0, "B" => 0, "C" => 0}
ww.each { |key, val|
  if previous2 < val then
  # if文がfalseになる様に0を入れておく
  lank2 -= 1
  # 前回より小さいならlank(点数)を下げる
  # 最初は30点入っている
  end
  previous2 = val
  score2[key] = lank2
}
# h1 = {a:1, b:2}
# h2 = {b:3, c:4}
# p h1.merge(h2){|key, v0, v1|
#   v0 + v1 # キーが重複していた場合は2つの値を加算する
# } #=> {:a=>1, :b=>5, :c=>4}
score3 = score.merge(score2){|key, v0, v1|
            v0 + v1
          }
score4 = score3.sort { |(key1, val1),(key2, val2)| val2 <=> val1 }
# [["C", 31], ["A", 22], ["B", 13]]
puts score4[0][0]
puts score4[1][0]
puts score4[2][0]
0