class Klasemen {
constructor(klub) {
this.poin = new Map();
for (const nama of klub) {
this.poin.set(nama, 0);
}
}
catatPermainan(klubKandang, klubTandang, skor) {
const [skorKandang, skorTandang] = skor.split(':').map(Number);
if (skorKandang > skorTandang) {
this._tambahPoin(klubKandang, 3);
} else if (skorKandang < skorTandang) {
this._tambahPoin(klubTandang, 3);
} else {
this._tambahPoin(klubKandang, 1);
this._tambahPoin(klubTandang, 1);
}
}
_tambahPoin(klub, jumlah) {
if (!this.poin.has(klub)) {
this.poin.set(klub, 0);
}
this.poin.set(klub, this.poin.get(klub) + jumlah);
}
cetakKlasemen() {
const hasil = {};
[...this.poin.entries()]
.sort((a, b) => b[1] - a[1])
.forEach(([nama, poin]) => {
hasil[nama] = poin;
});
return hasil;
}
ambilPeringkat(nomorPeringkat) {
const klasemen = Object.entries(this.cetakKlasemen());
const index = nomorPeringkat - 1;
if (index < 0 || index >= klasemen.length) {
return null;
}
return klasemen[index][0];
}
}
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');
console.log(klasemen.cetakKlasemen());
Y2xhc3MgS2xhc2VtZW4gewogIGNvbnN0cnVjdG9yKGtsdWIpIHsKICAgIHRoaXMucG9pbiA9IG5ldyBNYXAoKTsKICAgIGZvciAoY29uc3QgbmFtYSBvZiBrbHViKSB7CiAgICAgIHRoaXMucG9pbi5zZXQobmFtYSwgMCk7CiAgICB9CiAgfQogCiAgY2F0YXRQZXJtYWluYW4oa2x1YkthbmRhbmcsIGtsdWJUYW5kYW5nLCBza29yKSB7CiAgICBjb25zdCBbc2tvckthbmRhbmcsIHNrb3JUYW5kYW5nXSA9IHNrb3Iuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTsKIAogICAgaWYgKHNrb3JLYW5kYW5nID4gc2tvclRhbmRhbmcpIHsKICAgICAgdGhpcy5fdGFtYmFoUG9pbihrbHViS2FuZGFuZywgMyk7CiAgICB9IGVsc2UgaWYgKHNrb3JLYW5kYW5nIDwgc2tvclRhbmRhbmcpIHsKICAgICAgdGhpcy5fdGFtYmFoUG9pbihrbHViVGFuZGFuZywgMyk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl90YW1iYWhQb2luKGtsdWJLYW5kYW5nLCAxKTsKICAgICAgdGhpcy5fdGFtYmFoUG9pbihrbHViVGFuZGFuZywgMSk7CiAgICB9CiAgfQogCiAgX3RhbWJhaFBvaW4oa2x1YiwganVtbGFoKSB7CiAgICBpZiAoIXRoaXMucG9pbi5oYXMoa2x1YikpIHsKICAgICAgdGhpcy5wb2luLnNldChrbHViLCAwKTsKICAgIH0KICAgIHRoaXMucG9pbi5zZXQoa2x1YiwgdGhpcy5wb2luLmdldChrbHViKSArIGp1bWxhaCk7CiAgfQogCiAgY2V0YWtLbGFzZW1lbigpIHsKICAgIGNvbnN0IGhhc2lsID0ge307CiAgICBbLi4udGhpcy5wb2luLmVudHJpZXMoKV0KICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMV0gLSBhWzFdKQogICAgICAuZm9yRWFjaCgoW25hbWEsIHBvaW5dKSA9PiB7CiAgICAgICAgaGFzaWxbbmFtYV0gPSBwb2luOwogICAgICB9KTsKICAgIHJldHVybiBoYXNpbDsKICB9CiAKICBhbWJpbFBlcmluZ2thdChub21vclBlcmluZ2thdCkgewogICAgY29uc3Qga2xhc2VtZW4gPSBPYmplY3QuZW50cmllcyh0aGlzLmNldGFrS2xhc2VtZW4oKSk7CiAgICBjb25zdCBpbmRleCA9IG5vbW9yUGVyaW5na2F0IC0gMTsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0ga2xhc2VtZW4ubGVuZ3RoKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGtsYXNlbWVuW2luZGV4XVswXTsKICB9Cn0KIApjb25zdCBrbGFzZW1lbiA9IG5ldyBLbGFzZW1lbihbJ0xpdmVycG9vbCcsICdDaGVsc2VhJywgJ0Fyc2VuYWwnXSk7CiAKa2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oJ0Fyc2VuYWwnLCAnTGl2ZXJwb29sJywgJzI6MScpOwprbGFzZW1lbi5jYXRhdFBlcm1haW5hbignQXJzZW5hbCcsICdDaGVsc2VhJywgJzE6MScpOwprbGFzZW1lbi5jYXRhdFBlcm1haW5hbignQ2hlbHNlYScsICdBcnNlbmFsJywgJzA6MycpOwprbGFzZW1lbi5jYXRhdFBlcm1haW5hbignQ2hlbHNlYScsICdMaXZlcnBvb2wnLCAnMzoyJyk7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCdMaXZlcnBvb2wnLCAnQXJzZW5hbCcsICcyOjInKTsKa2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oJ0xpdmVycG9vbCcsICdDaGVsc2VhJywgJzA6MCcpOwogCmNvbnNvbGUubG9nKGtsYXNlbWVuLmNldGFrS2xhc2VtZW4oKSk7