【ruby】アルゴリズム
array = [1,2,3,4,5] max = array[0] # puts max array.length.times{|i| if max < array[i] max = array[i] puts max end } puts "maxは#{max}" 暫定的に最大値を変数(max)に格納して、他の配列データ一つ一つと比較して、 暫定的なデータよりも小さかったら、何もしない。 暫定的なデータよりも大きかったら、そちらを変数(max)に格納する。という方法でやっていきましょう。
指定の数よりも少ない数を集める
ar = [1,2,3,4,5,6,7,10] min = [] ar.length.times{|i| if ar[i] < 4 min << ar[i] end } p min
集めたものを降順に並び替える
ar = [1,2,3,4,5,6,7,10] min = [] ar.length.times{|i| if ar[i] < 4 min << ar[i] end } p min.sort.reverse
49点以下を2つ以上取ったの人物を洗い出す
csv = CSV.table("sample.csv") csv.size.times{|i| # p csv[i] if csv[i][1..5].select{|n| n <= 49}.size >= 2 puts "落第#{csv[i][0]}" end 5
* csv[i][1..5].select{|n| n <= 49}
で49点以下をだし、.size
で要素数を把握して
>=2
と比較
# 結果 落第Will 落第Alyssa 落第Carter
それぞれの平均点を出してトップとドベを出す
csv = CSV.table("sample.csv") avg = [] csv.size.times{|i| avg << {avg: (csv[i][1..5].sum / 5.00).round(2)} csv[i] << avg[-1] } csv.size.times{|n| if csv[:avg].min == csv[n][6] puts "#{csv[n][0]},#{csv[n][6]}" end } csv.size.times{|n| if csv[:avg].max == csv[n][6] puts "#{csv[n][0]},#{csv[n][6]}" end }
- まずは
(csv[i][1..5].sum / 5.00)
でそれぞれの平均点をだし.round(2)
で小数点以下2 桁の四捨五入をし、それを予め作っていたavg = []
にheader付きで格納。 - それから、
csv[i]
にavg
の最後の要素のavg[-1]
を追加する。
これでcsv[0]
なら#<CSV::Row name:"Adam" mathematics:100 science:80 english:60 japanese:50 history:40 avg:66.0>
という感じになる。 - 平均点のドベはとドベを取った人を紐付けるには、行数が同じでになればいいので
csv[:avg].min == csv[n][6]
で互いに最小数が同じなときは行数も同じなのでこれでOK - トップも同じように出せる
# 結果 Carter,21.0 Catherine,93.6