Autorské riešenie
[stiahni]

  • Počet riešiteľov: 9 / 11= 82%

  • Úspešnosť riešenia: 2.83 / 6= 47 %

Riešenie tejto úlohy si rozdelíme do dvoch častí:

  1. reakcia na stlačene tlačidla klientom na automate na lístky - túto časť vyriešime v procedúre evidujKlienta,

  2. reakcia na stlačenie tlačidla úradníkom vo svojej kancelárii - túto časť vyriešime v procedúre zavolajKlienta.

Pre každého klienta potrebujeme evidovať aký úrad chce navštíviť a aké je jeho poradie na tomto úrade. Zoznam klientov by preto mal obsahovať zoznam dvojíc [úrad poradie]. Keďže pre každý úrad je samostatné poradie, mali by sme si pamätať, aké je poradie nového klienta pre každý úrad zvlášť. Toto poradie sa navyše na začiatku každého dňa vynuluje. Využijeme preto aj pomocnú procedúru novyDen

viem novyDen
  urob "skolstvo 0
  urob "doklady 0
  urob "stavby 0
koniec

Procedúra na evidenciu klientov vyzerá potom nasledovne: 

viem evidujKlienta :urad

  akJe :urad [
    skolstvo [zvys "skolstvo urobTu "poradie :skolstvo]
    doklady [zvys "doklady urobTu "poradie :doklady]
    stavby [zvys "stavby urobTu "poradie :stavby]
  ]

  vytlacListok :urad :poradie
  urob "klienti vlozPo zoznam :urad :poradie :klienti

koniec

Podľa toho, ktoré tlačidlo bolo na automate stlačené zvýšime počet klientov čakajúcich na príslušný úrad. Zároveň vytlačíme lístok pre klienta a pridáme ho do zoznamu klientov na koniec. Tým zabezpečíme, že v tomto zozname sú klienti v takom poradí, v akom prišli na úrad.

To, pre ktorého klienta sa zobrazí výzva záleží od toho, ktorý úradník chce vybaviť ďalšieho klienta (presnejšie od úradov pre ktoré vybavuje klientov) a od poradia klientov v zozname čakajúcich klientov.

Stačí nám teda prehľadávať od začiatku zoznam klientov a nájsť prvého, ktorého žiadosť vie úradník vybaviť. Zisťujeme, či úrad na ktorý čaká klient je jedným z úradov, pre ktoré úradník pracuje. Hneď ako takého klienta nájdeme, odstránim ho zo zoznamu čakajúcich klientov a zobrazíme pre neho výzvu. Procedúru môžeme následne ukončiť

viem zavolajKlienta :priehradka

  akJe :priehradka [
    p1 [urobTu "urady :p1]
    p2 [urobTu "urady :p2]
    p3 [urobTu "urady :p3]
  ]

  prePrvky "klient :klienti [
    urobTu "urad prvok 1 :klient
    ak prvok? :urad :urady [
      urob "klienti bezVyskytov :klient :klienti
      zobrazVyzvu prvok 1 :klient prvok 2 :klient :priehradka
      ukonci
    ]
  ]

koniec

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

Túto úlohy vyriešili správne dva tímy a jeden tím ju vyriešil takmer správne.

Medzi najčastejšie chyby patrilo to, že ste si neuvedomili, že každý úrad má svoje poradie a že úradník môže vybavovať klientov pre rôzne úrady.