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(JSON.stringify(klasemen.cetakKlasemen()));
Y2xhc3MgS2xhc2VtZW4gewogIGNvbnN0cnVjdG9yKGtsdWIpIHsKICAgIHRoaXMucG9pbiA9IG5ldyBNYXAoKTsKICAgIGZvciAoY29uc3QgbmFtYSBvZiBrbHViKSB7CiAgICAgIHRoaXMucG9pbi5zZXQobmFtYSwgMCk7CiAgICB9CiAgfQoKICBjYXRhdFBlcm1haW5hbihrbHViS2FuZGFuZywga2x1YlRhbmRhbmcsIHNrb3IpIHsKICAgIGNvbnN0IFtza29yS2FuZGFuZywgc2tvclRhbmRhbmddID0gc2tvci5zcGxpdCgnOicpLm1hcChOdW1iZXIpOwoKICAgIGlmIChza29yS2FuZGFuZyA+IHNrb3JUYW5kYW5nKSB7CiAgICAgIHRoaXMuX3RhbWJhaFBvaW4oa2x1YkthbmRhbmcsIDMpOwogICAgfSBlbHNlIGlmIChza29yS2FuZGFuZyA8IHNrb3JUYW5kYW5nKSB7CiAgICAgIHRoaXMuX3RhbWJhaFBvaW4oa2x1YlRhbmRhbmcsIDMpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5fdGFtYmFoUG9pbihrbHViS2FuZGFuZywgMSk7CiAgICAgIHRoaXMuX3RhbWJhaFBvaW4oa2x1YlRhbmRhbmcsIDEpOwogICAgfQogIH0KCiAgX3RhbWJhaFBvaW4oa2x1YiwganVtbGFoKSB7CiAgICBpZiAoIXRoaXMucG9pbi5oYXMoa2x1YikpIHsKICAgICAgdGhpcy5wb2luLnNldChrbHViLCAwKTsKICAgIH0KICAgIHRoaXMucG9pbi5zZXQoa2x1YiwgdGhpcy5wb2luLmdldChrbHViKSArIGp1bWxhaCk7CiAgfQoKICBjZXRha0tsYXNlbWVuKCkgewogICAgY29uc3QgaGFzaWwgPSB7fTsKICAgIFsuLi50aGlzLnBvaW4uZW50cmllcygpXQogICAgICAuc29ydCgoYSwgYikgPT4gYlsxXSAtIGFbMV0pCiAgICAgIC5mb3JFYWNoKChbbmFtYSwgcG9pbl0pID0+IHsKICAgICAgICBoYXNpbFtuYW1hXSA9IHBvaW47CiAgICAgIH0pOwogICAgcmV0dXJuIGhhc2lsOwogIH0KCiAgYW1iaWxQZXJpbmdrYXQobm9tb3JQZXJpbmdrYXQpIHsKICAgIGNvbnN0IGtsYXNlbWVuID0gT2JqZWN0LmVudHJpZXModGhpcy5jZXRha0tsYXNlbWVuKCkpOwogICAgY29uc3QgaW5kZXggPSBub21vclBlcmluZ2thdCAtIDE7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGtsYXNlbWVuLmxlbmd0aCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBrbGFzZW1lbltpbmRleF1bMF07CiAgfQp9Cgpjb25zdCBrbGFzZW1lbiA9IG5ldyBLbGFzZW1lbihbJ0xpdmVycG9vbCcsICdDaGVsc2VhJywgJ0Fyc2VuYWwnXSk7CgprbGFzZW1lbi5jYXRhdFBlcm1haW5hbignQXJzZW5hbCcsICdMaXZlcnBvb2wnLCAnMjoxJyk7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCdBcnNlbmFsJywgJ0NoZWxzZWEnLCAnMToxJyk7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCdDaGVsc2VhJywgJ0Fyc2VuYWwnLCAnMDozJyk7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCdDaGVsc2VhJywgJ0xpdmVycG9vbCcsICczOjInKTsKa2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oJ0xpdmVycG9vbCcsICdBcnNlbmFsJywgJzI6MicpOwprbGFzZW1lbi5jYXRhdFBlcm1haW5hbignTGl2ZXJwb29sJywgJ0NoZWxzZWEnLCAnMDowJyk7Cgpjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShrbGFzZW1lbi5jZXRha0tsYXNlbWVuKCkpKTsK