fork download
  1. <?php
  2. class Klasemen {
  3. private $poinKlub;
  4.  
  5. // Untuk constructor untuk menginisialisasi daftar klub dengan poin 0
  6. public function __construct($daftarKlub) {
  7. $this->poinKlub = array_fill_keys($daftarKlub, 0);
  8. }
  9.  
  10. // Untuk mencatat hasil pertandingan dan memperbarui poin
  11. public function catatPermainan($klubKandang, $klubTandang, $skor) {
  12. // Validasi klub ada dalam daftar
  13. if (!isset($this->poinKlub[$klubKandang]) || !isset($this->poinKlub[$klubTandang])) {
  14. return;
  15. }
  16.  
  17. // Untuk parse skor uang menggunakan (format X:Y)
  18. list($skorKandang, $skorTandang) = explode(':', $skor);
  19. $skorKandang = (int)$skorKandang;
  20. $skorTandang = (int)$skorTandang;
  21.  
  22. // Untuk menentukan poin berdasarkan hasil pertandingan
  23. if ($skorKandang > $skorTandang) {
  24. $this->poinKlub[$klubKandang] += 3; // Pemenang kandang
  25. } elseif ($skorTandang > $skorKandang) {
  26. $this->poinKlub[$klubTandang] += 3; // Pemenang tandang
  27. } else {
  28. $this->poinKlub[$klubKandang] += 1; // Seri
  29. $this->poinKlub[$klubTandang] += 1; // Seri
  30. }
  31. }
  32.  
  33. // Untuk mengembalikan klasemen dalam array yang diurutkan berdasarkan poin
  34. public function cetakKlasemen() {
  35. $klasemen = $this->poinKlub;
  36. // Untuk mengurutkan berdasarkan poin (menurun) dan nama klub (alfabetis jika poin sama)
  37. uasort($klasemen, function($a, $b) {
  38. if ($a == $b) {
  39. return 0;
  40. }
  41. return ($a > $b) ? -1 : 1;
  42. });
  43. return $klasemen;
  44. }
  45.  
  46. // Untuk mengembalikan nama klub pada peringkat tertentu
  47. public function ambilPeringkat($nomorPeringkat) {
  48. $klasemen = $this->cetakKlasemen();
  49. $klub = array_keys($klasemen);
  50. // Konversi ke 0-based index dan validasi
  51. $index = $nomorPeringkat - 1;
  52. return ($index >= 0 && $index < count($klub)) ? $klub[$index] : null;
  53. }
  54. }
  55.  
  56. // Untuk pengujiannya
  57. $klasemen = new Klasemen(['Liverpool', 'Chelsea', 'Arsenal']);
  58. $klasemen->catatPermainan('Arsenal', 'Liverpool', '2:1');
  59. $klasemen->catatPermainan('Arsenal', 'Chelsea', '1:1');
  60. $klasemen->catatPermainan('Chelsea', 'Arsenal', '0:3');
  61. $klasemen->catatPermainan('Chelsea', 'Liverpool', '3:2');
  62. $klasemen->catatPermainan('Liverpool', 'Arsenal', '2:2');
  63. $klasemen->catatPermainan('Liverpool', 'Chelsea', '0:0');
  64. print_r($klasemen->cetakKlasemen());
  65. echo $klasemen->ambilPeringkat(2) . "\n";
  66. ?>
Success #stdin #stdout 0.03s 25760KB
stdin
Standard input is empty
stdout
Array
(
    [Arsenal] => 8
    [Chelsea] => 5
    [Liverpool] => 2
)
Chelsea