<?php
function tekaTekiTeko( int $batas ) : void
{
if ( $batas < 0 ) {
throw new InvalidArgumentException( "Parameter harus berupa unsigned integer (tidak boleh negatif)" ) ;
}
if ( $batas < 20 ) {
throw new InvalidArgumentException( "Parameter harus memiliki nilai minimal 20" ) ;
}
for ( $i = 1 ; $i <= $batas ; $i ++ ) {
$output = "" ;
if ( $i % 2 == 0 ) {
$output .= "Teka" ;
}
if ( $i % 3 == 0 ) {
$output .= "Teki" ;
}
if ( $i % 5 == 0 ) {
$output .= "Teko" ;
}
if ( $output == "" ) {
$output = $i ;
}
echo $output . "\n " ;
}
}
try {
echo "=== Contoh penggunaan tekaTekiTeko(30) ===\n " ;
tekaTekiTeko( 30 ) ;
echo "\n === Test dengan parameter tidak valid ===\n " ;
try {
tekaTekiTeko( 15 ) ;
} catch ( InvalidArgumentException $e ) {
echo "Error: " . $e -> getMessage ( ) . "\n " ;
}
try {
tekaTekiTeko( - 5 ) ;
} catch ( InvalidArgumentException $e ) {
echo "Error: " . $e -> getMessage ( ) . "\n " ;
}
} catch ( Exception $e ) {
echo "Error: " . $e -> getMessage ( ) . "\n " ;
}
?>
PD9waHAKCmZ1bmN0aW9uIHRla2FUZWtpVGVrbyhpbnQgJGJhdGFzKTogdm9pZAp7CiAgICBpZiAoJGJhdGFzIDwgMCkgewogICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIlBhcmFtZXRlciBoYXJ1cyBiZXJ1cGEgdW5zaWduZWQgaW50ZWdlciAodGlkYWsgYm9sZWggbmVnYXRpZikiKTsKICAgIH0KICAgIAogICAgaWYgKCRiYXRhcyA8IDIwKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiUGFyYW1ldGVyIGhhcnVzIG1lbWlsaWtpIG5pbGFpIG1pbmltYWwgMjAiKTsKICAgIH0KICAgIAogICAgZm9yICgkaSA9IDE7ICRpIDw9ICRiYXRhczsgJGkrKykgewogICAgICAgICRvdXRwdXQgPSAiIjsKICAgICAgICAKICAgICAgICBpZiAoJGkgJSAyID09IDApIHsKICAgICAgICAgICAgJG91dHB1dCAuPSAiVGVrYSI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICgkaSAlIDMgPT0gMCkgewogICAgICAgICAgICAkb3V0cHV0IC49ICJUZWtpIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCRpICUgNSA9PSAwKSB7CiAgICAgICAgICAgICRvdXRwdXQgLj0gIlRla28iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoJG91dHB1dCA9PSAiIikgewogICAgICAgICAgICAkb3V0cHV0ID0gJGk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGVjaG8gJG91dHB1dCAuICJcbiI7CiAgICB9Cn0KCnRyeSB7CiAgICBlY2hvICI9PT0gQ29udG9oIHBlbmdndW5hYW4gdGVrYVRla2lUZWtvKDMwKSA9PT1cbiI7CiAgICB0ZWthVGVraVRla28oMzApOwogICAgCiAgICBlY2hvICJcbj09PSBUZXN0IGRlbmdhbiBwYXJhbWV0ZXIgdGlkYWsgdmFsaWQgPT09XG4iOwogICAgCiAgICB0cnkgewogICAgICAgIHRla2FUZWtpVGVrbygxNSk7CiAgICB9IGNhdGNoIChJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gJGUpIHsKICAgICAgICBlY2hvICJFcnJvcjogIiAuICRlLT5nZXRNZXNzYWdlKCkgLiAiXG4iOwogICAgfQogICAgCiAgICB0cnkgewogICAgICAgIHRla2FUZWtpVGVrbygtNSk7CiAgICB9IGNhdGNoIChJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gJGUpIHsKICAgICAgICBlY2hvICJFcnJvcjogIiAuICRlLT5nZXRNZXNzYWdlKCkgLiAiXG4iOwogICAgfQogICAgCn0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgZWNobyAiRXJyb3I6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpIC4gIlxuIjsKfQoKPz4=