// Soal 2
// By Taufiq Hidayatullah
/**
* Class untuk mencatat dan mengelola klasemen poin klub sepak bola.
* @param {string[]} clubs - Array berisi nama-nama klub yang berpartisipasi.
*/
class Klasemen {
constructor(clubs = []) {
this.points = {};
clubs.forEach(club => {
// Menghapus spasi ekstra dari nama klub jika ada
const trimmedClub = club.trim();
if (trimmedClub) {
this.points[trimmedClub] = 0;
}
});
}
/**
* Mencatat hasil satu pertandingan dan memperbarui poin klub.
* @param {string} klubKandang - Nama klub tuan rumah.
* @param {string} klubTandang - Nama klub tamu.
* @param {string} skor - Skor pertandingan dalam format "skorKandang:skorTandang".
*/
catatPermainan(klubKandang, klubTandang, skor) {
const [skorKandang, skorTandang] = skor.split(':').map(Number);
if (skorKandang > skorTandang) {
this.points[klubKandang] += 3;
} else if (skorTandang > skorKandang) {
this.points[klubTandang] += 3;
} else {
this.points[klubKandang] += 1;
this.points[klubTandang] += 1;
}
}
/**
* Mengembalikan daftar klub yang sudah diurutkan berdasarkan poin tertinggi.
* @returns {string[]} - Array nama klub terurut.
*/
_getSortedKlasemen() {
return Object.keys(this.points).sort((a, b) => this.points[b] - this.points[a]);
}
/**
* Mencetak klasemen akhir yang terurut berdasarkan poin.
* @returns {Object} - Object yang berisi nama klub dan poinnya.
*/
cetakKlasemen() {
const sortedClubs = this._getSortedKlasemen();
const result = {};
sortedClubs.forEach(club => {
result[club] = this.points[club];
});
return result;
}
/**
* Mengambil nama klub pada peringkat tertentu.
* @param {number} nomorPeringkat - Peringkat yang ingin dicari (dimulai dari 1).
* @returns {string} - Nama klub pada peringkat tersebut.
*/
ambilPeringkat(nomorPeringkat) {
const sortedClubs = this._getSortedKlasemen();
if (nomorPeringkat > 0 && nomorPeringkat <= sortedClubs.length) {
return sortedClubs[nomorPeringkat - 1];
}
return "Peringkat tidak valid";
}
}
let inputData = '';
process.stdin.on('data', (chunk) => {
inputData += chunk;
});
process.stdin.on('end', () => {
const lines = inputData.trim().split('\n');
const peringkatToFind = parseInt(lines.pop(), 10);
const clubList = lines.shift().split(',');
const klasemen = new Klasemen(clubList);
lines.forEach(line => {
const [klubKandang, klubTandang, skor] = line.split(',');
if (klubKandang && klubTandang && skor) {
klasemen.catatPermainan(klubKandang, klubTandang, skor);
}
});
console.log("--- Hasil cetakKlasemen() ---");
console.log(JSON.stringify(klasemen.cetakKlasemen(), null, 2));
console.log(`\n--- Hasil ambilPeringkat(${peringkatToFind}) ---`);
console.log(klasemen.ambilPeringkat(peringkatToFind));
});