User Tools

Site Tools


elemental_fighters

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
elemental_fighters [2025/11/20 15:18] mbunicelemental_fighters [2025/12/01 11:40] (current) – external edit 127.0.0.1
Line 7: Line 7:
 {{ elemental_fighters:slika1.png?nolink&500 | Slika 1. - izbor borca}} {{ elemental_fighters:slika1.png?nolink&500 | Slika 1. - izbor borca}}
  
-No, analizom koda u zadatkumože se zaključiti da zapravo ne postoji kombinacija borca koja bi ni u najsretnijem slučaju uspjela pobijediti sve neprijatelje i doći do flaga, to znači da je potrebno nešto drugo učiniti jer ne postoji izbor pravog borca.+Analizom koda u zadatku može se zaključiti da zapravo ne postoji kombinacija borca koja bi ni u najsretnijem slučaju uspjela pobijediti sve neprijatelje i doći do flaga, to znači da je potrebno nešto drugo učiniti jer ne postoji izbor pravog borca.
  
 Analizom koda zanimljiva je varijabla **s**, koja je "scale", odnosno određuje koliko će se oslabiti ili ojačati neprijatelje. Analizom koda zanimljiva je varijabla **s**, koja je "scale", odnosno određuje koliko će se oslabiti ili ojačati neprijatelje.
Line 19: Line 19:
 {{ elemental_fighters:slika3.png?nolink&500 | Slika 3. - Player default}} {{ elemental_fighters:slika3.png?nolink&500 | Slika 3. - Player default}}
  
-Najključniji dio koda je funkcija kojom se inicijalizira player varijabla iz izbora igrača.+Ključan dio koda je funkcija kojom se inicijalizira player varijabla iz izbora igrača.
  
 {{ elemental_fighters:slika4.png?nolink&500 | Slika 4. - inicijalizacija player varijable iz igračevog izbora}} {{ elemental_fighters:slika4.png?nolink&500 | Slika 4. - inicijalizacija player varijable iz igračevog izbora}}
Line 25: Line 25:
 Ovdje se može vidjeti da se koristi funkcija **eval**, kojime se fighter unos poziva kao funkcija, a fighterType kao argument. Ovdje se može vidjeti da se koristi funkcija **eval**, kojime se fighter unos poziva kao funkcija, a fighterType kao argument.
  
-Sukladno tome, može se vidjeti da su fighteri zapravo funkcije:+Može se vidjeti da su fighteri zapravo funkcije:
  
 {{ elemental_fighters:slika5.png?nolink&500 | Slika 5. - fighter funkcije}} {{ elemental_fighters:slika5.png?nolink&500 | Slika 5. - fighter funkcije}}
Line 33: Line 33:
 To znači da je unosom fighterType ("Odaberite element borca") zapravo se definira argument funkcije, a unosom fighter ("Odaberite borca") se definira funkcija kojoj će se argument proslijediti i koja će se izvršiti s proslijeđenim argumentom u **eval** funkciji. To znači da je unosom fighterType ("Odaberite element borca") zapravo se definira argument funkcije, a unosom fighter ("Odaberite borca") se definira funkcija kojoj će se argument proslijediti i koja će se izvršiti s proslijeđenim argumentom u **eval** funkciji.
  
-No svaki unos prolazi kroz validate_input, koja je filter koji određuje koji su unosi dozvoljeni, a koji nisu.+Svaki unos prolazi kroz validate_input funkciju, koja je filter koji određuje koji su unosi dozvoljeni, a koji nisu.
  
 {{ elemental_fighters:slika6.png?nolink&500 | Slika 6. - validate funkcija}} {{ elemental_fighters:slika6.png?nolink&500 | Slika 6. - validate funkcija}}
  
-Kako bi provjerili da možemo pozvati proizvoljnu funkciju i argument, ako nemamo unos koji bi validate_function zabranio, možemo probati pozvati:+Kako bi provjerili da možemo pozvati proizvoljnu funkciju i argument, ako nemamo unos koji bi funkcija validacije zabranila, možemo probati pozvati:
  
 <file> <file>
