fork download
  1. <?php
  2.  
  3. class Klasemen {
  4. private $daftarKlub = [];
  5.  
  6. public function __construct(array $klub) {
  7. foreach ($klub as $namaKlub) {
  8. $this->daftarKlub[$namaKlub] = 0;
  9. }
  10. }
  11.  
  12. public function catatPermainan(string $klubKandang, string $klubTandang, string $skor): void {
  13.  
  14. if (!isset($this->daftarKlub[$klubKandang]) || !isset($this->daftarKlub[$klubTandang])) {
  15. throw new Exception("Salah satu klub tidak terdaftar.");
  16. }
  17.  
  18. list($skorKandang, $skorTandang) = explode(':', $skor);
  19. $skorKandang = intval($skorKandang);
  20. $skorTandang = intval($skorTandang);
  21.  
  22. if ($skorKandang > $skorTandang) {
  23. $this->daftarKlub[$klubKandang] += 3;
  24. } elseif ($skorKandang < $skorTandang) {
  25. $this->daftarKlub[$klubTandang] += 3;
  26. } else {
  27. $this->daftarKlub[$klubKandang] += 1;
  28. $this->daftarKlub[$klubTandang] += 1;
  29. }
  30. }
  31.  
  32. public function tampilkanKlasemen(): void {
  33. $klasemen = $this->cetakKlasemen();
  34.  
  35. echo "=== KLASIFIKASI KLUB ===\n";
  36. echo "---------------------------\n";
  37. echo "No | Klub | Poin\n";
  38. echo "---------------------------\n";
  39.  
  40. $no = 1;
  41. foreach ($klasemen as $klub => $poin) {
  42. echo str_pad($no++, 3, " ", STR_PAD_RIGHT) . "| ";
  43. echo str_pad($klub, 22, " ", STR_PAD_RIGHT) . " | ";
  44. echo "$poin\n";
  45. }
  46. echo "---------------------------\n";
  47. }
  48.  
  49. public function cetakKlasemen(): array {
  50. arsort($this->daftarKlub);
  51. return $this->daftarKlub;
  52. }
  53.  
  54. public function ambilPeringkat(int $nomorPeringkat): string {
  55. $klasemen = $this->cetakKlasemen();
  56.  
  57. if ($nomorPeringkat < 1 || $nomorPeringkat > count($klasemen)) {
  58. throw new Exception("Peringkat tidak tersedia.");
  59. }
  60.  
  61. $peringkat = array_keys($klasemen);
  62. return $peringkat[$nomorPeringkat - 1];
  63. }
  64. }
  65.  
  66. $klasemen = new Klasemen(['Liverpool', 'Chelsea', 'Arsenal']);
  67.  
  68. $klasemen->catatPermainan('Arsenal', 'Liverpool', '2:1');
  69. $klasemen->catatPermainan('Arsenal', 'Chelsea', '1:1');
  70. $klasemen->catatPermainan('Chelsea', 'Arsenal', '0:3');
  71. $klasemen->catatPermainan('Chelsea', 'Liverpool', '3:2');
  72. $klasemen->catatPermainan('Liverpool', 'Arsenal', '2:2');
  73. $klasemen->catatPermainan('Liverpool', 'Chelsea', '0:0');
  74.  
  75.  
  76. print_r($klasemen->cetakKlasemen());
  77.  
  78. echo "\n";
  79. echo $klasemen->ambilPeringkat(2) . "\n";
  80.  
  81.  
  82. echo $klasemen->ambilPeringkat(1) . "\n";
  83. echo $klasemen->ambilPeringkat(3) . "\n";
  84.  
  85. $klasemen->tampilkanKlasemen();
  86. ?>
Success #stdin #stdout 0.02s 26032KB
stdin
Standard input is empty
stdout
Array
(
    [Arsenal] => 8
    [Chelsea] => 5
    [Liverpool] => 2
)

Chelsea
Arsenal
Liverpool
=== KLASIFIKASI KLUB ===
---------------------------
No | Klub                  | Poin
---------------------------
1  | Arsenal                | 8
2  | Chelsea                | 5
3  | Liverpool              | 2
---------------------------