function tekaTekiTeko( batas) {
// Validasi tipe data dan rentang nilai dari parameter 'batas'.
if ( typeof batas !== 'number' || ! Number .isInteger ( batas) || batas < 20 ) {
throw new Error( "Parameter 'batas' harus merupakan bilangan bulat dengan nilai minimal 20." ) ;
}
// Iterasi utama dari 1 hingga nilai batas.
for ( let i = 1 ; i <= batas; i++ ) {
// Inisialisasi string output untuk setiap iterasi.
let output = '' ;
// Bangun string output berdasarkan aturan pembagian habis.
if ( i % 2 === 0 ) {
output += 'Teka' ;
}
if ( i % 3 === 0 ) {
output += 'Teki' ;
}
if ( i % 5 === 0 ) {
output += 'Teko' ;
}
// Cetak string 'output' jika memiliki isi. Jika tidak, cetak angka iterasi saat ini.
// Operator OR (||) akan mengembalikan nilai pertama yang 'truthy'.
console.log ( output || i) ;
}
}
// Contoh eksekusi fungsi dengan penanganan error yang sesuai.
try {
console.log ( "--- Eksekusi program dimulai ---" ) ;
tekaTekiTeko( 30 ) ;
} catch ( error) {
// Menangkap dan menampilkan pesan error jika validasi gagal.
console.error ( "Terjadi kesalahan:" , error.message ) ;
}
ZnVuY3Rpb24gdGVrYVRla2lUZWtvKGJhdGFzKSB7CiAgLy8gVmFsaWRhc2kgdGlwZSBkYXRhIGRhbiByZW50YW5nIG5pbGFpIGRhcmkgcGFyYW1ldGVyICdiYXRhcycuCiAgaWYgKHR5cGVvZiBiYXRhcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIoYmF0YXMpIHx8IGJhdGFzIDwgMjApIHsKICAgIHRocm93IG5ldyBFcnJvcigiUGFyYW1ldGVyICdiYXRhcycgaGFydXMgbWVydXBha2FuIGJpbGFuZ2FuIGJ1bGF0IGRlbmdhbiBuaWxhaSBtaW5pbWFsIDIwLiIpOwogIH0KCiAgLy8gSXRlcmFzaSB1dGFtYSBkYXJpIDEgaGluZ2dhIG5pbGFpIGJhdGFzLgogIGZvciAobGV0IGkgPSAxOyBpIDw9IGJhdGFzOyBpKyspIHsKICAgIC8vIEluaXNpYWxpc2FzaSBzdHJpbmcgb3V0cHV0IHVudHVrIHNldGlhcCBpdGVyYXNpLgogICAgbGV0IG91dHB1dCA9ICcnOwoKICAgIC8vIEJhbmd1biBzdHJpbmcgb3V0cHV0IGJlcmRhc2Fya2FuIGF0dXJhbiBwZW1iYWdpYW4gaGFiaXMuCiAgICBpZiAoaSAlIDIgPT09IDApIHsKICAgICAgb3V0cHV0ICs9ICdUZWthJzsKICAgIH0KICAgIGlmIChpICUgMyA9PT0gMCkgewogICAgICBvdXRwdXQgKz0gJ1Rla2knOwogICAgfQogICAgaWYgKGkgJSA1ID09PSAwKSB7CiAgICAgIG91dHB1dCArPSAnVGVrbyc7CiAgICB9CgogICAgLy8gQ2V0YWsgc3RyaW5nICdvdXRwdXQnIGppa2EgbWVtaWxpa2kgaXNpLiBKaWthIHRpZGFrLCBjZXRhayBhbmdrYSBpdGVyYXNpIHNhYXQgaW5pLgogICAgLy8gT3BlcmF0b3IgT1IgKHx8KSBha2FuIG1lbmdlbWJhbGlrYW4gbmlsYWkgcGVydGFtYSB5YW5nICd0cnV0aHknLgogICAgY29uc29sZS5sb2cob3V0cHV0IHx8IGkpOwogIH0KfQoKLy8gQ29udG9oIGVrc2VrdXNpIGZ1bmdzaSBkZW5nYW4gcGVuYW5nYW5hbiBlcnJvciB5YW5nIHNlc3VhaS4KdHJ5IHsKICBjb25zb2xlLmxvZygiLS0tIEVrc2VrdXNpIHByb2dyYW0gZGltdWxhaSAtLS0iKTsKICB0ZWthVGVraVRla28oMzApOwp9IGNhdGNoIChlcnJvcikgewogIC8vIE1lbmFuZ2thcCBkYW4gbWVuYW1waWxrYW4gcGVzYW4gZXJyb3IgamlrYSB2YWxpZGFzaSBnYWdhbC4KICBjb25zb2xlLmVycm9yKCJUZXJqYWRpIGtlc2FsYWhhbjoiLCBlcnJvci5tZXNzYWdlKTsKfQ==