Line 50: Line 50:
 Vidimo da je program vratio listu u kojoj se nalaze svi znakovi iz stringa koji smo poslali kao prvi argument, te oko njih znakovi za zagrade, koji su znakovi zagrada oko fighterType varijable (vidi sliku 4). Vidimo da je program vratio listu u kojoj se nalaze svi znakovi iz stringa koji smo poslali kao prvi argument, te oko njih znakovi za zagrade, koji su znakovi zagrada oko fighterType varijable (vidi sliku 4).
  
-Sličnomožemo pozvati:+Slično se možpozvati len funkcija.
  
 <file> <file>
Line 56: Line 56:
 </file> </file>
  
 +Poziva se na ovakav način.
 +
 +<file>
 Odaberite element borca (Ice, Fire, Acid): aaa   Odaberite element borca (Ice, Fire, Acid): aaa  
 Odaberite borca (Zorn, Krev, Milo)len Odaberite borca (Zorn, Krev, Milo)len
 +</file>
  
 {{ elemental_fighters:slika8.png?nolink&500 | Slika 8. - poziv len("aaa")}} {{ elemental_fighters:slika8.png?nolink&500 | Slika 8. - poziv len("aaa")}}
Line 63: Line 67:
 Vidimo da program vraća 5, što je točno 3 znakova a koje smo poslali plus dva znaka zagrada. Vidimo da program vraća 5, što je točno 3 znakova a koje smo poslali plus dva znaka zagrada.
  
-No flag nije zapisan niti u jednoj varijabli, nego je samo hard kodiran u zadnjem printu programa, pa je potrebno osmisliti način kako pozvati odgovarajuću funkciju i argument, da bi se program uspješno izvršio do kraja i ispisao flag.+Flag nije zapisan niti u jednoj varijabli, nego je samo hardkodiran u zadnjem printu programa, pa je potrebno osmisliti način kako pozvati odgovarajuću funkciju i argument, da bi se program uspješno izvršio do kraja i ispisao flag.
  
-Dobar pristup bi bio mijenjanje varijable **s** na slici 2, koja je skala jačine protivnika. Ako bi tu varijablu mogli smanjiti ili pretvoriti u 0, protivnici bi bili puno slabiji, dok činjenica da je input potrošen na mijenjane varijable **s** umjesto na inicijalizaciju našeg borca ne bi bio problem, jer postoji "default" odabir borca, ako borac nije definiran, prikazan na slici 3.+Dobar pristup bi bio mijenjanje varijable **s** na slici 2, koja je skala jačine protivnika. Ako bi tu varijablu mogli smanjiti ili pretvoriti u 0, protivnici bi bili puno slabiji, dok činjenica da je unos potrošen na mijenjanje varijable **s** umjesto na inicijalizaciju našeg borca ne bi bio problem, jer postoji "default" odabir borca, ako borac nije definiran, prikazan na slici 3.
  
-No cijeli unos igrača se izvršava unutar funkcije **eval**, koja je namijenjena samo za evaluiranje **expression**, **expression** je izraz koji nakon izvršavanja vraća neku vrijednost, na primjer:+Cijeli unos igrača se izvršava unutar funkcije **eval**, koja je namijenjena samo za evaluiranje **expression**-a, koji nakon izvršavanja vraća neku vrijednost, na primjer:
  
 <file> <file>
Line 73: Line 77:
 </file> </file>
  
-vraćena vrijednost je 4,  +vraćena vrijednost je 4,  
  
 <file> <file>
Line 79: Line 83:
 </file> </file>
  
-, kao na slici 8, vraćena vrijednost je 5, i bilo koja vrijednost koja će biti vraćena nakon izvršavanja ekspresije u **eval** funkciji će biti pridružena varijabli **player** (vidi sliku 4).+vraćena vrijednost je 5, i bilo koja vrijednost koja će biti vraćena nakon izvršavanja ekspresije u **eval** funkciji će biti pridružena varijabli **player** (vidi sliku 4).
  
 Potrebno je pronaći način kako mijenjati druge varijable u globalnom kontekstu programa, kao varijablu **s**, unutar **eval** funkcije, čiji se rezultat izvršavanja pridružuje varijabli **player**. Potrebno je pronaći način kako mijenjati druge varijable u globalnom kontekstu programa, kao varijablu **s**, unutar **eval** funkcije, čiji se rezultat izvršavanja pridružuje varijabli **player**.
