Oznake

AI (1) analiza (1) Arduino (1) elektronika (2) MATLAB (1) motori (4) programiranje (4) python (4) python challenge (3) robot (6) šasija (2) ton generator (1)
Prikazani su postovi s oznakom python challenge. Prikaži sve postove
Prikazani su postovi s oznakom python challenge. Prikaži sve postove

utorak, 28. rujna 2010.

Python challenge - level 3

Na redu je Level 3. Uputa na stranici govori da pronađem slovo sa tri velika bodyguarda sa svake strane. Pretpostavljam da bi to trebalo biti u stilu xXXXxXXXx. Također naslov sitea upućuje na modul re i korištenje regularnih izraza pri rješavanju ovog problema.

 U duhu prethodnog koraka otvaram source kod stranice i pronalazim niz podataka koje zbog jednostavnosti spremam u level3.data i započinjem obradu podataka. Obrada se temelji na pronalasku gore opisanog uzorka. Mali trik u ovom rješavanju je kako od arraya znakova dobiti string. To se postiže slaganjem arraya sa vezivom tipa ''. U rješenju je vidljiv taj trik. Također je potrebno primijetiti da se koristi standardna sintaksa za opis regularnih izraza. Zagradama (nekiIzraz) se vraća rezultat izraza u povratnu vrijednost funkcije.

Kod:

# ukljuci modul re
import re
# otvori datoteku s podatcima
src = open('level3.data').read()
# pretrazi podatke za uzorkom i spoji rezultate
rez = ''.join(re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]',src))
# ispisi rezultat
print(rez)

Rezultat je programa string 'linkedlist'. Što nas upućuje na sljedeći nivo - Level 4.



P.S. Pri instalaciji Pyhtona na Windowse, ako ga automatski ne doda u PATH varijablu, napravite ovo.

nedjelja, 23. svibnja 2010.

Python challenge - Level 2

Nakon dužeg vremena vraćam se Python Challangeu. Na redu je drugi nivo.

Tekst na stranici me upućuje na source kod stranice. U sourceu zakomentirano pronalazim gro znakova i uputu da nađem rijetke znakove.


Da si olakšam rješavanje ovog izazova, prekopirao sam znakove u file level2.data i s njime sam baratao u rješenju. U rješenju sam izgradio dictionary koji sadrži učestalosti pojedinih znakova, nakon toga sam potražio najrjeđe znakove u ulaznim podatcima i ispisao ih kako bih zadržao ispravan poredak znakova. Kao ispis programa sam dobio riječ equality stoga URL na sljedeći nivo je Level 3. 


Kod rješenja je:


src = open('level2.data').read()
dict = {}
for char in src:
if char in dict.keys():
dict[char] = dict[char] + 1
else:
dict[char] = 1
for char in src:
if dict[char] == 1:
print (char, end='')


Treba primijetiti da se u novom Pythonu verzije 3 drugačije ponaša funkcije print. Npr. da se izostavi newline pri ispisu, naredba se piše print(string, end='').

utorak, 27. travnja 2010.

Python challenge - Level 0 & 1

Nakon instalacije Pythona 3.1.2. za Win32 i Notepad++, otisnuo sam se u mora ovih izazova.

Level 0
Ovo je poprilično jasno. Iz slike se vidi da treba izračunati koliko je 2^38, a hint upućuje na to da rezultat treba upisati u URL. Nakon run > cmd, u CLIju pozovem python i poslužim se njegovim interpreterom (nakon >> se upisuju komande kao kasnije u skriptama). Upisujem 2**38 i dobivam broj 274877906944. Umjesto 0.html upisujem 274877906944.html i dolazim na Level 1.

Level 1
Ovaj nivo je nešto kompliciraniji i zahtjevat će pisanje male skriptice. Radi se o jednostavnom enkriptiranju teksta. Tekst se enkriptira tako da se svakom slovu ASCII kod poveća za 2.

level1.py:
dataIn = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj." 
dataOut = []
for char in dataIn:
dataOut.append(chr(ord(char)+2))
print(''.join(dataOut))

Pošto baratam s Unicode znakovima, tekst ispada malo čudan.
Kod za sljedeći nivo je: ocr