Prvi dve nalogi sta sodili bolj v Uvod v programiranje. Tretja je bila očitno naloga iz rekurzije, četrta iz slovarjev in množic, peta iz objektnega programiranja.

Prelivanje

Tu gre za nalogo, ki bi jo znali izvesti na papirju. Zanimalo me je, ali jo znate sprogramirati. Šlo je torej predvsem za nalogo, ki je ocenjevala, ali znate formalno zapisati postopek, ki ga neformalno razumete.

Soroden problem, ki ste ga morali rešiti, je bilo razumevanje pomena argumentov. Ker to ni bilo bistvo naloge, sem se malo bolj potrudil s primerom v izpitu.

def pretoci(velikosti, vsebina, iz, v): if v is None: vsebina[iz] = 0 elif iz is None: vsebina[v] = velikosti[v] else: pretociti = min(vsebina[iz], velikosti[v] - vsebina[v]) vsebina[iz] -= pretociti vsebina[v] += pretociti

Čolni

Tole je tipična naloga iz Uvoda v programiranje - in najbolj klasičen koncept, namreč zanka, v kateri je if, v katerem je return. To nalogo ste večinoma uspešno rešili.

Ob predpostavki, da poznate funkcijo sum (tisti, ki je ne, ste se mučil s še eno zanko), rešimo nalogo tako:

def ni_preobremenjenih(tovori, nosilnost): for coln in tovori: if sum(coln) > nosilnost: return False return True

Le Neža in Boštjan pa sta suvereno napisala:

def ni_preobremenjenih(colni, nosilnost): return all(sum(coln) <= nosilnost for coln in colni)

Pari

Rešitev je ena od običajnih oblik rekurzije. Tudi pri tej nalogi ste bili kar uspešni (karkoli drugega bi bilo razočaranje - gre za klasičen vzorec...). Najpogostejša napaka je bila, da ste pozabili ustavitveni pogoj, namreč ali je seznam prazen.

def vecji(moski, zenske): return not moski or moski[0] > zenske[0] and vecji(moski[1:], zenske[1:])

Tule predpostavljamo, da sta oba seznama enako dolga. Točneje, predpostavljamo, da je moških manj. Naloga pravi, da gre za ples, torej je predpostavka smiselna.

Podobnosti

Tole je bila najtežja naloga. Tako je bilo tudi nekako načrtovano. Tule so se lahko izkazali neustrašni.

Mnogi izmed teh, ki ste se je lotili, ste se mučili, ker se niste spomnili, da bi se splačalo uporabiti množice.

def podobnosti(besedila): p = {} for besedilo1 in besedila: besede1 = set(besedilo1.split()) for besedilo2 in besedila: if besedilo1 is not besedilo2: besede2 = set(besedilo2.split()) p[(besedilo1, besedilo2)] = len(besede1 & besede2) / len(besede1 | besede2) return p

Dolžina poti

Najprej se spomnimo kode, ki je bila podana.

from math import sin, cos, sqrt, pi class Robot: def __init__(self): self.x = self.y = 0 self.pot = [(0, 0)] def premik(self, kot, koliko): self.x += koliko * cos(kot) self.y += koliko * sin(kot) self.pot.append((self.x, self.y))

Naloga pravi: ne da bi spreminjali obstoječi metodi, dodajte novo metodo, ki ... Ugotoviti je bilo potrebno, kakšne podatke shranjujeta podani metodi. Očitno zapisujeta vso pot, ki jo je prehodil robot, torej je potrebno le sešteti razdalje na tej poti.

def dolzina_poti(self): v = 0 for (x0, y0), (x1, y1) in zip(self.pot, self.pot[1:]): v += sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2) return v
Zadnja sprememba: torek, 9. junij 2015, 21.38