Autorské riešenie
[stiahni py]

  • Počet riešiteľov: 13 / 25 = 52 %

  • Úspešnosť riešenia: 4,31 / 8 = 54 %

V tejto úlohe bolo treba nakresliť parkovacie miesta pre novo postavené obytné domy. Pričom sa musia brať do úvahy tieto pravidlá:

  • parkovacie miesta sa budujú na voľnej ploche po oboch okrajoch cesty,
  •  pre 1 izbový byt sa počíta 1 parkovacie miesto
  • pre 2 izbový byt sa počíta 1,5 parkovacieho miesta,
  • pre 3 a viac izbový byt sa počítajú 2 parkovacie miesta,
  • parkovacie miesto má rozmery 3 m x 5 m,
  • minimálne 4% zparkovacích miest (minimálne jedno) sú vyhradené pre zdravotne postihnutých, tieto parkovacie miesta majú rozmery 5 m x 5 m, sú umiestnené čo najbližšie pri vchode a vyznačené modrou čiarou,
  • pri každom dome je vyhradené jedno parkovacie miesto pre sanitku alebo hasičské auto, jeho rozmery sú 5 m x  5 m a je umiestnené pri vchodea vyznačené žltou čiarou,

V riešení ste mali používať matematické funkcie na výpočet počtu parkovacích miest podľa počtu 1, 2 a 3 izbových bytov v jednom bytovom dome. Ako 3 parametre procedúry kresliPlanParkoviska bolo vhodné dať počty jednotlivých typov bytov. Počet parkovacích miest potom treba zaokrúhliť smerom nahor. Počet miest pre vozíčkarov  vypočítame ako 4% z počtu parkovacích miest, ale najmenej 1 miesto.

Teda:    

n = round(pocet1 + pocet2* 1.5 + pocet3*2)

Počet miest pre vozíčkarov:

if inv <1: inv = 1
else: inv = round(inv)

Na vykreslenie sme použili 4 procedúry:
  • miesto(a,b) - na vykreslenie parkovacieho miesta s rozmermi a, b
  • parkovisko_v() - na vykreslenie  miesta pre vozíčkarov
  • hasici() - na vykreslenie miesta pre hasičov
  • parkovisko() - na vykreslenie parkových miest pre polovicu vozíčkarov a polovicu miest na jednej strane, na druhej strane pre hasičov a zvyšnú časť miest pre vozíčkarov  a bežných miest.
Hlavná procedúra kresliPlanParkoviska má 3 parametre - počet 1 izbových, 2 izbových a 3 izbových bytov. V nej sa vypočítajú počty parkovacích miest a počet miest pre vozíčkarov a táto potom volá procedúru parkovisko().

alternatívny text k obrázku

def parkovisko(n):
# miesta pre invalidov- polovičný počet parkovisko_v(inv - inv//2)
t.pencolor('black')
    # bežné miesta na 1 strane parkoviska - polovičný počet
for i in range(n // 2):
miesto(3, 5)
t.fd (3*pomer)
t.pu()
t.setpos(-(n//4)*pomer*3, 6*pomer)
t.pd()
hasici() # miesto pre hasičov najbižšie ku domu
parkovisko_v(inv//2) # miesta pre invalidov- druhá polovica

# bežné miesta na 1 strane parkoviska - polovičný počet t.pencolor('black')
for i in range (n - n//2):
miesto(3,5)
t.fd (3*pomer)

Premenná  pomer je určená na prekresľovanie parkovacích miest v pomere 1 meter ku 10 pixelom obrázka.

Vaše zaujímavé riešenia a najčastejšie chyby

Zaujímavé riešenie bolo, keď si riešiteľ vypočítal dĺžku parkoviska pre dané parkovacie miesta:

dlzka = math.ceil((biele*3+modre*5+zlte*5)/2) 
# biele - bežné miesto, modré - vozíčkari, žlté - hasiči

Časté chyby, ktoré ste robili vo vašich riešeniach:

  • používali ste procedúry bez vstupných parametroch
  • niektorí z riešiteľov nepoužívali cyklus na vykresľovanie parkoviska
  • niektorí nevykresľovali parkovacie miesta, iba vonkajší okraj parkoviska