今日もJavaと英語の練習。300点問題ということもあり、いつもの250点問題より難しめかと身構えてみる。
本日の問題はこちら(要TopCoder登録 & 問題文は英語)。
問題を大まかに説明する。
国際バカロレア資格で高校生は卒業時の試験で、1-7の7段階に成績で分けられる。ただ分けられた試験の結果を大学入学の決定には利用できない。そこで先生は試験の結果を予測するということが要求される。学生の将来がかかっているので、学校は精度の評価に非常に興味を持っている。問題としては、getSummaryというメソッドを持つIBEvaluatorを作成する。予測結果predictedGrades[]と実際の結果actualGrades[]があり、各インデックスが一人に対する値を表している。2つの配列が与えられたとき、メソッドは7つの要素を持つ配列を返す。内容は、0-6の誤差が何%現れたかというパーセンテージが入ったものである。返す配列の型は整数値で、パーセンテージの値は小数点以下を切り捨てたものとする。したがって、返す配列のインデックス0の値の中身は予測と実際の値が一致した割合を示している。インデックス1は、予測と実際の誤差の絶対値が1であることを示している。
import java.math.*; public class IBEvaluator { public int[] getSummary(int[] predictedGrades, int[] actualGrades) { int array[] = new int[7]; for( int i=0 ; i<predictedGrades.length ; i++ ){ int diff = Math.abs(predictedGrades[i]-actualGrades[i]); array[diff]++; } double percentEachPerson = 100.0/predictedGrades.length; for( int i=0 ; i<7 ; i++ ){ array[i] = (int)(array[i]*percentEachPerson); } return array; } }
点数は264.09/300、結局思ったよりもずっと簡単で、拍子抜け。スピードとしては2部リーグのほぼ中程度。ポカしてなければもっと速く実装できたが、勿体ない。
0 件のコメント:
コメントを投稿