重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Perlを使用しまして、以下の様な評価を自動処理したいと考えていますが、良い方法がありましたら教えてください。

例えば、5人の生徒に100点満点の国語のテストを受けてもらい、その点数の上位から10段階評価を付けていくとします

ここで
生徒A:100点
生徒B:80点
生徒C:60点
生徒D:90点
生徒E:95点

として点数がバラバラの場合、生徒の名前の配列を点数で逆順ソートをして、点数の高い方から

生徒A:100点 → 評価10
生徒E:95点 → 評価9
生徒D:90点 → 評価8
生徒B:80点 → 評価7
生徒C:60点 → 評価6

という具合にしますプログラムは簡単に思いつきます

しかし、
生徒F:100点
生徒G:100点
生徒H:90点
生徒I:95点
生徒J:95点

となった場合、

生徒F:100点 → 評価10
生徒G:100点 → 同点なので評価10
生徒I:95点 → 評価10が2人いるので評価8
生徒J:95点 → 同様に評価8
生徒H:90点 → 上に4人いるので評価6

としたい場合、生徒の名前の配列のソートだけでは実現しません

ここで、何か良い関数ですとか、良い方法ですとかありましたら教えて欲しいです

配列を点数で逆順ソートした後で、配列から要素を1つ1つ取り出して、その点数の比較と同じ点数のカウント
(点数が異なったらカウントをリセット)を地道に行なっていくしかないのでしょうか…

A 回答 (1件)

> 配列を点数で逆順ソートした後で、配列から要素を1つ1つ取り出して、その点数の比較と同じ点数のカウント


>(点数が異なったらカウントをリセット)を地道に行なっていくしかないのでしょうか…

「しかない」ってことは無いでしょうが、他に思いつかないなら、確実にできる方法を使えばいいのではないでしょうか。



SQL で同率含む順位を求めるRANKという関数があるので、Perlでもないかと思いCPANで検索すると
Sort::Rank というモジュールはあるようです。
http://search.cpan.org/~andya/Sort-Rank-v0.0.2/l …
    • good
    • 0
この回答へのお礼

ありがとうございます
他の質問者さんの質問&回答者さんの回答ですと、点数のみからのランク付けしかありませんで…
名前+点数からのランク付けは嬉しいです
頑張って翻訳して理解します…

お礼日時:2017/05/07 05:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!