<?php
class Klasemen {
private $poinKlub;
// Untuk constructor untuk menginisialisasi daftar klub dengan poin 0
public function __construct($daftarKlub) {
}
// Untuk mencatat hasil pertandingan dan memperbarui poin
public function catatPermainan($klubKandang, $klubTandang, $skor) {
// Validasi klub ada dalam daftar
if (!isset($this->poinKlub[$klubKandang]) || !isset($this->poinKlub[$klubTandang])) { return;
}
// Untuk parse skor uang menggunakan (format X:Y)
list($skorKandang, $skorTandang) = explode(':', $skor); $skorKandang = (int)$skorKandang;
$skorTandang = (int)$skorTandang;
// Untuk menentukan poin berdasarkan hasil pertandingan
if ($skorKandang > $skorTandang) {
$this->poinKlub[$klubKandang] += 3; // Pemenang kandang
} elseif ($skorTandang > $skorKandang) {
$this->poinKlub[$klubTandang] += 3; // Pemenang tandang
} else {
$this->poinKlub[$klubKandang] += 1; // Seri
$this->poinKlub[$klubTandang] += 1; // Seri
}
}
// Untuk mengembalikan klasemen dalam array yang diurutkan berdasarkan poin
public function cetakKlasemen() {
$klasemen = $this->poinKlub;
// Untuk mengurutkan berdasarkan poin (menurun) dan nama klub (alfabetis jika poin sama)
uasort($klasemen, function($a, $b) { if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
});
return $klasemen;
}
// Untuk mengembalikan nama klub pada peringkat tertentu
public function ambilPeringkat($nomorPeringkat) {
$klasemen = $this->cetakKlasemen();
// Konversi ke 0-based index dan validasi
$index = $nomorPeringkat - 1;
return ($index >= 0 && $index < count($klub)) ?
$klub[$index] : null; }
}
// Untuk pengujiannya
$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');
print_r($klasemen->cetakKlasemen()); echo $klasemen->ambilPeringkat(2) . "\n";
?>
PD9waHAKY2xhc3MgS2xhc2VtZW4gewogICAgcHJpdmF0ZSAkcG9pbktsdWI7CgogICAgLy8gVW50dWsgY29uc3RydWN0b3IgdW50dWsgbWVuZ2luaXNpYWxpc2FzaSBkYWZ0YXIga2x1YiBkZW5nYW4gcG9pbiAwCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhZnRhcktsdWIpIHsKICAgICAgICAkdGhpcy0+cG9pbktsdWIgPSBhcnJheV9maWxsX2tleXMoJGRhZnRhcktsdWIsIDApOwogICAgfQoKICAgIC8vIFVudHVrIG1lbmNhdGF0IGhhc2lsIHBlcnRhbmRpbmdhbiBkYW4gbWVtcGVyYmFydWkgcG9pbgogICAgcHVibGljIGZ1bmN0aW9uIGNhdGF0UGVybWFpbmFuKCRrbHViS2FuZGFuZywgJGtsdWJUYW5kYW5nLCAkc2tvcikgewogICAgICAgIC8vIFZhbGlkYXNpIGtsdWIgYWRhIGRhbGFtIGRhZnRhcgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnBvaW5LbHViWyRrbHViS2FuZGFuZ10pIHx8ICFpc3NldCgkdGhpcy0+cG9pbktsdWJbJGtsdWJUYW5kYW5nXSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gVW50dWsgcGFyc2Ugc2tvciB1YW5nIG1lbmdndW5ha2FuIChmb3JtYXQgWDpZKQogICAgICAgIGxpc3QoJHNrb3JLYW5kYW5nLCAkc2tvclRhbmRhbmcpID0gZXhwbG9kZSgnOicsICRza29yKTsKICAgICAgICAkc2tvckthbmRhbmcgPSAoaW50KSRza29yS2FuZGFuZzsKICAgICAgICAkc2tvclRhbmRhbmcgPSAoaW50KSRza29yVGFuZGFuZzsKCiAgICAgICAgLy8gVW50dWsgbWVuZW50dWthbiBwb2luIGJlcmRhc2Fya2FuIGhhc2lsIHBlcnRhbmRpbmdhbgogICAgICAgIGlmICgkc2tvckthbmRhbmcgPiAkc2tvclRhbmRhbmcpIHsKICAgICAgICAgICAgJHRoaXMtPnBvaW5LbHViWyRrbHViS2FuZGFuZ10gKz0gMzsgLy8gUGVtZW5hbmcga2FuZGFuZwogICAgICAgIH0gZWxzZWlmICgkc2tvclRhbmRhbmcgPiAkc2tvckthbmRhbmcpIHsKICAgICAgICAgICAgJHRoaXMtPnBvaW5LbHViWyRrbHViVGFuZGFuZ10gKz0gMzsgLy8gUGVtZW5hbmcgdGFuZGFuZwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wb2luS2x1Ylska2x1YkthbmRhbmddICs9IDE7IC8vIFNlcmkKICAgICAgICAgICAgJHRoaXMtPnBvaW5LbHViWyRrbHViVGFuZGFuZ10gKz0gMTsgLy8gU2VyaQogICAgICAgIH0KICAgIH0KCiAgICAvLyBVbnR1ayBtZW5nZW1iYWxpa2FuIGtsYXNlbWVuIGRhbGFtIGFycmF5IHlhbmcgZGl1cnV0a2FuIGJlcmRhc2Fya2FuIHBvaW4KICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha0tsYXNlbWVuKCkgewogICAgICAgICRrbGFzZW1lbiA9ICR0aGlzLT5wb2luS2x1YjsKICAgICAgICAvLyBVbnR1ayBtZW5ndXJ1dGthbiBiZXJkYXNhcmthbiBwb2luIChtZW51cnVuKSBkYW4gbmFtYSBrbHViIChhbGZhYmV0aXMgamlrYSBwb2luIHNhbWEpCiAgICAgICAgdWFzb3J0KCRrbGFzZW1lbiwgZnVuY3Rpb24oJGEsICRiKSB7CiAgICAgICAgICAgIGlmICgkYSA9PSAkYikgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICgkYSA+ICRiKSA/IC0xIDogMTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gJGtsYXNlbWVuOwogICAgfQoKICAgIC8vIFVudHVrIG1lbmdlbWJhbGlrYW4gbmFtYSBrbHViIHBhZGEgcGVyaW5na2F0IHRlcnRlbnR1CiAgICBwdWJsaWMgZnVuY3Rpb24gYW1iaWxQZXJpbmdrYXQoJG5vbW9yUGVyaW5na2F0KSB7CiAgICAgICAgJGtsYXNlbWVuID0gJHRoaXMtPmNldGFrS2xhc2VtZW4oKTsKICAgICAgICAka2x1YiA9IGFycmF5X2tleXMoJGtsYXNlbWVuKTsKICAgICAgICAvLyBLb252ZXJzaSBrZSAwLWJhc2VkIGluZGV4IGRhbiB2YWxpZGFzaQogICAgICAgICRpbmRleCA9ICRub21vclBlcmluZ2thdCAtIDE7CiAgICAgICAgcmV0dXJuICgkaW5kZXggPj0gMCAmJiAkaW5kZXggPCBjb3VudCgka2x1YikpID8gJGtsdWJbJGluZGV4XSA6IG51bGw7CiAgICB9Cn0KCi8vIFVudHVrIHBlbmd1amlhbm55YQoka2xhc2VtZW4gPSBuZXcgS2xhc2VtZW4oWydMaXZlcnBvb2wnLCAnQ2hlbHNlYScsICdBcnNlbmFsJ10pOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdBcnNlbmFsJywgJ0xpdmVycG9vbCcsICcyOjEnKTsKJGtsYXNlbWVuLT5jYXRhdFBlcm1haW5hbignQXJzZW5hbCcsICdDaGVsc2VhJywgJzE6MScpOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdDaGVsc2VhJywgJ0Fyc2VuYWwnLCAnMDozJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0NoZWxzZWEnLCAnTGl2ZXJwb29sJywgJzM6MicpOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdMaXZlcnBvb2wnLCAnQXJzZW5hbCcsICcyOjInKTsKJGtsYXNlbWVuLT5jYXRhdFBlcm1haW5hbignTGl2ZXJwb29sJywgJ0NoZWxzZWEnLCAnMDowJyk7CnByaW50X3IoJGtsYXNlbWVuLT5jZXRha0tsYXNlbWVuKCkpOwplY2hvICRrbGFzZW1lbi0+YW1iaWxQZXJpbmdrYXQoMikgLiAiXG4iOwo/Pg==