AtCoderクリアレート
難易度の参考値として、
問題を通した人の数 / コンテスト参加者
を求める
準備
code: package.json
{
"dependencies": {
"request": "*",
"fs": "*"
}
}
Standingsをダウンロードする
code: download.js
const request = require('request');
const fs = require('fs');
const name = (i) => 'arc'+('00'+i).slice(-3);
const contestCount = 103;
let i = 0;
let dlCount = 0;
const update = () => {
// dlが終了してなければスキップ
if (i != dlCount) { return; }
++i;
if (i > contestCount) {
clearInterval(timer);
return;
}
console.log('call: '+url(i));
request({method: 'GET', url: url(i), encoding: null},
(error, response, body) =>{
if(!error && response.statusCode === 200){
const fileName = 'downloads/'+name(++dlCount)+'.json';
fs.writeFileSync(fileName, body);
console.log(fileName);
}
}
);
}
// ミリ秒でダウンロード間隔を指定
let timer = setInterval(update, 1000);
ファイルを読みこんでクリアレートをJSON形式で出力する
code: clear_rate.js
const standings = [];
const results = {};
const name = (i) => 'arc'+('00'+i).slice(-3);
const contestCount = 103;
for (let contestId = 1; contestId <= contestCount; ++contestId) {
standingscontestId = require('./downloads/'+name(contestId)+'.json'); for (let key in standingscontestId.TaskInfo) { }
for (let user of standingscontestId.StandingsData) { for (let key in user.TaskResults) {
if (resultskey == null) { resultskey = {}; } const score = user.TaskResultskey.Score; if (score == 0) { continue; }
}
else {
}
}
}
}
const resultArr = [];
for(const key in results) {
resultArr.push(resultskey); }
console.log(JSON.stringify(resultArr));
出力のサンプル
code:clear_rate.json
JSONをCSV形式にするにはこちらのWebサービスが便利です
完成
ABC / ARCクリアレート