Napíšte funkciu, ktorá vypočíta:
Napíšte funkciu is_palindrome
, ktorá vezme slovo (reťazec) a vráti True
pokiaľ je slovo palindróm, inak False
.
Stránka projecteuler.net obsahuje veľké množstvo matematicko-programátorských úloh rôznej zložitosti.
Vašou úlohou bude vyriešiť úlohu 7.
Pre vyriešenie úlohy môžete postupovať nasledovne:
is_prime
, ktorá vezme prirodzené číslo a vráti True
ak číslo je prvočíslo. V opačnom prípade vráti False
.Samozrejme, existujú aj iné, možno priamejšie, postupy, ktoré vám môžu vyhovovať viac, napr. Eratostenovo sito.
Napíšte funkciu sort_indices
, ktorá vezme zoznam a vráti indexy, ktoré zoznam zoradia. Napríklad:
= [9, 6, 8]
lst = sort_indices(lst)
inds == [1, 2, 0] inds
Prvý prvok v zoradenom zozname je lst[1]
, druhý lst[2]
, tretí lst[0]
Ďaľšie príklady:
sort_indices([1, 2, 3, 4])
vráti [0, 1, 2, 3]
sort_indices([2, 1, 3, 4])
vráti [1, 0, 2, 3]
sort_indices([4, 3, 1, 2])
vráti [2, 3, 1, 0]
Ďalej, napíšte funkciu apply_inds
, ktorá vezme zoznam a zoznam indexov, a aplikuje tieto indexy na zoznam (vráti nový zoznam):
def apply_inds(lst, inds):
# TODO
9, 6, 8], [1, 2, 0]) # -> [6, 8, 9]
apply_inds([1, 2, 3], [0, 2, 1]) # -> [1, 3, 2] apply_inds([
Vyriešte úlohu zo stránky Advent of Code. Ak sa nechcete na stránku prihlasovať, môj input nájdete v st. materiáloch na ISe.
Pri riešení môžete postupovať nasledovne:
= """5 9 2 8
table 9 4 7 3
3 8 6 5"""
"512 92 21 8"
vytvorí zoznam int
-ov. Budete chcieť využiť metódu str.split
, for
cyklus a funkciu int
.str.splitlines
preveďte tabuľku na jednotlivé riadky.int
-y).min
a max
.Hierarchie, alebo tzv. stromy v informatike, je možné reprezentovať pomocou zanorených zoznamov. Napr. klasifikácia zvierat je strom.
Vašou úlohou bude konvertovať zoznam na podobný výstup ako môžete vidieť na wikipedia stránke, t.j. vypísať to tak, aby bolo jasné čo je podkategória čoho.
Príklad fungovania funkcie:
= [1, [2, 3, [4], 5]]
tree
pretty_print(tree)
Output:
1
2
3
4
5
V tejto úlohe budete pracovať s klasifikáciou slabozubcov. Zoznam nájdete v štúdijných m/ateriáloch, skopírujte si ho do vášho kódu a dajte do premennej.
Príklad 8.5 z knihy Think Python.
Príklad ROT13 sme už inak videli na prvej hodine: this.py.
Túto úlohu som našiel náhodou na tejto stránke. Zadanie je nasledujúce:
Máte naskladaných \(n\) palaciniek na tanieri. Palacinkám je priradená veľkosť. Každá palacinka má inú veľkosť. Musíte zoradiť palacinky, aby najväčšia bola dole, najmenšia hore, a jediná operácia, ktorú môžete urobiť je vložiť niekam špachtľu a otočiť všetky palacinky naopak.
Toto je nevyriešený problém pre \(n\) palaciniek - optimálny algoritmus je neznámy, ale jednoduchý postup na riešenie je takýto:
[4, 17, 2, 5, 1, 3]
Opakujeme s druhou najväčšou palacinkou, ale tentoraz otáčame v poslednom kroku, tak aby najväčšia ostala dole.
Vizualizujte sekvenciu krokov k riešeniu pre obecnú sekvenciu.
Príklad:
= [3, 2, 8, 1]
palacinky
solve(palacinky)
[3, 2, 8, 1]
[8, 2, 3, 1]
[1, 3, 2, 8]
[3, 1, 2, 8]
[2, 1, 3, 8]
[2, 1, 3, 8] # no-op
[1, 2, 3, 8]
Poznámka: Je možné, že palacinky budú zoradené skorej než dokončíte postup. Toto môžete / nemusíte zohľadniť vo vašej implementácií. Tiež, ako je vidieť z príkladu, ak je prvé číslo už maximum, tak jedno otočenie je možné vynechať.