<?php
class Klasemen
{
private $poinKlub = [];
public function __construct
(array $daftarKlub) {
foreach ($daftarKlub as $klub) {
$this->poinKlub[$klub] = 0;
}
}
public function catatPermainan(string $klubKandang, string $klubTandang, string $skor)
{
[$golKandang, $golTandang] = explode(':', $skor); $golKandang = (int)$golKandang;
$golTandang = (int)$golTandang;
if (!isset($this->poinKlub[$klubKandang]) || !isset($this->poinKlub[$klubTandang])) { throw new InvalidArgumentException("Klub tidak terdaftar.");
}
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;
uasort($klasemen, function ($a, $b) { return $b <=> $a; // descending
});
return $klasemen;
}
public function ambilPeringkat(int $nomorPeringkat): string
{
if ($nomorPeringkat < 1 || $nomorPeringkat > count($this->poinKlub)) { throw new OutOfBoundsException("Peringkat tidak tersedia.");
}
$klasemen = $this->cetakKlasemen();
return $klubList[$nomorPeringkat - 1];
}
}
$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
echo "Klasemen:\n";
foreach ($klasemen->cetakKlasemen() as $klub => $poin) {
echo "$klub => $poin\n";
}
// Ambil peringkat ke-3 dengan penanganan error
try {
echo "\nPeringkat ke-2: " . $klasemen->ambilPeringkat(2) . "\n";
} catch (Exception $e) {
echo "\nError: " . $e->getMessage() . "\n";
}
PD9waHAKCmNsYXNzIEtsYXNlbWVuCnsKICAgIHByaXZhdGUgJHBvaW5LbHViID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRkYWZ0YXJLbHViKQogICAgewogICAgICAgIGZvcmVhY2ggKCRkYWZ0YXJLbHViIGFzICRrbHViKSB7CiAgICAgICAgICAgICR0aGlzLT5wb2luS2x1Ylska2x1Yl0gPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2F0YXRQZXJtYWluYW4oc3RyaW5nICRrbHViS2FuZGFuZywgc3RyaW5nICRrbHViVGFuZGFuZywgc3RyaW5nICRza29yKQogICAgewogICAgICAgIFskZ29sS2FuZGFuZywgJGdvbFRhbmRhbmddID0gZXhwbG9kZSgnOicsICRza29yKTsKICAgICAgICAkZ29sS2FuZGFuZyA9IChpbnQpJGdvbEthbmRhbmc7CiAgICAgICAgJGdvbFRhbmRhbmcgPSAoaW50KSRnb2xUYW5kYW5nOwoKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5wb2luS2x1Ylska2x1YkthbmRhbmddKSB8fCAhaXNzZXQoJHRoaXMtPnBvaW5LbHViWyRrbHViVGFuZGFuZ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIktsdWIgdGlkYWsgdGVyZGFmdGFyLiIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRnb2xLYW5kYW5nID4gJGdvbFRhbmRhbmcpIHsKICAgICAgICAgICAgJHRoaXMtPnBvaW5LbHViWyRrbHViS2FuZGFuZ10gKz0gMzsKICAgICAgICB9IGVsc2VpZiAoJGdvbEthbmRhbmcgPCAkZ29sVGFuZGFuZykgewogICAgICAgICAgICAkdGhpcy0+cG9pbktsdWJbJGtsdWJUYW5kYW5nXSArPSAzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wb2luS2x1Ylska2x1YkthbmRhbmddICs9IDE7CiAgICAgICAgICAgICR0aGlzLT5wb2luS2x1Ylska2x1YlRhbmRhbmddICs9IDE7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha0tsYXNlbWVuKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGtsYXNlbWVuID0gJHRoaXMtPnBvaW5LbHViOwoKICAgICAgICB1YXNvcnQoJGtsYXNlbWVuLCBmdW5jdGlvbiAoJGEsICRiKSB7CiAgICAgICAgICAgIHJldHVybiAkYiA8PT4gJGE7IC8vIGRlc2NlbmRpbmcKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuICRrbGFzZW1lbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYW1iaWxQZXJpbmdrYXQoaW50ICRub21vclBlcmluZ2thdCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkbm9tb3JQZXJpbmdrYXQgPCAxIHx8ICRub21vclBlcmluZ2thdCA+IGNvdW50KCR0aGlzLT5wb2luS2x1YikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE91dE9mQm91bmRzRXhjZXB0aW9uKCJQZXJpbmdrYXQgdGlkYWsgdGVyc2VkaWEuIik7CiAgICAgICAgfQoKICAgICAgICAka2xhc2VtZW4gPSAkdGhpcy0+Y2V0YWtLbGFzZW1lbigpOwogICAgICAgICRrbHViTGlzdCA9IGFycmF5X2tleXMoJGtsYXNlbWVuKTsKCiAgICAgICAgcmV0dXJuICRrbHViTGlzdFskbm9tb3JQZXJpbmdrYXQgLSAxXTsKICAgIH0KfQoKJGtsYXNlbWVuID0gbmV3IEtsYXNlbWVuKFsnTGl2ZXJwb29sJywgJ0NoZWxzZWEnLCAnQXJzZW5hbCddKTsKCiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0Fyc2VuYWwnLCAnTGl2ZXJwb29sJywgJzI6MScpOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdBcnNlbmFsJywgJ0NoZWxzZWEnLCAnMToxJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0NoZWxzZWEnLCAnQXJzZW5hbCcsICcwOjMnKTsKJGtsYXNlbWVuLT5jYXRhdFBlcm1haW5hbignQ2hlbHNlYScsICdMaXZlcnBvb2wnLCAnMzoyJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0xpdmVycG9vbCcsICdBcnNlbmFsJywgJzI6MicpOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdMaXZlcnBvb2wnLCAnQ2hlbHNlYScsICcwOjAnKTsKCi8vIENldGFrIGtsYXNlbWVuCmVjaG8gIktsYXNlbWVuOlxuIjsKZm9yZWFjaCAoJGtsYXNlbWVuLT5jZXRha0tsYXNlbWVuKCkgYXMgJGtsdWIgPT4gJHBvaW4pIHsKICAgIGVjaG8gIiRrbHViID0+ICRwb2luXG4iOwp9CgovLyBBbWJpbCBwZXJpbmdrYXQga2UtMyBkZW5nYW4gcGVuYW5nYW5hbiBlcnJvcgp0cnkgewogICAgZWNobyAiXG5QZXJpbmdrYXQga2UtMjogIiAuICRrbGFzZW1lbi0+YW1iaWxQZXJpbmdrYXQoMikgLiAiXG4iOwp9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgIGVjaG8gIlxuRXJyb3I6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpIC4gIlxuIjsKfQo=