<?php
class Klasemen {
private $clubs;
private $points;
// Constructor to initialize clubs
public function __construct($clubList) {
$this->clubs = $clubList;
}
// Method to record match results
public function catatPertandingan($homeClub, $awayClub, $score) {
// Find indices of the clubs
// Validate clubs exist
if ($homeIndex === false || $awayIndex === false) {
throw new Exception("Club not found in the league");
}
// Parse scores
// Determine points allocation
if ($homeScore > $awayScore) {
// Home team wins
$this->points[$homeIndex] += 3;
} elseif ($homeScore < $awayScore) {
// Away team wins
$this->points[$awayIndex] += 3;
} else {
// Draw
$this->points[$homeIndex] += 1;
$this->points[$awayIndex] += 1;
}
}
// Method to print current league standings
public function cetakKlasemen() {
// Create an array of club-point pairs for sorting
$standings = array_map(null, $this->clubs, $this->points);
// Sort standings by points in descending order
usort($standings, function($a, $b) { return $b[1] - $a[1];
});
// Print or return standings
$result = [];
foreach ($standings as $standing) {
$result[$standing[0]] = $standing[1];
}
return $result;
}
// Method to get club ranking by position
public function ambilPeringkat($position) {
$standings = $this->cetakKlasemen();
// Check if position is valid
if ($position < 1 || $position > count($ranks)) { throw new Exception("Invalid ranking position");
}
return $ranks[$position - 1];
}
}
// Example usage
$klasemen = new Klasemen(['Liverpool', 'Chelsea', 'Arsenal']);
$klasemen->catatPertandingan('Arsenal', 'Liverpool', '2:1');
$klasemen->catatPertandingan('Arsenal', 'Chelsea', '1:1');
$klasemen->catatPertandingan('Chelsea', 'Arsenal', '0:3');
$klasemen->catatPertandingan('Chelsea', 'Liverpool', '3:2');
$klasemen->catatPertandingan('Liverpool', 'Arsenal', '2:2');
$klasemen->catatPertandingan('Liverpool', 'Chelsea', '0:0');
// Print standings
print_r($klasemen->cetakKlasemen());
// Get club at specific ranking
echo $klasemen->ambilPeringkat(2);
?>
Cjw/cGhwCmNsYXNzIEtsYXNlbWVuIHsKICAgIHByaXZhdGUgJGNsdWJzOwogICAgcHJpdmF0ZSAkcG9pbnRzOwoKICAgIC8vIENvbnN0cnVjdG9yIHRvIGluaXRpYWxpemUgY2x1YnMKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY2x1Ykxpc3QpIHsKICAgICAgICAkdGhpcy0+Y2x1YnMgPSAkY2x1Ykxpc3Q7CiAgICAgICAgJHRoaXMtPnBvaW50cyA9IGFycmF5X2ZpbGwoMCwgY291bnQoJGNsdWJMaXN0KSwgMCk7CiAgICB9CgogICAgLy8gTWV0aG9kIHRvIHJlY29yZCBtYXRjaCByZXN1bHRzCiAgICBwdWJsaWMgZnVuY3Rpb24gY2F0YXRQZXJ0YW5kaW5nYW4oJGhvbWVDbHViLCAkYXdheUNsdWIsICRzY29yZSkgewogICAgICAgIC8vIEZpbmQgaW5kaWNlcyBvZiB0aGUgY2x1YnMKICAgICAgICAkaG9tZUluZGV4ID0gYXJyYXlfc2VhcmNoKCRob21lQ2x1YiwgJHRoaXMtPmNsdWJzKTsKICAgICAgICAkYXdheUluZGV4ID0gYXJyYXlfc2VhcmNoKCRhd2F5Q2x1YiwgJHRoaXMtPmNsdWJzKTsKCiAgICAgICAgLy8gVmFsaWRhdGUgY2x1YnMgZXhpc3QKICAgICAgICBpZiAoJGhvbWVJbmRleCA9PT0gZmFsc2UgfHwgJGF3YXlJbmRleCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2x1YiBub3QgZm91bmQgaW4gdGhlIGxlYWd1ZSIpOwogICAgICAgIH0KCiAgICAgICAgLy8gUGFyc2Ugc2NvcmVzCiAgICAgICAgbGlzdCgkaG9tZVNjb3JlLCAkYXdheVNjb3JlKSA9IGV4cGxvZGUoJzonLCAkc2NvcmUpOwoKICAgICAgICAvLyBEZXRlcm1pbmUgcG9pbnRzIGFsbG9jYXRpb24KICAgICAgICBpZiAoJGhvbWVTY29yZSA+ICRhd2F5U2NvcmUpIHsKICAgICAgICAgICAgLy8gSG9tZSB0ZWFtIHdpbnMKICAgICAgICAgICAgJHRoaXMtPnBvaW50c1skaG9tZUluZGV4XSArPSAzOwogICAgICAgIH0gZWxzZWlmICgkaG9tZVNjb3JlIDwgJGF3YXlTY29yZSkgewogICAgICAgICAgICAvLyBBd2F5IHRlYW0gd2lucwogICAgICAgICAgICAkdGhpcy0+cG9pbnRzWyRhd2F5SW5kZXhdICs9IDM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gRHJhdwogICAgICAgICAgICAkdGhpcy0+cG9pbnRzWyRob21lSW5kZXhdICs9IDE7CiAgICAgICAgICAgICR0aGlzLT5wb2ludHNbJGF3YXlJbmRleF0gKz0gMTsKICAgICAgICB9CiAgICB9CgogICAgLy8gTWV0aG9kIHRvIHByaW50IGN1cnJlbnQgbGVhZ3VlIHN0YW5kaW5ncwogICAgcHVibGljIGZ1bmN0aW9uIGNldGFrS2xhc2VtZW4oKSB7CiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIGNsdWItcG9pbnQgcGFpcnMgZm9yIHNvcnRpbmcKICAgICAgICAkc3RhbmRpbmdzID0gYXJyYXlfbWFwKG51bGwsICR0aGlzLT5jbHVicywgJHRoaXMtPnBvaW50cyk7CiAgICAgICAgCiAgICAgICAgLy8gU29ydCBzdGFuZGluZ3MgYnkgcG9pbnRzIGluIGRlc2NlbmRpbmcgb3JkZXIKICAgICAgICB1c29ydCgkc3RhbmRpbmdzLCBmdW5jdGlvbigkYSwgJGIpIHsKICAgICAgICAgICAgcmV0dXJuICRiWzFdIC0gJGFbMV07CiAgICAgICAgfSk7CgogICAgICAgIC8vIFByaW50IG9yIHJldHVybiBzdGFuZGluZ3MKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgZm9yZWFjaCAoJHN0YW5kaW5ncyBhcyAkc3RhbmRpbmcpIHsKICAgICAgICAgICAgJHJlc3VsdFskc3RhbmRpbmdbMF1dID0gJHN0YW5kaW5nWzFdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvLyBNZXRob2QgdG8gZ2V0IGNsdWIgcmFua2luZyBieSBwb3NpdGlvbgogICAgcHVibGljIGZ1bmN0aW9uIGFtYmlsUGVyaW5na2F0KCRwb3NpdGlvbikgewogICAgICAgICRzdGFuZGluZ3MgPSAkdGhpcy0+Y2V0YWtLbGFzZW1lbigpOwogICAgICAgICRyYW5rcyA9IGFycmF5X2tleXMoJHN0YW5kaW5ncyk7CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgcG9zaXRpb24gaXMgdmFsaWQKICAgICAgICBpZiAoJHBvc2l0aW9uIDwgMSB8fCAkcG9zaXRpb24gPiBjb3VudCgkcmFua3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgcmFua2luZyBwb3NpdGlvbiIpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJHJhbmtzWyRwb3NpdGlvbiAtIDFdOwogICAgfQp9CgovLyBFeGFtcGxlIHVzYWdlCiRrbGFzZW1lbiA9IG5ldyBLbGFzZW1lbihbJ0xpdmVycG9vbCcsICdDaGVsc2VhJywgJ0Fyc2VuYWwnXSk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJ0YW5kaW5nYW4oJ0Fyc2VuYWwnLCAnTGl2ZXJwb29sJywgJzI6MScpOwoka2xhc2VtZW4tPmNhdGF0UGVydGFuZGluZ2FuKCdBcnNlbmFsJywgJ0NoZWxzZWEnLCAnMToxJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJ0YW5kaW5nYW4oJ0NoZWxzZWEnLCAnQXJzZW5hbCcsICcwOjMnKTsKJGtsYXNlbWVuLT5jYXRhdFBlcnRhbmRpbmdhbignQ2hlbHNlYScsICdMaXZlcnBvb2wnLCAnMzoyJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJ0YW5kaW5nYW4oJ0xpdmVycG9vbCcsICdBcnNlbmFsJywgJzI6MicpOwoka2xhc2VtZW4tPmNhdGF0UGVydGFuZGluZ2FuKCdMaXZlcnBvb2wnLCAnQ2hlbHNlYScsICcwOjAnKTsKCi8vIFByaW50IHN0YW5kaW5ncwpwcmludF9yKCRrbGFzZW1lbi0+Y2V0YWtLbGFzZW1lbigpKTsKCi8vIEdldCBjbHViIGF0IHNwZWNpZmljIHJhbmtpbmcKZWNobyAka2xhc2VtZW4tPmFtYmlsUGVyaW5na2F0KDIpOwo/Pgo=