class Klasemen {
constructor(klubList) {
// Inisialisasi klub dengan point 0
this.klubData = {};
klubList.forEach(klub => {
this.klubData[klub] = 0;
});
}
catatPermainan(klubKandang, klubTandang, skor) {
// Parsing skor
const [skorKandang, skorTandang] = skor.split(':').map(Number);
if (skorKandang > skorTandang) {
this.klubData[klubKandang] += 3;
} else if (skorKandang < skorTandang) {
this.klubData[klubTandang] += 3;
} else {
this.klubData[klubKandang] += 1;
this.klubData[klubTandang] += 1;
}
}
cetakKlasemen() {
console.log(this.ambilSemuaPeringkat());
}
ambilSemuaPeringkat() {
// Mengurutkan berdasarkan point tertinggi
const sorted = Object.entries(this.klubData)
.sort((a, b) => b[1] - a[1]);
// Mengubah kembali menjadi object atau array key-value
const result = {};
for (let [klub, point] of sorted) {
result[klub] = point;
}
return result;
}
ambilPeringkat(n) {
const sorted = Object.entries(this.klubData)
.sort((a, b) => b[1] - a[1]);
// Peringkat ke-n artinya index ke-n-1
return sorted[n - 1][0];
}
}
// Main function (di terminal / runtime)
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');
// Cetak hasil akhir klasemen
klasemen.cetakKlasemen(); // {'Arsenal': 8, 'Chelsea': 5, 'Liverpool': 2}
// Ambil peringkat ke-2
console.log(klasemen.ambilPeringkat(2)); // 'Chelsea'
Y2xhc3MgS2xhc2VtZW4gewogICAgY29uc3RydWN0b3Ioa2x1Ykxpc3QpIHsKICAgICAgICAvLyBJbmlzaWFsaXNhc2kga2x1YiBkZW5nYW4gcG9pbnQgMAogICAgICAgIHRoaXMua2x1YkRhdGEgPSB7fTsKICAgICAgICBrbHViTGlzdC5mb3JFYWNoKGtsdWIgPT4gewogICAgICAgICAgICB0aGlzLmtsdWJEYXRhW2tsdWJdID0gMDsKICAgICAgICB9KTsKICAgIH0KCiAgICBjYXRhdFBlcm1haW5hbihrbHViS2FuZGFuZywga2x1YlRhbmRhbmcsIHNrb3IpIHsKICAgICAgICAvLyBQYXJzaW5nIHNrb3IKICAgICAgICBjb25zdCBbc2tvckthbmRhbmcsIHNrb3JUYW5kYW5nXSA9IHNrb3Iuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTsKCiAgICAgICAgaWYgKHNrb3JLYW5kYW5nID4gc2tvclRhbmRhbmcpIHsKICAgICAgICAgICAgdGhpcy5rbHViRGF0YVtrbHViS2FuZGFuZ10gKz0gMzsKICAgICAgICB9IGVsc2UgaWYgKHNrb3JLYW5kYW5nIDwgc2tvclRhbmRhbmcpIHsKICAgICAgICAgICAgdGhpcy5rbHViRGF0YVtrbHViVGFuZGFuZ10gKz0gMzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmtsdWJEYXRhW2tsdWJLYW5kYW5nXSArPSAxOwogICAgICAgICAgICB0aGlzLmtsdWJEYXRhW2tsdWJUYW5kYW5nXSArPSAxOwogICAgICAgIH0KICAgIH0KCiAgICBjZXRha0tsYXNlbWVuKCkgewogICAgICAgIGNvbnNvbGUubG9nKHRoaXMuYW1iaWxTZW11YVBlcmluZ2thdCgpKTsKICAgIH0KCiAgICBhbWJpbFNlbXVhUGVyaW5na2F0KCkgewogICAgICAgIC8vIE1lbmd1cnV0a2FuIGJlcmRhc2Fya2FuIHBvaW50IHRlcnRpbmdnaQogICAgICAgIGNvbnN0IHNvcnRlZCA9IE9iamVjdC5lbnRyaWVzKHRoaXMua2x1YkRhdGEpCiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzFdIC0gYVsxXSk7CgogICAgICAgIC8vIE1lbmd1YmFoIGtlbWJhbGkgbWVuamFkaSBvYmplY3QgYXRhdSBhcnJheSBrZXktdmFsdWUKICAgICAgICBjb25zdCByZXN1bHQgPSB7fTsKICAgICAgICBmb3IgKGxldCBba2x1YiwgcG9pbnRdIG9mIHNvcnRlZCkgewogICAgICAgICAgICByZXN1bHRba2x1Yl0gPSBwb2ludDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBhbWJpbFBlcmluZ2thdChuKSB7CiAgICAgICAgY29uc3Qgc29ydGVkID0gT2JqZWN0LmVudHJpZXModGhpcy5rbHViRGF0YSkKICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMV0gLSBhWzFdKTsKCiAgICAgICAgLy8gUGVyaW5na2F0IGtlLW4gYXJ0aW55YSBpbmRleCBrZS1uLTEKICAgICAgICByZXR1cm4gc29ydGVkW24gLSAxXVswXTsKICAgIH0KfQoKLy8gTWFpbiBmdW5jdGlvbiAoZGkgdGVybWluYWwgLyBydW50aW1lKQpjb25zdCBrbGFzZW1lbiA9IG5ldyBLbGFzZW1lbihbJ0xpdmVycG9vbCcsICdDaGVsc2VhJywgJ0Fyc2VuYWwnXSk7CgprbGFzZW1lbi5jYXRhdFBlcm1haW5hbignQXJzZW5hbCcsICdMaXZlcnBvb2wnLCAnMjoxJyk7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCdBcnNlbmFsJywgJ0NoZWxzZWEnLCAnMToxJyk7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCdDaGVsc2VhJywgJ0Fyc2VuYWwnLCAnMDozJyk7CmtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCdDaGVsc2VhJywgJ0xpdmVycG9vbCcsICczOjInKTsKa2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oJ0xpdmVycG9vbCcsICdBcnNlbmFsJywgJzI6MicpOwprbGFzZW1lbi5jYXRhdFBlcm1haW5hbignTGl2ZXJwb29sJywgJ0NoZWxzZWEnLCAnMDowJyk7CgovLyBDZXRhayBoYXNpbCBha2hpciBrbGFzZW1lbgprbGFzZW1lbi5jZXRha0tsYXNlbWVuKCk7IC8vIHsnQXJzZW5hbCc6IDgsICdDaGVsc2VhJzogNSwgJ0xpdmVycG9vbCc6IDJ9CgovLyBBbWJpbCBwZXJpbmdrYXQga2UtMgpjb25zb2xlLmxvZyhrbGFzZW1lbi5hbWJpbFBlcmluZ2thdCgyKSk7IC8vICdDaGVsc2VhJwo=