<?php
class Klasemen {
private $daftarKlub = [ ] ;
public function __construct
( array $klub ) { foreach ( $klub as $namaKlub ) {
$this -> daftarKlub [ $namaKlub ] = 0 ;
}
}
public function catatPermainan( string $klubKandang , string $klubTandang , string $skor ) : void {
if ( ! isset ( $this -> daftarKlub [ $klubKandang ] ) || ! isset ( $this -> daftarKlub [ $klubTandang ] ) ) { throw new Exception( "Salah satu klub tidak terdaftar." ) ;
}
list ( $skorKandang , $skorTandang ) = explode ( ':' , $skor ) ; $skorKandang = intval ( $skorKandang ) ; $skorTandang = intval ( $skorTandang ) ;
if ( $skorKandang > $skorTandang ) {
$this -> daftarKlub [ $klubKandang ] += 3 ;
} elseif ( $skorKandang < $skorTandang ) {
$this -> daftarKlub [ $klubTandang ] += 3 ;
} else {
$this -> daftarKlub [ $klubKandang ] += 1 ;
$this -> daftarKlub [ $klubTandang ] += 1 ;
}
}
public function tampilkanKlasemen( ) : void {
$klasemen = $this -> cetakKlasemen ( ) ;
echo "=== KLASIFIKASI KLUB ===\n " ;
echo "---------------------------\n " ;
echo "No | Klub | Poin\n " ;
echo "---------------------------\n " ;
$no = 1 ;
foreach ( $klasemen as $klub => $poin ) {
echo str_pad ( $no ++, 3 , " " , STR_PAD_RIGHT
) . "| " ; echo str_pad ( $klub , 22 , " " , STR_PAD_RIGHT
) . " | " ; echo "$poin \n " ;
}
echo "---------------------------\n " ;
}
public function cetakKlasemen
( ) : array { return $this -> daftarKlub ;
}
public function ambilPeringkat( int $nomorPeringkat ) : string {
$klasemen = $this -> cetakKlasemen ( ) ;
if ( $nomorPeringkat < 1 || $nomorPeringkat > count ( $klasemen ) ) { throw new Exception( "Peringkat tidak tersedia." ) ;
}
return $peringkat [ $nomorPeringkat - 1 ] ;
}
}
$klasemen = new Klasemen( [ 'Liverpool' , 'Chelsea' , 'Arsenal' ] ) ;
$klasemen -> catatPermainan ( 'Arsenal' , 'Liverpool' , '2:1' ) ;
$klasemen -> catatPermainan ( 'Arsenal' , 'Chelsea' , '1:1' ) ;
$klasemen -> catatPermainan ( 'Chelsea' , 'Arsenal' , '0:3' ) ;
$klasemen -> catatPermainan ( 'Chelsea' , 'Liverpool' , '3:2' ) ;
$klasemen -> catatPermainan ( 'Liverpool' , 'Arsenal' , '2:2' ) ;
$klasemen -> catatPermainan ( 'Liverpool' , 'Chelsea' , '0:0' ) ;
print_r ( $klasemen -> cetakKlasemen ( ) ) ;
echo "\n " ;
echo $klasemen -> ambilPeringkat ( 2 ) . "\n " ;
echo $klasemen -> ambilPeringkat ( 1 ) . "\n " ;
echo $klasemen -> ambilPeringkat ( 3 ) . "\n " ;
$klasemen -> tampilkanKlasemen ( ) ;
?>
PD9waHAKCmNsYXNzIEtsYXNlbWVuIHsKICAgIHByaXZhdGUgJGRhZnRhcktsdWIgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGtsdWIpIHsKICAgICAgICBmb3JlYWNoICgka2x1YiBhcyAkbmFtYUtsdWIpIHsKICAgICAgICAgICAgJHRoaXMtPmRhZnRhcktsdWJbJG5hbWFLbHViXSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYXRhdFBlcm1haW5hbihzdHJpbmcgJGtsdWJLYW5kYW5nLCBzdHJpbmcgJGtsdWJUYW5kYW5nLCBzdHJpbmcgJHNrb3IpOiB2b2lkIHsKCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZGFmdGFyS2x1Ylska2x1YkthbmRhbmddKSB8fCAhaXNzZXQoJHRoaXMtPmRhZnRhcktsdWJbJGtsdWJUYW5kYW5nXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiU2FsYWggc2F0dSBrbHViIHRpZGFrIHRlcmRhZnRhci4iKTsKICAgICAgICB9CgogICAgICAgIGxpc3QoJHNrb3JLYW5kYW5nLCAkc2tvclRhbmRhbmcpID0gZXhwbG9kZSgnOicsICRza29yKTsKICAgICAgICAkc2tvckthbmRhbmcgPSBpbnR2YWwoJHNrb3JLYW5kYW5nKTsKICAgICAgICAkc2tvclRhbmRhbmcgPSBpbnR2YWwoJHNrb3JUYW5kYW5nKTsKCiAgICAgICAgaWYgKCRza29yS2FuZGFuZyA+ICRza29yVGFuZGFuZykgewogICAgICAgICAgICAkdGhpcy0+ZGFmdGFyS2x1Ylska2x1YkthbmRhbmddICs9IDM7CiAgICAgICAgfSBlbHNlaWYgKCRza29yS2FuZGFuZyA8ICRza29yVGFuZGFuZykgewogICAgICAgICAgICAkdGhpcy0+ZGFmdGFyS2x1Ylska2x1YlRhbmRhbmddICs9IDM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmRhZnRhcktsdWJbJGtsdWJLYW5kYW5nXSArPSAxOwogICAgICAgICAgICAkdGhpcy0+ZGFmdGFyS2x1Ylska2x1YlRhbmRhbmddICs9IDE7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1waWxrYW5LbGFzZW1lbigpOiB2b2lkIHsKICAgICAgICAka2xhc2VtZW4gPSAkdGhpcy0+Y2V0YWtLbGFzZW1lbigpOwoKICAgICAgICBlY2hvICI9PT0gS0xBU0lGSUtBU0kgS0xVQiA9PT1cbiI7CiAgICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwogICAgICAgIGVjaG8gIk5vIHwgS2x1YiAgICAgICAgICAgICAgICAgIHwgUG9pblxuIjsKICAgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CgogICAgICAgICRubyA9IDE7CiAgICAgICAgZm9yZWFjaCAoJGtsYXNlbWVuIGFzICRrbHViID0+ICRwb2luKSB7CiAgICAgICAgICAgIGVjaG8gc3RyX3BhZCgkbm8rKywgMywgIiAiLCBTVFJfUEFEX1JJR0hUKSAuICJ8ICI7CiAgICAgICAgICAgIGVjaG8gc3RyX3BhZCgka2x1YiwgMjIsICIgIiwgU1RSX1BBRF9SSUdIVCkgLiAiIHwgIjsKICAgICAgICAgICAgZWNobyAiJHBvaW5cbiI7CiAgICAgICAgfQogICAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2V0YWtLbGFzZW1lbigpOiBhcnJheSB7CiAgICAgICAgYXJzb3J0KCR0aGlzLT5kYWZ0YXJLbHViKTsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhZnRhcktsdWI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFtYmlsUGVyaW5na2F0KGludCAkbm9tb3JQZXJpbmdrYXQpOiBzdHJpbmcgewogICAgICAgICRrbGFzZW1lbiA9ICR0aGlzLT5jZXRha0tsYXNlbWVuKCk7CgogICAgICAgIGlmICgkbm9tb3JQZXJpbmdrYXQgPCAxIHx8ICRub21vclBlcmluZ2thdCA+IGNvdW50KCRrbGFzZW1lbikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUGVyaW5na2F0IHRpZGFrIHRlcnNlZGlhLiIpOwogICAgICAgIH0KCiAgICAgICAgJHBlcmluZ2thdCA9IGFycmF5X2tleXMoJGtsYXNlbWVuKTsKICAgICAgICByZXR1cm4gJHBlcmluZ2thdFskbm9tb3JQZXJpbmdrYXQgLSAxXTsKICAgIH0KfQoKJGtsYXNlbWVuID0gbmV3IEtsYXNlbWVuKFsnTGl2ZXJwb29sJywgJ0NoZWxzZWEnLCAnQXJzZW5hbCddKTsKCiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0Fyc2VuYWwnLCAnTGl2ZXJwb29sJywgJzI6MScpOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdBcnNlbmFsJywgJ0NoZWxzZWEnLCAnMToxJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0NoZWxzZWEnLCAnQXJzZW5hbCcsICcwOjMnKTsKJGtsYXNlbWVuLT5jYXRhdFBlcm1haW5hbignQ2hlbHNlYScsICdMaXZlcnBvb2wnLCAnMzoyJyk7CiRrbGFzZW1lbi0+Y2F0YXRQZXJtYWluYW4oJ0xpdmVycG9vbCcsICdBcnNlbmFsJywgJzI6MicpOwoka2xhc2VtZW4tPmNhdGF0UGVybWFpbmFuKCdMaXZlcnBvb2wnLCAnQ2hlbHNlYScsICcwOjAnKTsKCgpwcmludF9yKCRrbGFzZW1lbi0+Y2V0YWtLbGFzZW1lbigpKTsKCmVjaG8gIlxuIjsKZWNobyAka2xhc2VtZW4tPmFtYmlsUGVyaW5na2F0KDIpIC4gIlxuIjsKCgplY2hvICRrbGFzZW1lbi0+YW1iaWxQZXJpbmdrYXQoMSkgLiAiXG4iOwplY2hvICRrbGFzZW1lbi0+YW1iaWxQZXJpbmdrYXQoMykgLiAiXG4iOwoKJGtsYXNlbWVuLT50YW1waWxrYW5LbGFzZW1lbigpOwo/Pg==