Line 170: Line 174:
 {{ elemental_fighters:slika13.png?nolink&500 | Slika 13 - walrus operator unutar zagrada}} {{ elemental_fighters:slika13.png?nolink&500 | Slika 13 - walrus operator unutar zagrada}}
  
-Ovo je zapravo slučaj u kodu zadatka, zato što se oko unosa dodaju zagrade, što je prikazano na slici ispod.+Ovo je slučaj u kodu zadatka, zato što se oko unosa dodaju zagrade, što je prikazano na slici ispod.
  
 {{ elemental_fighters:slika14.png?nolink&500 | Slika 14 - zagrade oko korisničkog unosa}} {{ elemental_fighters:slika14.png?nolink&500 | Slika 14 - zagrade oko korisničkog unosa}}
Line 176: Line 180:
 Kada su zagrade oko unosa, unutar zagrada mora biti validan **expression**, što `s=0` nije nego je **statement**, kao što se vidi na slici ispod. Kada su zagrade oko unosa, unutar zagrada mora biti validan **expression**, što `s=0` nije nego je **statement**, kao što se vidi na slici ispod.
  
-{{ elemental_fighters:slika15.png?nolink&500 | Slika 15 - nevaljajuca sintaksa}}+{{ elemental_fighters:slika15.png?nolink&500 | Slika 15 - neispravna sintaksa}}
  
-Zato rješenje:+To čini ovaj pristup neizvedivim:
  
 <file> <file>
Line 185: Line 189:
 </file> </file>
  
-nije moguće izvršiti. 
  
-Ali walrus operator je validan **expression** i namijenjen je za izvršavanje unutar **expressiona**, što se može napraviti stavljanjem dodatnih zagrada. Ovako se walrus operator može izvršiti i unutar **eval** i unutar **exec** funkcije, gdje u oba slučaja uspješno mijenja vrijednost varijable (ali samo ako se **exec** i **eval** pokreću unutar globalnog konteksta).+"alrus operator je validan **expression** i namijenjen je za izvršavanje unutar **expressiona**, što se može napraviti stavljanjem dodatnih zagrada. Ovako se walrus operator može izvršiti i unutar **eval** i unutar **exec** funkcije, gdje u oba slučaja uspješno mijenja vrijednost varijable (ali samo ako se **exec** i **eval** pokreću unutar globalnog konteksta).
  
 {{ elemental_fighters:slika16.png?nolink&500 | Slika 16 - walrus i eval / exec}} {{ elemental_fighters:slika16.png?nolink&500 | Slika 16 - walrus i eval / exec}}
Line 209: Line 212:
 {{ elemental_fighters:slika20.png?nolink&500 | Slika 20 - pojednostavljeno izvršavanje payloada}} {{ elemental_fighters:slika20.png?nolink&500 | Slika 20 - pojednostavljeno izvršavanje payloada}}
  
-Sada je poznato rješenje i razlog zašto rješava zadatak.+Sada je poznato rješenje i način kako rješava zadatak.
  
 Rješenje se može unijeti ovako: Rješenje se može unijeti ovako:
Line 232: Line 235:
 {{ elemental_fighters:slika23.png?nolink&500 | Slika 23. - eval unutar global scopea}} {{ elemental_fighters:slika23.png?nolink&500 | Slika 23. - eval unutar global scopea}}
  
-Ovo vrijedi i za **eval** i za **exec**. +Ovo pravilo vrijedi i za **eval** i za **exec**, obje funkcije mogu mijenjati globalne varijable samo kada se izvršavaju u globalnom scopeu.
elemental_fighters.1763651904.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki