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"
# Pythonic Trick: 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+IE5vbmU6CiAgICAiIiIKICAgIE1lbmNldGFrIHVydXRhbiBhbmdrYSBkYXJpIDEgaGluZ2dhIGJhdGFzIGRlbmdhbiBhdHVyYW4gIlRla2FUZWtpVGVrbyIuCgogICAgQXJnczoKICAgICAgICBiYXRhcyAoaW50KTogQW5na2EgaW50ZWdlciBiYXRhcyBhdGFzIHBlcnVsYW5nYW4gKG1pbmltYWwgMjApLgoKICAgIFJhaXNlczoKICAgICAgICBWYWx1ZUVycm9yOiBKaWthICdiYXRhcycgdGlkYWsgbWVtZW51aGkga3JpdGVyaWEgeWFuZyBkaXRlbnR1a2FuLgogICAgIiIiCiAgICAjIEd1YXJkIENsYXVzZTogVmFsaWRhc2kgaW5wdXQgZGkgYXdhbCB1bnR1ayBtZW1hc3Rpa2FuIGludGVncml0YXMgZGF0YS4KICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhdGFzLCBpbnQpIG9yIGJhdGFzIDwgMjA6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW5wdXQgJ2JhdGFzJyBoYXJ1cyBiZXJ1cGEgaW50ZWdlciBkZW5nYW4gbmlsYWkgbWluaW1hbCAyMC4iKQoKICAgIGZvciBpIGluIHJhbmdlKDEsIGJhdGFzICsgMSk6CiAgICAgICAgIyBMb2dpYzogTWVtYmFuZ3VuIG91dHB1dCBzZWNhcmEgZGluYW1pcyBhZ2FyIG11ZGFoIGRpcGVybHVhcy4KICAgICAgICBvdXRwdXQgPSAiIgogICAgICAgIGlmIGkgJSAyID09IDA6CiAgICAgICAgICAgIG91dHB1dCArPSAiVGVrYSIKICAgICAgICBpZiBpICUgMyA9PSAwOgogICAgICAgICAgICBvdXRwdXQgKz0gIlRla2kiCiAgICAgICAgaWYgaSAlIDUgPT0gMDoKICAgICAgICAgICAgb3V0cHV0ICs9ICJUZWtvIgoKICAgICAgICAjIFB5dGhvbmljIFRyaWNrOiBNZW5jZXRhayAnb3V0cHV0JyBqaWthIHRpZGFrIGtvc29uZywgamlrYSBrb3NvbmcgY2V0YWsgJ2knLgogICAgICAgICMgSW5pIG1lbWFuZmFhdGthbiAnc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uJyBkYXJpIG9wZXJhdG9yICdvcicuCiAgICAgICAgcHJpbnQob3V0cHV0IG9yIGkpCgojIFN0YW5kYXJkIGVudHJ5IHBvaW50IHVudHVrIHNjcmlwdCBQeXRob24uCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAjIE1lbmphbGFua2FuIGZ1bmdzaSBkZW5nYW4gbmlsYWkgJ2JhdGFzJyBzZXN1YWkgY29udG9oIGRpIGdhbWJhci4KICAgIHRla2FfdGVraV90ZWtvKDMwKSA=