process.stdin.resume();
process.stdin.setEncoding('utf8');
class Klasemen {
constructor(daftarKlub = []) {
this.poin = new Map();
daftarKlub.forEach((k) => this.poin.set(k, 0));
}
catatPermainan(klubKandang, klubTandang, skor) {
[klubKandang, klubTandang].forEach((k) => {
if (!this.poin.has(k)) {
throw new Error(`Klub ${k} tidak terdaftar`);
}
});
const [golKandang, golTandang] = skor.split(":").map(Number);
// Tambahkan poin
if (golKandang > golTandang) {
this.poin.set(klubKandang, this.poin.get(klubKandang) + 3);
} else if (golKandang < golTandang) {
this.poin.set(klubTandang, this.poin.get(klubTandang) + 3);
} else {
this.poin.set(klubKandang, this.poin.get(klubKandang) + 1);
this.poin.set(klubTandang, this.poin.get(klubTandang) + 1);
}
}
cetakKlasemen() {
return Object.fromEntries(
[...this.poin.entries()].sort((a, b) => {
const [klubA, poinA] = a;
const [klubB, poinB] = b;
if (poinA !== poinB) return poinB - poinA;
return klubA.localeCompare(klubB, "id");
})
);
}
ambilPeringkat(nomorPeringkat) {
if (nomorPeringkat < 1) throw new Error("Nomor peringkat harus >= 1");
const klasemenTerurut = this.cetakKlasemen();
const klubKeys = Object.keys(klasemenTerurut);
return klubKeys[nomorPeringkat - 1] || "";
}
}
const klasemen = new Klasemen(["Liverpool", "Chelsea", "Arsenal"]);
klasemen.catatPermainan("Arsenal", "Liverpool", "2:1");
klasemen.catatPermainan("Arsenal", "Chelsea", "1:1");
klasemen.catatPermainan("Chelsea", "Arsenal", "0:3");
klasemen.catatPermainan("Chelsea", "Liverpool", "3:2");
klasemen.catatPermainan("Liverpool", "Arsenal", "2:2");
klasemen.catatPermainan("Liverpool", "Chelsea", "0:0");
// klasemen.cetakKlasemen();
// klasemen.ambilPeringkat(3)
console.log(klasemen.cetakKlasemen());
console.log(klasemen.ambilPeringkat(2));
cHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTsKcHJvY2Vzcy5zdGRpbi5zZXRFbmNvZGluZygndXRmOCcpOwoKY2xhc3MgS2xhc2VtZW4gewogIGNvbnN0cnVjdG9yKGRhZnRhcktsdWIgPSBbXSkgewogICAgdGhpcy5wb2luID0gbmV3IE1hcCgpOwogICAgZGFmdGFyS2x1Yi5mb3JFYWNoKChrKSA9PiB0aGlzLnBvaW4uc2V0KGssIDApKTsKICB9CgogIGNhdGF0UGVybWFpbmFuKGtsdWJLYW5kYW5nLCBrbHViVGFuZGFuZywgc2tvcikgewogICAgW2tsdWJLYW5kYW5nLCBrbHViVGFuZGFuZ10uZm9yRWFjaCgoaykgPT4gewogICAgICBpZiAoIXRoaXMucG9pbi5oYXMoaykpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtsdWIgJHtrfSB0aWRhayB0ZXJkYWZ0YXJgKTsKICAgICAgfQogICAgfSk7CiAgICBjb25zdCBbZ29sS2FuZGFuZywgZ29sVGFuZGFuZ10gPSBza29yLnNwbGl0KCI6IikubWFwKE51bWJlcik7CgogICAgLy8gVGFtYmFoa2FuIHBvaW4KICAgIGlmIChnb2xLYW5kYW5nID4gZ29sVGFuZGFuZykgewogICAgICB0aGlzLnBvaW4uc2V0KGtsdWJLYW5kYW5nLCB0aGlzLnBvaW4uZ2V0KGtsdWJLYW5kYW5nKSArIDMpOwogICAgfSBlbHNlIGlmIChnb2xLYW5kYW5nIDwgZ29sVGFuZGFuZykgewogICAgICB0aGlzLnBvaW4uc2V0KGtsdWJUYW5kYW5nLCB0aGlzLnBvaW4uZ2V0KGtsdWJUYW5kYW5nKSArIDMpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5wb2luLnNldChrbHViS2FuZGFuZywgdGhpcy5wb2luLmdldChrbHViS2FuZGFuZykgKyAxKTsKICAgICAgdGhpcy5wb2luLnNldChrbHViVGFuZGFuZywgdGhpcy5wb2luLmdldChrbHViVGFuZGFuZykgKyAxKTsKICAgIH0KICB9CgogIGNldGFrS2xhc2VtZW4oKSB7CiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKAogICAgICBbLi4udGhpcy5wb2luLmVudHJpZXMoKV0uc29ydCgoYSwgYikgPT4gewogICAgICAgIGNvbnN0IFtrbHViQSwgcG9pbkFdID0gYTsKICAgICAgICBjb25zdCBba2x1YkIsIHBvaW5CXSA9IGI7CgogICAgICAgIGlmIChwb2luQSAhPT0gcG9pbkIpIHJldHVybiBwb2luQiAtIHBvaW5BOwogICAgICAgIHJldHVybiBrbHViQS5sb2NhbGVDb21wYXJlKGtsdWJCLCAiaWQiKTsKICAgICAgfSkKICAgICk7CiAgfQoKICBhbWJpbFBlcmluZ2thdChub21vclBlcmluZ2thdCkgewogICAgaWYgKG5vbW9yUGVyaW5na2F0IDwgMSkgdGhyb3cgbmV3IEVycm9yKCJOb21vciBwZXJpbmdrYXQgaGFydXMgPj0gMSIpOwoKICAgIGNvbnN0IGtsYXNlbWVuVGVydXJ1dCA9IHRoaXMuY2V0YWtLbGFzZW1lbigpOwogICAgY29uc3Qga2x1YktleXMgPSBPYmplY3Qua2V5cyhrbGFzZW1lblRlcnVydXQpOwoKICAgIHJldHVybiBrbHViS2V5c1tub21vclBlcmluZ2thdCAtIDFdIHx8ICIiOwogIH0KfQpjb25zdCBrbGFzZW1lbiA9IG5ldyBLbGFzZW1lbihbIkxpdmVycG9vbCIsICJDaGVsc2VhIiwgIkFyc2VuYWwiXSk7CgprbGFzZW1lbi5jYXRhdFBlcm1haW5hbigiQXJzZW5hbCIsICJMaXZlcnBvb2wiLCAiMjoxIik7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCJBcnNlbmFsIiwgIkNoZWxzZWEiLCAiMToxIik7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCJDaGVsc2VhIiwgIkFyc2VuYWwiLCAiMDozIik7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCJDaGVsc2VhIiwgIkxpdmVycG9vbCIsICIzOjIiKTsKa2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkxpdmVycG9vbCIsICJBcnNlbmFsIiwgIjI6MiIpOwprbGFzZW1lbi5jYXRhdFBlcm1haW5hbigiTGl2ZXJwb29sIiwgIkNoZWxzZWEiLCAiMDowIik7Ci8vIGtsYXNlbWVuLmNldGFrS2xhc2VtZW4oKTsKLy8ga2xhc2VtZW4uYW1iaWxQZXJpbmdrYXQoMykKY29uc29sZS5sb2coa2xhc2VtZW4uY2V0YWtLbGFzZW1lbigpKTsKY29uc29sZS5sb2coa2xhc2VtZW4uYW1iaWxQZXJpbmdrYXQoMikpOwo=