Izziv: Rešitev z numpy-jem
Nalogo je čisto preprosto rešiti z numpy-jem. Ampak samo tistim, ki obvladajo numpy.
import numpy as np
zemljevid = [
"......",
"..##..",
".##.#.",
"...###",
"###.##",
]
zemljevid = np.array([[0] + [int(c == "#")
for c in vrstica] + [0] for vrstica in zemljevid])
zemljevid
je po tem tabela v numpy-ju, ki vsebuje enke na mestih, kjer so ovire; levo in desno sta dodana še stolpca ničel.
array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 1, 1, 0],
[0, 1, 1, 1, 0, 1, 1, 0]])
Ovire se začnejo tam, kjer enica sledi ničli in končajo tam, kjer enici sledi ničla.
S tremi vrsticami numpy
-ja - brez kakršnekoli zanke v Pythonu - je možno pridelati tabelo, ki je v bistvu rešitev naloge:
array([[3, 4, 2],
[2, 3, 3],
[5, 5, 3],
[4, 6, 4],
[1, 3, 5],
[5, 6, 5]])
Znaš?
Nasveti:
- glavni trik je odštevanje po stolpcih. Tabelo, ki ji odbijemo prvi stolpec, je potrebno odšteti od tabele, ki ji odbijemo zadnjega. Ali nekaj podobnega. Potem pa preveriti, kje v rezultatu so enice. Ali nekaj podobnega.
- Poglej funkcijo
np.nonzero
. Z njo hitro prideš do koordinat začetkov in koncev ovir. Rezultat razpakiraš vy
inx0
oziromay
inx1
. (Če boš prav naredil, boš dvakrat dobil istiy
). - Če so vse številke v kaki tabeli prevelike ali premajhne za 1, ji odštej ali prištej 1.
- Če imaš tri enodimenzionalne tabele, ki jih želiš zložiti v eno, lahko uporabiš
np.column_stack
.
Če rešiš nalogo na ta način (in si prepričan, da deluje pravilno), jo lahko oddaš kot rešitev obveznega dela domače naloge.
Последнее изменение: Воскресенье, 30 октября 2022, 17:54