裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

レースゲームの最終順位を決めよう

2018年01月05日 | ブログラミング

レースゲームの最終順位を決めよう

締め切りが 2018/01/05 10:00 AM なので,その 1 分後に投稿されるように予約

あなたはレースゲームの開発に携わっており、プレイヤーの最終順位を決めるアルゴリズム開発を任されました。
そのゲームは、複数のレースを行い、各レースの順位から最終順位を決めるのですが、順位はそのまま合計したり、算術平均してもおかしな結果になってしまいます。

これは、順位は大小には意味があっても、間隔には意味はないため、1位+2位が3位を意味しないように、足し算引き算が成立しないことに起因します。
そこで、ひとまず「調和平均」を用いて、解決してみることにしました。

求められるプログラムの前提条件は、以下の通りとなります。

・ 標準入力から、各レースの順位(スペース区切り)が、次のようにプレイヤーの人数分複数行送られる
  (プレイヤー1) 1回目のレースの順位 2回目のレースの順位 3回目のレースの順位 ...
  (プレイヤー2) 1回目のレースの順位 2回目のレースの順位 3回目のレースの順位 ...
    :
    :
・ 入力されるテキストの行番号をプレイヤーの番号とみなす
・ プレイヤーの人数は、2人以上12人以下とする
・ レースの回数は、2回以上4回以下とする
・ 各レースにおける順位に、重複や欠落はないものとする
・ 最終順位は、プレイヤーごとの全レースの順位の調和平均(Wikipediaへのリンク)が低い順に求める
・ このとき調和平均が同じプレイヤー同士は、同じ順位とし、下の順位に合わせる。
  例えば、プレイヤーが3人で、上位2人が同じ調和平均の場合、2位が2名、3位が1名となる
・ 求めた最終順位をプレイヤーの番号順に、改行区切りで標準出力に送ること

そして 以下が、入力と出力例になります。

No.   入力例     出力例
1   2 4 3 4    3
      1 1 2 1    1
      3 2 1 2    2
      4 3 4 3    4
 
2     1 2        1
      2 5        3
      3 4        5
      4 3        5
      5 1        2

上記の1番目の例の場合、各プレイヤーの順位の調和平均は、小数点第5位以下切捨てで、次のようになります。
3.0000
1.1428
1.7142
3.4285

この数字が小さいほど上位となるので、プレイヤーの番号順に 3位 1位 2位 4位となるわけですね。
この最終順位は、直観的にも納得がいく結果ではないでしょうか。

実際のゲームでは順位を 1位→15pts、2位→12pts、3位→10pts という風にポイントに換算し、
ポイントの合計で最終順位を決めるのが一般的です。
ただ順位という数字を通じて、平均にもいろんな種類があり、適材適所で活用できることに気づいていただけたら幸いです。

【問題】
標準入力から、レースゲームにおける各レースの順位が、プレイヤーの人数分複数行送られます。
全レースの順位の調和平均から、各プレイヤーの最終順位を求め、その結果を標準出力に返してください。

====================================================================

f = function(s) {
    n = length(s)
    score = numeric(n)
    for (i in 1:n) {
        score[i] = 1/mean(1/as.numeric(unlist(strsplit(s[i], " "))))
    }
    cat(sprintf("%i\n", rank(score, ties.method="max")), sep="")
}

# f(readLines(file("stdin", "r")))

f(c("2 4 3 4", "1 1 2 1", "3 2 1 2", "4 3 4 3")) # 3,1,2,4

f(c("1 2", "2 5", "3 4", "4 3", "5 1")) # 1,3,5,5,2

コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 大騒ぎしないこと(^_^) | トップ | 重回帰分析の用途---「陸王」... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事