"""Sesi 10 — Nested Loop & Pattern Programming | Kode Pendamping Lengkap
SMAS St. John · Ekskul CSSE (Python)

Cara pakai:
  1. Simpan file ini, buka di VS Code
  2. Tekan Run (F5) (atau ketik di terminal: python kode.py)
  3. Baca output di terminal — lalu baca komentar di dalamnya:
     setiap BAGIAN sesuai urutan slide deck Sesi 10

File ini mengikuti alur deck:
  BAGIAN 1 = anatomi nested loop      (slide 04)
  BAGIAN 2 = tugas 1: persegi+segitiga (slide 06)
  BAGIAN 3 = piramida & pola angka     (slide 07)
  BAGIAN 4 = tugas 2: tabel perkalian  (slide 08)
  BAGIAN 5 = jebakan: print() vs end   (slide 09)
  BAGIAN 6 = challenge + pembahasan    (slide 10-11)
"""

# ============================================================
# BAGIAN 1 — anatomi nested loop: luar = baris, dalam = kolom
# ============================================================
# Loop luar mengatur BARIS, loop dalam mengisi KOLOM.
# 1 putaran loop luar = 1 putaran PENUH loop dalam.

n = 3
for i in range(n):          # luar -> baris (3 baris)
    for j in range(n):      # dalam -> kolom (3 bintang per baris)
        print("*", end=" ") # end=" " = jangan pindah baris
    print()                 # print() kosong = tombol ENTER

# Hitung iterasi: 3 x 3 = 9 kali print("*")

# Debug secret: mau lihat loop jalan ke mana?
# for i in range(2):
#     for j in range(2):
#         print(f"i={i} j={j}")   # hapus komentar ini dan lihat!

# ============================================================
# BAGIAN 2 — Tugas 1: persegi & segitiga (slide 06)
# ============================================================
# Level 1 — persegi 4x4 dengan trik string multiply

n = 4
for i in range(n):
    print("*" * n)          # satu loop aja cukup!

# Level 2 — persegi versi nested (hasil sama, mesinnya beda)
# for i in range(n):
#     for j in range(n):
#         print("*", end=" ")
#     print()

# Level 3 — segitiga siku: jumlah bintang IKUT BARIS
for i in range(1, n + 1):
    print("*" * i)          # baris ke-i punya i bintang

# Versi nested segitiga:
# for i in range(1, n + 1):
#     for j in range(i):          # <- range(i): ikut baris!
#         print("*", end="")
#     print()

# ============================================================
# BAGIAN 3 — piramida & pola angka (slide 07)
# ============================================================
# Rumus piramida: spasi n-i-1 (mengecil) + bintang 2*i+1 (ganjil membesar)

n = 4
for i in range(n):
    spasi = " " * (n - i - 1)     # 3, 2, 1, 0
    bintang = "*" * (2 * i + 1)   # 1, 3, 5, 7  <- selalu ganjil = simetris
    print(spasi + bintang)

# Pola angka 1 22 333 4444:
# str(i) dulu! i*i = perkalian (1,4,9) — bukan pengulangan teks.
for i in range(1, n + 1):
    print(str(i) * i)

# JEBAKAN (jangan di-run): print(i * i) -> 1, 4, 9 — perkalian!
# bedanya str(i) * i -> "1", "22", "333" — pengulangan string.

# ============================================================
# BAGIAN 4 — Tugas 2: tabel perkalian bertingkat (slide 08)
# ============================================================
# Level 1 — tabel perkalian 3 (1-10)

tabel = 3
for kali in range(1, 11):
    print(f"{tabel} x {kali} = {tabel * kali}")

# Level 2 — tabel 1-3 bertingkat dengan nested loop
# for tabel in range(1, 4):
#     for kali in range(1, 6):
#         print(f"{tabel} x {kali} = {tabel * kali}")
#     print()   # baris kosong antar tabel

# ============================================================
# BAGIAN 5 — jebakan: print() vs end (slide 09)
# ============================================================
# Jebakan 02 versi jalan beneran — jalankan ini, lihat hasilnya
# numpuk 1 baris, lalu perbaiki dengan print() kosong:

for i in range(3):
    for j in range(3):
        print("*", end=" ")
    # print()   <- hapus # di depan: tiba-tiba jadi 3 baris rapi!

# ============================================================
# BAGIAN 6 — Challenge + pembahasan (slide 10-11)
# ============================================================
# Misi A: piramida tinggi 4 — sudah dibahas di BAGIAN 3!
# Coba sendiri dulu sebelum scroll ke atas ya 

# Misi B: pola 1 22 333 4444 — juga di BAGIAN 3!

# Bonus (kalau cepat selesai): piramida terbalik
# for i in range(n, 0, -1):
#     print(" " * (n - i) + "*" * (2 * i - 1))

# ============================================================
# Case kumulatif — pola nilai bertingkat
# ============================================================
for nilai in range(70, 91, 10):   # 70, 80, 90
    print("Nilai", nilai)
    for bintang in range(nilai // 10 - 6):  # 70->1, 80->2, 90->3 bintang
        print("*", end="")
    print()
