fork download
  1. <?php
  2.  
  3. class Klasemen
  4. {
  5. /** @var array */
  6. private $poin = [];
  7.  
  8. /** @param array $daftarKlub */
  9. public function __construct(array $daftarKlub)
  10. {
  11. foreach ($daftarKlub as $klub) {
  12. $this->poin[$klub] = 0;
  13. }
  14. }
  15.  
  16. public function catatPermainan($klubKandang, $klubTandang, $skor)
  17. {
  18. foreach ([$klubKandang, $klubTandang] as $klub) {
  19. if (!isset($this->poin[$klub])) {
  20. throw new \InvalidArgumentException("Klub \"$klub\" tidak terdaftar.");
  21. }
  22. }
  23.  
  24. list($golKdg, $golTdg) = array_map('intval', explode(':', $skor));
  25.  
  26. if ($golKdg > $golTdg) {
  27. $this->poin[$klubKandang] += 3;
  28. } elseif ($golKdg < $golTdg) {
  29. $this->poin[$klubTandang] += 3;
  30. } else {
  31. $this->poin[$klubKandang]++;
  32. $this->poin[$klubTandang]++;
  33. }
  34. }
  35.  
  36. public function cetakKlasemen()
  37. {
  38. $sorted = $this->poin;
  39. uasort($sorted, function ($pA, $pB) use ($sorted) {
  40. if ($pA === $pB) {
  41. $namaA = array_search($pA, $sorted, true);
  42. $namaB = array_search($pB, $sorted, true);
  43. return strcmp($namaA, $namaB);
  44. }
  45. return $pB <=> $pA;
  46. });
  47. return $sorted;
  48. }
  49.  
  50. public function ambilPeringkat($n)
  51. {
  52. if ($n < 1) {
  53. throw new \InvalidArgumentException('Nomor peringkat ≥ 1');
  54. }
  55. $keys = array_keys($this->cetakKlasemen());
  56. return isset($keys[$n - 1]) ? $keys[$n - 1] : '';
  57. }
  58. }
  59.  
  60. $klasemen = new Klasemen(['Liverpool', 'Chelsea', 'Arsenal']);
  61. $klasemen->catatPermainan('Arsenal', 'Liverpool', '2:1');
  62. $klasemen->catatPermainan('Arsenal', 'Chelsea', '1:1');
  63. $klasemen->catatPermainan('Chelsea', 'Arsenal', '0:3');
  64. $klasemen->catatPermainan('Chelsea', 'Liverpool', '3:2');
  65. $klasemen->catatPermainan('Liverpool', 'Arsenal', '2:2');
  66. $klasemen->catatPermainan('Liverpool', 'Chelsea', '0:0');
  67.  
  68. print_r($klasemen->cetakKlasemen());
  69. echo 'Peringkat 2: ' . $klasemen->ambilPeringkat(2) . PHP_EOL;
  70.  
Success #stdin #stdout 0.04s 25684KB
stdin
Standard input is empty
stdout
Array
(
    [Arsenal] => 8
    [Chelsea] => 5
    [Liverpool] => 2
)
Peringkat 2: Chelsea