Autorské riešenie
[stiahni imp py]

  • Počet riešiteľov: 13 / 18 = 72 %

  • Úspešnosť riešenia: 3 / 6 = 50 %

Táto úloha nie je veľmi náročná na riešenie. Je potrebné si však pozorne prečítať zadanie a porozumieť mu. Podľa zadania:

  • Sused, ktorý ide nakupovať, pridá do nového zoznamu všetok svoj tovar.

    • Do nového spoločného zoznamu, ktorý je na začiatku prázdny, môžeme pridať všetok tovar nakupujúceho suseda.

  • Ak niektorý zo susedov má v zozname rovnaký tovar ako nakupujúci, tak tento tovar sa tiež pridá do nového zoznamu.

    • Tovar suseda, ktorý nenakupuje, pridáme do spoločného zoznamu vtedy, ak je aj v zozname nakupujúceho suseda.

Ešte predtým ako sa pustíme do vytvárania samotnej procedúry/funkcie uvedomme si, aké parametre by sme jej mali definovať. Na poschodí bývajú traja susedia a každý má svoj nákupný zoznam. Tieto tri zoznamy by mali byť parametrami.

Výsledná procedúra/funkcia môže vyzerať nasledovne:

# Python
def spolocny_zoznam(nakupujuci, sused1, sused2):

    spolocne_tovary = nakupujuci.copy()

    for tovar in sused1:
        if tovar in nakupujuci:
            spolocne_tovary.append(tovar)

    for tovar in sused2:
        if tovar in nakupujuci:
            spolocne_tovary.append(tovar)

    return spolocne_tovary


print(spolocny_zoznam(['mlieko', 'maslo', 'chlieb', 'chlieb'],
                      ['maslo', 'chlieb', 'párky'],
                      ['párky', 'chlieb', 'horčica']))
# Imagine Logo
viem spolocny_zoznam :nakupujuci :sused1 :sused2
  ;spolocny_zoznam [mlieko maslo chlieb chlieb]
                   [maslo chlieb párky]
                   [párky chlieb horčica]

  urobTu "spolocne_tovary :nakupujuci

  prePrvky "tovar :sused1[
    ak prvok? :tovar :nakupujuci [
      urobtu "spolocne_tovary vlozPosledny :tovar :spolocne_tovary
    ]
  ]

  prePrvky "tovar :sused2[
    ak prvok? :tovar :nakupujuci [
      urobtu "spolocne_tovary vlozPosledny :tovar :spolocne_tovary
    ]
  ]

  vysledok :spolocne_tovary
koniec

Všimnime si ešte jednu vec v riešení v jazyku Python. Do spoločného zoznamu nepridávame zoznam nakupujúceho ale jeho kópiu. Výsledok by sa síce nezmenil, ale ak by sme chceli s pôvodným zoznam nakupujúceho v hlavnom programe pracovať, už by bol zmenený. Preto je výhodnejšie vytvoriť si kópiu a pôvodný zoznam nechať nezmenený.

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

Častou chybou bolo, že do spoločného zoznamu ste zaradili všetky tovary zo všetkých zoznamov.

 Niektorí z vás zbytočne prechádzali súčasne dvoma zoznamami (nakupujúci a sused). Výsledkom bolo, že niektoré tovary sa do spoločného zoznamu pridali viac krát než bolo potrebné.

Zoznamy ako také umožňujú operácie pomocou ktorých sa s nimi dá "šikovne" pracovať. Je výhodné ich poznať a používať. V opačnom prípade vaše riešenie môže vyzerať dosť neprehľadne.

Niektorí z vás si riešenia zbytočne skomplikovali, keď vytvárali kód na načítanie tovarov susedov. Toto podľa zadania nebolo potrebné riešiť. Komplikáciu si spôsobili aj tí, ktorí zoznam tovarov reprezentovali ako reťazec, kde boli jednotlivé položky oddelené medzerou alebo čiarkou.

Poslednou častou chybou bolo, že procedúra/funkcia výsledok vypísala. Podľa zadania ho mala vrátiť.