はじめに
私はプログラミング学習を初めて1か月の初心者です。
学習する際、順位を作成するプログラムに思いのほか苦戦しました。自分の学習のメモとして記事を作成しました。
コード
score = [2, 4, 3, 4, 5, 4, 1, 5, 2, 3]
score_order = score.sort.reverse
for i in 0..9 do
print "#{score_order[i]}点が#{i+1-score_order.slice(0,i).count(score_order[i])}位。"
end
#出力 5点が1位。5点が1位。4点が3位。4点が3位。4点が3位。3点が6位。3点が6位。2点が8位。2点が8位。1点が10位。
解説
5点満点のテストを10人で行ったとき、各点数に対する順位を考えます。
点数は一つの配列にまとめられているとします。
最初にscore.sort.reverseで、点数を降順に並べ替えた配列を作成します。
そして、並べ替えた配列を利用して順位を考えます。配列番号の前に同じ値を持った要素が何個存在するかが、順位算出のカギとなる考えです。
score_order.slice(0,i).count(score_order[i])では、sliiceメソッドで自分の配列番号までの配列を抽出し、countメソッドで抽出した配列から同じ値をもつ要素数を算出します。
配列番号から同じ値を持つ要素数を引くことで順位を求めることができます。
おわりに
最初に順位を出力するコードを考えた時、1位が10人いる場合、9人いる場合、8人いる場合など場合分けをして考えていました。
配列番号に注目することで、それまでの重複分を引けば順位を簡単に求めることに途中で気が付きました。
他に順位を求めるコードのアイディアなどあれば、ぜひとも教えていただきたいです!