fork download
  1. <?php
  2.  
  3. class Klasemen
  4. {
  5. private $poinKlub = [];
  6.  
  7. public function __construct(array $daftarKlub)
  8. {
  9. foreach ($daftarKlub as $klub) {
  10. $this->poinKlub[$klub] = 0;
  11. }
  12. }
  13.  
  14. public function catatPermainan(string $klubKandang, string $klubTandang, string $skor)
  15. {
  16. [$golKandang, $golTandang] = explode(':', $skor);
  17. $golKandang = (int)$golKandang;
  18. $golTandang = (int)$golTandang;
  19.  
  20. if (!isset($this->poinKlub[$klubKandang]) || !isset($this->poinKlub[$klubTandang])) {
  21. throw new InvalidArgumentException("Klub tidak terdaftar.");
  22. }
  23.  
  24. if ($golKandang > $golTandang) {
  25. $this->poinKlub[$klubKandang] += 3;
  26. } elseif ($golKandang < $golTandang) {
  27. $this->poinKlub[$klubTandang] += 3;
  28. } else {
  29. $this->poinKlub[$klubKandang] += 1;
  30. $this->poinKlub[$klubTandang] += 1;
  31. }
  32. }
  33.  
  34. public function cetakKlasemen(): array
  35. {
  36. $klasemen = $this->poinKlub;
  37.  
  38. uasort($klasemen, function ($a, $b) {
  39. return $b <=> $a; // descending
  40. });
  41.  
  42. return $klasemen;
  43. }
  44.  
  45. public function ambilPeringkat(int $nomorPeringkat): string
  46. {
  47. if ($nomorPeringkat < 1 || $nomorPeringkat > count($this->poinKlub)) {
  48. throw new OutOfBoundsException("Peringkat tidak tersedia.");
  49. }
  50.  
  51. $klasemen = $this->cetakKlasemen();
  52. $klubList = array_keys($klasemen);
  53.  
  54. return $klubList[$nomorPeringkat - 1];
  55. }
  56. }
  57.  
  58. $klasemen = new Klasemen(['Liverpool', 'Chelsea', 'Arsenal']);
  59.  
  60. $klasemen->catatPermainan('Arsenal', 'Liverpool', '2:1');
  61. $klasemen->catatPermainan('Arsenal', 'Chelsea', '1:1');
  62. $klasemen->catatPermainan('Chelsea', 'Arsenal', '0:3');
  63. $klasemen->catatPermainan('Chelsea', 'Liverpool', '3:2');
  64. $klasemen->catatPermainan('Liverpool', 'Arsenal', '2:2');
  65. $klasemen->catatPermainan('Liverpool', 'Chelsea', '0:0');
  66.  
  67. // Cetak klasemen
  68. echo "Klasemen:\n";
  69. foreach ($klasemen->cetakKlasemen() as $klub => $poin) {
  70. echo "$klub => $poin\n";
  71. }
  72.  
  73. // Ambil peringkat ke-3 dengan penanganan error
  74. try {
  75. echo "\nPeringkat ke-2: " . $klasemen->ambilPeringkat(2) . "\n";
  76. } catch (Exception $e) {
  77. echo "\nError: " . $e->getMessage() . "\n";
  78. }
  79.  
Success #stdin #stdout 0.03s 26000KB
stdin
Standard input is empty
stdout
Klasemen:
Arsenal => 8
Chelsea => 5
Liverpool => 2

Peringkat ke-2: Chelsea