fork download
  1. <?php
  2.  
  3. /**
  4.  * Fungsi tekaTekiTeko - Variasi permainan FizzBuzz dengan aturan khusus
  5.  *
  6.  * @param int $batas - Batas atas untuk mencetak angka (minimal 20)
  7.  * @throws InvalidArgumentException - Jika parameter tidak sesuai kriteria
  8.  */
  9. function tekaTekiTeko(int $batas): void
  10. {
  11. // Validasi parameter
  12. if ($batas < 0) {
  13. throw new InvalidArgumentException("Parameter harus berupa unsigned integer (tidak boleh negatif)");
  14. }
  15.  
  16. if ($batas < 20) {
  17. throw new InvalidArgumentException("Parameter harus memiliki nilai minimal 20");
  18. }
  19.  
  20. // Loop dari 1 sampai batas
  21. for ($i = 1; $i <= $batas; $i++) {
  22. $output = "";
  23.  
  24. // Cek apakah habis dibagi 2
  25. if ($i % 2 == 0) {
  26. $output .= "Teka";
  27. }
  28.  
  29. // Cek apakah habis dibagi 3
  30. if ($i % 3 == 0) {
  31. $output .= "Teki";
  32. }
  33.  
  34. // Cek apakah habis dibagi 5
  35. if ($i % 5 == 0) {
  36. $output .= "Teko";
  37. }
  38.  
  39. // Jika tidak ada yang habis dibagi, cetak angka asli
  40. if ($output == "") {
  41. $output = $i;
  42. }
  43.  
  44. echo $output . "\n";
  45. }
  46. }
  47.  
  48. // Contoh penggunaan
  49. try {
  50. echo "=== Contoh penggunaan tekaTekiTeko(30) ===\n";
  51. tekaTekiTeko(30);
  52.  
  53. echo "\n=== Test dengan parameter tidak valid ===\n";
  54.  
  55. // Test dengan nilai kurang dari 20
  56. try {
  57. tekaTekiTeko(15);
  58. } catch (InvalidArgumentException $e) {
  59. echo "Error: " . $e->getMessage() . "\n";
  60. }
  61.  
  62. // Test dengan nilai negatif
  63. try {
  64. tekaTekiTeko(-5);
  65. } catch (InvalidArgumentException $e) {
  66. echo "Error: " . $e->getMessage() . "\n";
  67. }
  68.  
  69. } catch (Exception $e) {
  70. echo "Error: " . $e->getMessage() . "\n";
  71. }
  72.  
  73. ?>
Success #stdin #stdout 0.03s 25752KB
stdin
tekaTekiTeko(30)
stdout
=== Contoh penggunaan tekaTekiTeko(30) ===
1
Teka
Teki
Teka
Teko
TekaTeki
7
Teka
Teki
TekaTeko
11
TekaTeki
13
Teka
TekiTeko
Teka
17
TekaTeki
19
TekaTeko
Teki
Teka
23
TekaTeki
Teko
Teka
Teki
Teka
29
TekaTekiTeko

=== Test dengan parameter tidak valid ===
Error: Parameter harus memiliki nilai minimal 20
Error: Parameter harus berupa unsigned integer (tidak boleh negatif)