Skip to content

Instantly share code, notes, and snippets.

@TwoSquirrels
Created June 27, 2023 15:10
Show Gist options
  • Save TwoSquirrels/10c02615fa68276352c414f16ca351d8 to your computer and use it in GitHub Desktop.
Save TwoSquirrels/10c02615fa68276352c414f16ca351d8 to your computer and use it in GitHub Desktop.
AJL2023 高3 個人ランキング 平均ソート表示
// SPDX-License-Identifier: MIT
"use strict";
const tabletojson = require("tabletojson").Tabletojson;
console.log(
`\n### AJL2023 高3 個人ランキング (${new Date().toLocaleDateString()}時点)\n`
);
tabletojson.convertUrl(
"https://img.atcoder.jp/ajl2023/output_personal_grade6.html",
([table]) => {
console.log(
table
.map((player) => ({
rank: parseInt(player["順位"]),
name: player["名前"],
school: player["学校"]
.replace(/高等学校/g, "高校")
.replace(/(工業)?高等専門学校/g, "高専")
.replace(/附属.*/g, "附属")
.replace(/.*?(立|系属)(?!.{0,4}$)/g, "")
.replace(/サイエンスフロンティア/g, "サイフロ"),
score: Number(player["個人スコア"]),
times: Object.entries(player).filter(
([k, v]) => k.match(/^a.c\d+$/) && Number(v) > 0
).length,
}))
.map((player) => ({
...player,
average: player.score / Math.min(10, player.times),
}))
.sort((a, b) => b.average - a.average)
.map(
(player, i) =>
`平均${(i + 1).toString().padStart(3)}位 ` +
`(${player.average.toFixed(1).padStart(8)}点), ` +
`暫定${player.rank.toString().padStart(3)}位 ` +
`(${player.score.toString().padStart(7)}点/` +
`${player.times.toString().padStart(2)}回): ` +
`${player.name} (${player.school})\n`
)
.join("")
);
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment