class Klasemen {
constructor(klubList) {
this.klub = [];
// loop untuk bikin klub2 baru
for(let i = 0; i < klubList.length; i++) {
this.klub.push({
nama: klubList[i],
totalPoint: 0
});
}
console.log("Klasemen berhasil dibuat!"); // debug
}
// fungsi buat catat permainan
catatPermainan(klubKandang, klubTandang, skor) {
// split skor jadi array
var skorArray = skor.split(':');
var skorKandang = parseInt(skorArray[0]);
var skorTandang = parseInt(skorArray[1]);
// cari klub kandang
var indexKandang = -1;
for(let i = 0; i < this.klub.length; i++) {
if(this.klub[i].nama == klubKandang) {
indexKandang = i;
break;
}
}
// cari klub tandang
var indexTandang = -1;
for(let j = 0; j < this.klub.length; j++) {
if(this.klub[j].nama == klubTandang) {
indexTandang = j;
break;
}
}
if(indexKandang == -1 || indexTandang == -1) {
console.log("Error: Klub tidak ditemukan!");
return;
}
// logika pemberian point
if(skorKandang > skorTandang) {
// kandang menang
this.klub[indexKandang].totalPoint = this.klub[indexKandang].totalPoint + 3;
console.log(klubKandang + " menang!");
} else if(skorKandang < skorTandang) {
// tandang menang
this.klub[indexTandang].totalPoint = this.klub[indexTandang].totalPoint + 3;
console.log(klubTandang + " menang!");
} else {
// seri
this.klub[indexKandang].totalPoint = this.klub[indexKandang].totalPoint + 1;
this.klub[indexTandang].totalPoint = this.klub[indexTandang].totalPoint + 1;
console.log("Hasil seri!");
}
}
// fungsi untuk cetak klasemen
cetakKlasemen() {
// buat array baru buat sorting
var klubArray = [];
for(let i = 0; i < this.klub.length; i++) {
klubArray.push(this.klub[i]);
}
// sorting manual (bubble sort)
for(let i = 0; i < klubArray.length - 1; i++) {
for(let j = 0; j < klubArray.length - 1 - i; j++) {
if(klubArray[j].totalPoint < klubArray[j + 1].totalPoint) {
// swap
var temp = klubArray[j];
klubArray[j] = klubArray[j + 1];
klubArray[j + 1] = temp;
}
}
}
// buat object hasil
var hasil = {};
for(let i = 0; i < klubArray.length; i++) {
hasil[klubArray[i].nama] = klubArray[i].totalPoint;
}
return hasil;
}
// fungsi ambil peringkat
ambilPeringkat(peringkat) {
// copy array klub
var klubCopy = [];
for(let i = 0; i < this.klub.length; i++) {
klubCopy.push({
nama: this.klub[i].nama,
totalPoint: this.klub[i].totalPoint
});
}
// sorting lagi (pake bubble sort lagi)
for(let i = 0; i < klubCopy.length - 1; i++) {
for(let j = 0; j < klubCopy.length - 1 - i; j++) {
if(klubCopy[j].totalPoint < klubCopy[j + 1].totalPoint) {
var temp = klubCopy[j];
klubCopy[j] = klubCopy[j + 1];
klubCopy[j + 1] = temp;
}
}
}
// return nama klub di peringkat yang diminta
if(peringkat >= 1 && peringkat <= klubCopy.length) {
return klubCopy[peringkat - 1].nama;
} else {
return "Peringkat tidak valid";
}
}
}
// testing kode
console.log("=== Testing Klasemen ===");
// bikin instance klasemen
var klasemen = new Klasemen(['Liverpool', 'Chelsea', 'Arsenal']);
// test pertandingan
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
console.log("Hasil klasemen:");
console.log(klasemen.cetakKlasemen());
console.log("Peringkat 2:", klasemen.ambilPeringkat(2));
// test dengan klub bundesliga
console.log("\n=== Test dengan klub Bundesliga ===");
var klasemen2 = new Klasemen(['Bayern Munich', 'Borussia Dortmund', 'RB Leipzig']);
klasemen2.catatPermainan('Bayern Munich', 'Borussia Dortmund', '3:1');
klasemen2.catatPermainan('RB Leipzig', 'Bayern Munich', '1:2');
console.log("Klasemen Bundesliga:", klasemen2.cetakKlasemen());