<?php
class Klasemen
{
/** @var array */
private $poin = [];
/** @param array $daftarKlub */
public function __construct
(array $daftarKlub) {
foreach ($daftarKlub as $klub) {
$this->poin[$klub] = 0;
}
}
public function catatPermainan($klubKandang, $klubTandang, $skor)
{
foreach ([$klubKandang, $klubTandang] as $klub) {
if (!isset($this->poin[$klub])) { throw new \InvalidArgumentException("Klub \"$klub\" tidak terdaftar.");
}
}
if ($golKdg > $golTdg) {
$this->poin[$klubKandang] += 3;
} elseif ($golKdg < $golTdg) {
$this->poin[$klubTandang] += 3;
} else {
$this->poin[$klubKandang]++;
$this->poin[$klubTandang]++;
}
}
public function cetakKlasemen()
{
$sorted = $this->poin;
uasort($sorted, function ($pA, $pB) use ($sorted) { if ($pA === $pB) {
return strcmp($namaA, $namaB); }
return $pB <=> $pA;
});
return $sorted;
}
public function ambilPeringkat($n)
{
if ($n < 1) {
throw new \InvalidArgumentException('Nomor peringkat ≥ 1');
}
return isset($keys[$n - 1]) ?
$keys[$n - 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');
print_r($klasemen->cetakKlasemen()); echo 'Peringkat 2: ' . $klasemen->ambilPeringkat(2) . PHP_EOL;
PD9waHAKCmNsYXNzIEtsYXNlbWVuCnsKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRwb2luID0gW107CgogICAgLyoqIEBwYXJhbSBhcnJheSAkZGFmdGFyS2x1YiAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRkYWZ0YXJLbHViKQogICAgewogICAgICAgIGZvcmVhY2ggKCRkYWZ0YXJLbHViIGFzICRrbHViKSB7CiAgICAgICAgICAgICR0aGlzLT5wb2luWyRrbHViXSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYXRhdFBlcm1haW5hbigka2x1YkthbmRhbmcsICRrbHViVGFuZGFuZywgJHNrb3IpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWyRrbHViS2FuZGFuZywgJGtsdWJUYW5kYW5nXSBhcyAka2x1YikgewogICAgICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5wb2luWyRrbHViXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJLbHViIFwiJGtsdWJcIiB0aWRhayB0ZXJkYWZ0YXIuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGxpc3QoJGdvbEtkZywgJGdvbFRkZykgPSBhcnJheV9tYXAoJ2ludHZhbCcsIGV4cGxvZGUoJzonLCAkc2tvcikpOwoKICAgICAgICBpZiAoJGdvbEtkZyA+ICRnb2xUZGcpIHsKICAgICAgICAgICAgJHRoaXMtPnBvaW5bJGtsdWJLYW5kYW5nXSArPSAzOwogICAgICAgIH0gZWxzZWlmICgkZ29sS2RnIDwgJGdvbFRkZykgewogICAgICAgICAgICAkdGhpcy0+cG9pblska2x1YlRhbmRhbmddICs9IDM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnBvaW5bJGtsdWJLYW5kYW5nXSsrOwogICAgICAgICAgICAkdGhpcy0+cG9pblska2x1YlRhbmRhbmddKys7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha0tsYXNlbWVuKCkKICAgIHsKICAgICAgICAkc29ydGVkID0gJHRoaXMtPnBvaW47CiAgICAgICAgdWFzb3J0KCRzb3J0ZWQsIGZ1bmN0aW9uICgkcEEsICRwQikgdXNlICgkc29ydGVkKSB7CiAgICAgICAgICAgIGlmICgkcEEgPT09ICRwQikgewogICAgICAgICAgICAgICAgJG5hbWFBID0gYXJyYXlfc2VhcmNoKCRwQSwgJHNvcnRlZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAkbmFtYUIgPSBhcnJheV9zZWFyY2goJHBCLCAkc29ydGVkLCB0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJG5hbWFBLCAkbmFtYUIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkcEIgPD0+ICRwQTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gJHNvcnRlZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYW1iaWxQZXJpbmdrYXQoJG4pCiAgICB7CiAgICAgICAgaWYgKCRuIDwgMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignTm9tb3IgcGVyaW5na2F0IOKJpSAxJyk7CiAgICAgICAgfQogICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkdGhpcy0+Y2V0YWtLbGFzZW1lbigpKTsKICAgICAgICByZXR1cm4gaXNzZXQoJGtleXNbJG4gLSAxXSkgPyAka2V5c1skbiAtIDFdIDogJyc7CiAgICB9Cn0KCiRrbGFzZW1lbiA9IG5ldyBLbGFzZW1lbihbJ0xpdmVycG9vbCcsICdDaGVsc2VhJywgJ0Fyc2VuYWwnXSk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0Fyc2VuYWwnLCAgICdMaXZlcnBvb2wnLCAnMjoxJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0Fyc2VuYWwnLCAgICdDaGVsc2VhJywgICAnMToxJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0NoZWxzZWEnLCAgICdBcnNlbmFsJywgICAnMDozJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0NoZWxzZWEnLCAgICdMaXZlcnBvb2wnLCAnMzoyJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0xpdmVycG9vbCcsICdBcnNlbmFsJywgICAnMjoyJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0xpdmVycG9vbCcsICdDaGVsc2VhJywgICAnMDowJyk7CgpwcmludF9yKCRrbGFzZW1lbi0+Y2V0YWtLbGFzZW1lbigpKTsKZWNobyAnUGVyaW5na2F0IDI6ICcgLiAka2xhc2VtZW4tPmFtYmlsUGVyaW5na2F0KDIpIC4gUEhQX0VPTDsK