def teka_teki_teko( batas: int ) -> None :
"""
Mencetak urutan angka dari 1 hingga batas dengan aturan "TekaTekiTeko".
Args:
batas (int): angka integer batas atas perulangan (minimal 20).
Raises:
ValueError: jika 'batas' tidak memenuhi kriteria yang ditentukan.
"""
# Guard Clause: validasi input di awal untuk memastikan integritas data.
if not isinstance ( batas, int ) or batas < 20 :
raise ValueError ( "Input 'batas' harus berupa integer dengan nilai minimal 20." )
for i in range ( 1 , batas + 1 ) :
# Logic: membangun output secara dinamis agar mudah diperluas.
output = ""
if i % 2 == 0 :
output += "Teka"
if i % 3 == 0 :
output += "Teki"
if i % 5 == 0 :
output += "Teko"
# Mencetak 'output' jika tidak kosong, jika kosong cetak 'i'.
# Ini memanfaatkan 'short-circuit evaluation' dari operator 'or'.
print ( output or i)
# Standard entry point untuk script Python.
if __name__ == "__main__" :
# Menjalankan fungsi dengan nilai 'batas' sesuai contoh di gambar.
teka_teki_teko( 30 )
ZGVmIHRla2FfdGVraV90ZWtvKGJhdGFzOiBpbnQpIC0+IE5vbmU6CiAgICAiIiIKICAgIE1lbmNldGFrIHVydXRhbiBhbmdrYSBkYXJpIDEgaGluZ2dhIGJhdGFzIGRlbmdhbiBhdHVyYW4gIlRla2FUZWtpVGVrbyIuCgogICAgQXJnczoKICAgICAgICBiYXRhcyAoaW50KTogYW5na2EgaW50ZWdlciBiYXRhcyBhdGFzIHBlcnVsYW5nYW4gKG1pbmltYWwgMjApLgoKICAgIFJhaXNlczoKICAgICAgICBWYWx1ZUVycm9yOiBqaWthICdiYXRhcycgdGlkYWsgbWVtZW51aGkga3JpdGVyaWEgeWFuZyBkaXRlbnR1a2FuLgogICAgIiIiCiAgICAjIEd1YXJkIENsYXVzZTogdmFsaWRhc2kgaW5wdXQgZGkgYXdhbCB1bnR1ayBtZW1hc3Rpa2FuIGludGVncml0YXMgZGF0YS4KICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhdGFzLCBpbnQpIG9yIGJhdGFzIDwgMjA6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW5wdXQgJ2JhdGFzJyBoYXJ1cyBiZXJ1cGEgaW50ZWdlciBkZW5nYW4gbmlsYWkgbWluaW1hbCAyMC4iKQoKICAgIGZvciBpIGluIHJhbmdlKDEsIGJhdGFzICsgMSk6CiAgICAgICAgIyBMb2dpYzogbWVtYmFuZ3VuIG91dHB1dCBzZWNhcmEgZGluYW1pcyBhZ2FyIG11ZGFoIGRpcGVybHVhcy4KICAgICAgICBvdXRwdXQgPSAiIgogICAgICAgIGlmIGkgJSAyID09IDA6CiAgICAgICAgICAgIG91dHB1dCArPSAiVGVrYSIKICAgICAgICBpZiBpICUgMyA9PSAwOgogICAgICAgICAgICBvdXRwdXQgKz0gIlRla2kiCiAgICAgICAgaWYgaSAlIDUgPT0gMDoKICAgICAgICAgICAgb3V0cHV0ICs9ICJUZWtvIgoKICAgICAgICAjIE1lbmNldGFrICdvdXRwdXQnIGppa2EgdGlkYWsga29zb25nLCBqaWthIGtvc29uZyBjZXRhayAnaScuCiAgICAgICAgIyBJbmkgbWVtYW5mYWF0a2FuICdzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24nIGRhcmkgb3BlcmF0b3IgJ29yJy4KICAgICAgICBwcmludChvdXRwdXQgb3IgaSkKCiMgU3RhbmRhcmQgZW50cnkgcG9pbnQgdW50dWsgc2NyaXB0IFB5dGhvbi4KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICMgTWVuamFsYW5rYW4gZnVuZ3NpIGRlbmdhbiBuaWxhaSAnYmF0YXMnIHNlc3VhaSBjb250b2ggZGkgZ2FtYmFyLgogICAgdGVrYV90ZWtpX3Rla28oMzApIA==