Rešitev s komentarji
Vse naloge
Za občutek so tu najprej rešitve vseh nalog. Različice rešitev in komentarji so spodaj.
Po nalogah
Naloga A
Potrebno je bilo spremeniti črke v števke in namesto ničtega jemati prvi element niza s pozicijo.
Naloga B
Na določeno strateško mesto v vaši funkciji ste morali dodati nekaj v slogu if ime[0] != "."
Sodi vs. lihi
Ne enkrat, trikrat jo rešimo!
Razvlečena klasika
Preštejemo, koliko je lihih. Sestavimo nov, prazen seznam. Če je lihih več kot pol, dodamo vanj vse lihe, sicer dodamo vanj vse sode.
Dva izpeljana seznama
Naredimo seznam lihih. Naredimo seznam sodih. Vrnemo lihe, če jih je več kot sodih, sicer pa sode.
Bool kot int
Tega pa si razložite sami.
Hamilkon
Obhod mora imeti 65 polj (len(obhod) == 65
). Vsako polje se mora pojaviti samo enkrat, razen prvega in zadnjega; to preverimo tako, da iz seznama naredimo množico in ta mora imeti 64 elementov (len(set(obhod)) == 64
). Prvo polje mora biti enako zadnjemu (obhod[0] == obhod[-1]
). Če kaj od tega ni res, kar takoj vrnemo False
.
Sicer preverimo vsak par zaporednih polj in, tako kot pri nalogi z napadalnimi kraljicami, izračunamo razliko koordinat. Pri kraljicah sta morali biti enaki, tu pa mora biti ena 1 in druga 2. Da se ne zafrkavamo s tem, katera je katera jih spravimo kar v množico in preverimo, ali je ta množica enaka {1, 2}
.
Naslednji avtobus
Naloga je klasičen "poišči najmanjši element" z dodatnim trikom: kako primerjati številke avtobusov? Vsekakor jih bomo morali iz nizov pretvoriti v števila, da bo 2 manj kot 11. Po drugi strani pa se je potrebno znebiti odvečne črke na koncu. Takole naredimo: če je zadnji znak imena avtobusa števka, potem uporabimo celo ime, sicer vse znake do zadnjega: stev = int(avtobus if avtobus[-1].isdigit() else avtobus[:-1])
. Odtod naprej je preprosto.
Cenzura
Razbijemo na besede, vzamemo tiste, ki niso prepovedane, združimo nazaj v niz.
Dvosmerni slovar
Naloga je zelo blizu domači nalogi. Kdor je prebral komentarje rešitve, je ravnal pametno, saj je z nalogo zelo hitro opravil. Novi razred je izpeljal kar iz slovarja in "popravil" __getitem__
. Novi __getitem__
preveri, ali v slovarju obstaja takšen ključ in v tem primeru kliče podedovani __getitem__
. Sicer preišče slovar in če najde iskano vrednost, vrne ključ.
Omenimo, da bi za dobro rešitev raje uporabljali dva slovarja, za izpit pa je tole seveda dovolj.