<?php
class Klasemen {
private $poinKlub = [];
public function __construct
(array $klubList) { foreach ($klubList as $klub) {
$this->poinKlub[$klub] = 0;
}
}
public function catatPermainan(string $klubKandang, string $klubTandang, string $skor) {
$golKandang = (int)$golKandang;
$golTandang = (int)$golTandang;
if ($golKandang > $golTandang) {
$this->poinKlub[$klubKandang] += 3;
} elseif ($golKandang < $golTandang) {
$this->poinKlub[$klubTandang] += 3;
} else {
$this->poinKlub[$klubKandang] += 1;
$this->poinKlub[$klubTandang] += 1;
}
}
public function cetakKlasemen
(): array { $klasemen = $this->poinKlub;
// Urut berdasarkan poin menurun, jika sama urut nama klub naik
uksort($klasemen, function($a, $b) use ($klasemen) { if ($klasemen[$a] === $klasemen[$b]) {
return strcmp($a, $b); // urut nama }
return $klasemen[$b] - $klasemen[$a]; // urut poin menurun
});
return $klasemen;
}
public function ambilPeringkat(int $nomorPeringkat): string {
if ($nomorPeringkat >= 1 && $nomorPeringkat <= count($klasemen)) { return $klasemen[$nomorPeringkat - 1];
}
return "Peringkat tidak tersedia";
}
}
// ====== Contoh Penggunaan ======
$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 klasemen
print_r($klasemen->cetakKlasemen());
// Ambil peringkat ke-2
echo "Peringkat ke-2: " . $klasemen->ambilPeringkat(2) . PHP_EOL;
PD9waHAKCmNsYXNzIEtsYXNlbWVuIHsKICAgIHByaXZhdGUgJHBvaW5LbHViID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRrbHViTGlzdCkgewogICAgICAgIGZvcmVhY2ggKCRrbHViTGlzdCBhcyAka2x1YikgewogICAgICAgICAgICAkdGhpcy0+cG9pbktsdWJbJGtsdWJdID0gMDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNhdGF0UGVybWFpbmFuKHN0cmluZyAka2x1YkthbmRhbmcsIHN0cmluZyAka2x1YlRhbmRhbmcsIHN0cmluZyAkc2tvcikgewogICAgICAgIGxpc3QoJGdvbEthbmRhbmcsICRnb2xUYW5kYW5nKSA9IGV4cGxvZGUoJzonLCAkc2tvcik7CiAgICAgICAgJGdvbEthbmRhbmcgPSAoaW50KSRnb2xLYW5kYW5nOwogICAgICAgICRnb2xUYW5kYW5nID0gKGludCkkZ29sVGFuZGFuZzsKCiAgICAgICAgaWYgKCRnb2xLYW5kYW5nID4gJGdvbFRhbmRhbmcpIHsKICAgICAgICAgICAgJHRoaXMtPnBvaW5LbHViWyRrbHViS2FuZGFuZ10gKz0gMzsKICAgICAgICB9IGVsc2VpZiAoJGdvbEthbmRhbmcgPCAkZ29sVGFuZGFuZykgewogICAgICAgICAgICAkdGhpcy0+cG9pbktsdWJbJGtsdWJUYW5kYW5nXSArPSAzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wb2luS2x1Ylska2x1YkthbmRhbmddICs9IDE7CiAgICAgICAgICAgICR0aGlzLT5wb2luS2x1Ylska2x1YlRhbmRhbmddICs9IDE7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha0tsYXNlbWVuKCk6IGFycmF5IHsKICAgICAgICAka2xhc2VtZW4gPSAkdGhpcy0+cG9pbktsdWI7CgogICAgICAgIC8vIFVydXQgYmVyZGFzYXJrYW4gcG9pbiBtZW51cnVuLCBqaWthIHNhbWEgdXJ1dCBuYW1hIGtsdWIgbmFpawogICAgICAgIHVrc29ydCgka2xhc2VtZW4sIGZ1bmN0aW9uKCRhLCAkYikgdXNlICgka2xhc2VtZW4pIHsKICAgICAgICAgICAgaWYgKCRrbGFzZW1lblskYV0gPT09ICRrbGFzZW1lblskYl0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJGEsICRiKTsgLy8gdXJ1dCBuYW1hCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICRrbGFzZW1lblskYl0gLSAka2xhc2VtZW5bJGFdOyAvLyB1cnV0IHBvaW4gbWVudXJ1bgogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gJGtsYXNlbWVuOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbWJpbFBlcmluZ2thdChpbnQgJG5vbW9yUGVyaW5na2F0KTogc3RyaW5nIHsKICAgICAgICAka2xhc2VtZW4gPSBhcnJheV9rZXlzKCR0aGlzLT5jZXRha0tsYXNlbWVuKCkpOwogICAgICAgIGlmICgkbm9tb3JQZXJpbmdrYXQgPj0gMSAmJiAkbm9tb3JQZXJpbmdrYXQgPD0gY291bnQoJGtsYXNlbWVuKSkgewogICAgICAgICAgICByZXR1cm4gJGtsYXNlbWVuWyRub21vclBlcmluZ2thdCAtIDFdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gIlBlcmluZ2thdCB0aWRhayB0ZXJzZWRpYSI7CiAgICB9Cn0KCi8vID09PT09PSBDb250b2ggUGVuZ2d1bmFhbiA9PT09PT0KJGtsYXNlbWVuID0gbmV3IEtsYXNlbWVuKFsnTGl2ZXJwb29sJywgJ0NoZWxzZWEnLCAnQXJzZW5hbCddKTsKCiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0Fyc2VuYWwnLCAnTGl2ZXJwb29sJywgJzI6MScpOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdBcnNlbmFsJywgJ0NoZWxzZWEnLCAnMToxJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0NoZWxzZWEnLCAnQXJzZW5hbCcsICcwOjMnKTsKJGtsYXNlbWVuLT5jYXRhdFBlcm1haW5hbignQ2hlbHNlYScsICdMaXZlcnBvb2wnLCAnMzoyJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0xpdmVycG9vbCcsICdBcnNlbmFsJywgJzI6MicpOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdMaXZlcnBvb2wnLCAnQ2hlbHNlYScsICcwOjAnKTsKCi8vIENldGFrIGtsYXNlbWVuCnByaW50X3IoJGtsYXNlbWVuLT5jZXRha0tsYXNlbWVuKCkpOwoKLy8gQW1iaWwgcGVyaW5na2F0IGtlLTIKZWNobyAiUGVyaW5na2F0IGtlLTI6ICIgLiAka2xhc2VtZW4tPmFtYmlsUGVyaW5na2F0KDIpIC4gUEhQX0VPTDs=