7. tēma: Noslēguma darbs. Projekts: "Koda lauzējs: AI Efektivitāte".

Tavs mērķis: Izmantot "skaldi un valdi" (Binārās meklēšanas) loģiku, lai izveidotu mākslīgo intelektu, kurš vienmēr uzvar spēlētāju skaitļu minēšanā. Šis darbs parādīs Tavu spēju pārvērst teorētisko algoritmu efektivitāti (Big O) reālā, interaktīvā spēlē un nodrošināt loģikas kļūdu (krāpšanās) detektēšanu.

SR 2.4.19. (Gatavi algoritmi), 2.4.16. (Sarežģītība)

Darba uzdevumi

1. solis: Spēles dzinējs un Diapazoni

  1. Failā main.py izveido galveno ciklu, kas uztur meklēšanas robežas: min_r un max_r.
  2. Implementē datora gājiena aprēķinu pēc binārās meklēšanas formulas: (min_r + max_r) // 2.
  3. Nodrošini, ka dators ar katru gājienu samazina iespējamo variantu skaitu uz pusi, reaģējot uz lietotāja ievadi.

2. solis: Krāpšanās detektors un Analītika

  1. Izveido loģiku, kas fiksē pretrunas: ja min_r kļūst lielāks par max_r, dators paziņo par krāpšanos un beidz spēli.
  2. Pievieno gājienu skaitītāju un salīdzini beigu rezultātu ar teorētisko robežu (100 skaitļiem tie ir 7 gājieni).
  3. Strukturē kodu tā, lai visa matemātiskā loģika atrastos atsevišķā modulī engine.py.

3. solis: Dokumentācija un Versiju kontrole

  1. Veikt vismaz 4 jēgpilnus commit savā GitHub krātuvē (piem., "Implementēts binārais dzinējs", "Pievienota krāpšanās pārbaude").
  2. Izveidot README.md failu, kurā paskaidro, kāpēc binārā meklēšana ir efektīvāka par lineāro (izmanto Big O notāciju).
  3. Ievērot PEP 8 koda stilu un pievienot docstrings visām funkcijām.

Snieguma līmeņa apraksts (SLA)

Kritēriji 4-6 (Turpina apgūt) 7-8 (Apguvis) 9-10 (Padziļināti)
Algoritma loģika Dators min skaitļus haotiski vai neizmanto robežu pārbīdi. Precīzi realizēta Binārā meklēšana (diapazona dalīšana uz pusēm). Algoritms ir optimizēts; realizēta pretrunu (krāpšanās) detektēšana.
Efektivitātes analīze Netiek uzskaitīti gājieni vai nav izpratnes par Big O. Gājieni tiek uzskaitīti; izprot O(log n) efektivitāti. README failā sniegta matemātiska analīze par algoritma robežām.
Koda kvalitāte Kods ir vienā failā; trūkst parametru vai komentāru. Kods sadalīts moduļos. Funkcijas saņem un atgriež datus. Pilnīga modularitāte; profesionāls PEP 8 stils un docstrings.

Koda paraugs: Binārā dzinēja sākums

# Failā engine.py
def aprekinat_minejumu(apaksa, augsa):
    """Aprēķina viduspunktu binārajai meklēšanai."""
    return (apaksa + augsa) // 2

# Failā main.py
from engine import aprekinat_minejumu

min_r, max_r = 1, 100
gajieni = 0

while min_r <= max_r:
    minejums = aprekinat_minejumu(min_r, max_r)
    gajieni += 1
    
    atbilde = input(f"Vai Tavs skaitlis ir {minejums}? (L/M/U): ").lower()
    
    if atbilde == 'u':
        print(f"Uzvara {gajieni} gājienos!")
        break
    # ... tālāk seko robežu pārbīdes loģika 
Sistēmas statuss: Kalibrēts
Teorētiskā sarežģītība: O(log n)
Maksimums 100 skaitļiem: 7 mēģinājumi
⬅ Iepriekšējā stunda Tēmas apkopojums ➡