提出課題:04回目レポート
本文:
c1222198 丸田ゆき
1.(1)-1まで実施しました。
2.
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
require 'kconv'
soft = Hash.new
while line = gets
if /(\S+)\s+(\d+)\s+(\d+)\s+(\d+)/ =~ line
b = $2.to_f / ($2.to_f + $3.to_f)
soft[$1] = [$2.to_f,$3.to_f,$4,b]
end
end
print"--チーム名------------+-勝ち-+-負け-+-引分--+-勝率---\n"
for team in soft.keys.sort {|a, b| soft[b][3] <=> soft[a][3]}
result = sprintf("%-23s%4d%7d%7d%10.3f\n",
team.toeuc.force_encoding("binary"),
soft[team][0], soft[team][1], soft[team][2],
soft[team][0]/(soft[team][0]+soft[team][1])).toutf8
puts result
end
3../ruby2-3.rb softball.txt [~/program]
--チーム名------------+-勝ち-+-負け-+-引分--+-勝率---
ドラゴンフライズ 77 51 8 0.602
アンツ 78 53 5 0.595
ブックウォームス 75 52 9 0.591
モスキートーズ 65 65 6 0.500
スネイルズ 52 82 2 0.388
クリケッツ 50 83 3 0.376
4.
授業内で作ったプログラムとの変更点は、10行目に
b = $2.to_f / ($2.to_f + $3.to_f)
という勝率を計算する変数bを定め、11行目のsoftの配列の3番目に入れていることです。
17行目で並び替えて表示させるときに
{|a, b| soft[b][3] <=> soft[a][3]}
のように配列の3番目の要素として勝率順を表示させました。
5.1行変えるだけでいいというヒントをいただきましたが、ちょっとわからなかったので新しく変数を設定するという大回りをしてしまいました。また、私はopenメソッドのところがちょっと怪しいので、もう一度復習する必要があるなと感じました。STDERR.print、STDERR.printfらへんを使うのかなとは思ったのですが、次回の解説でちょっと思い出したいです。
添付:
ruby2-3.rb
添付: