Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 11 / 14 = 79 %

  • Úspešnosť riešenia: 3,6 / 5 = 73 %

Úloha je zameraná na spracovanie textu a výpočet, použije sa generovanie náhodných čísel/znakov.

Riešenie úlohy treba rozdeliť do viacerých krokov: načítať vstupnú vetu, rozdeliť vstupnú vetu na slová, spočítať slová, skontrolovať počet slov vo vete, vypočítať číslicu z počtu slov ako prvý znak hesla, postupne vybrať z každého slova prvé písmeno a pridať ho do hesla, náhodne generovať posledný znak a vložiť ho do hesla, vrátiť (vypísať) heslo.

Vstupná veta nech je načítaná do zoznamu (poľa), aby sa slová vo vete dali ľahko spočítať ako prvky zoznamu a pracovať so slovami ako s textovými prvkami zoznamu. V Imagine treba zadať vstup ako zoznam slov, alebo ako textový reťazec a rozlišovať slová pomocou medzery, alebo načítať vetu samostatne z klávesnice. Riešenia v Imagine preto môžu byť odlišné. Používateľ by mal byť informovaný, aký spôsob načítania vety je použitý (aspoň v komentári). Slovo môže byť textová premenná, alebo zoznam, v ktorom sú písmená ako prvky zoznamu. Znak náhodne generovaný má byť z menšej množiny (nie malé písmeno, nie veľké písmeno, nie číslica). To sa dá riešiť viacerými spôsobmi. Pozrime sa na ASCII tabuľku znakov, určime rozsah vhodných znakov, pozrime sa na ich desiatkový číselný kód (napr. 33 až 48), generujme číslo z tohto rozsahu a zmeňme ho na znak. Druhý spôsob: vytvorme si zoznam vhodných znakov a náhodne vyberajme prvok z tohto zoznamu (generujme náhodnú pozíciu prvku v zozname).

Nezabudnime na komentár v zdrojovom kóde pre vysvetlenie pomenovania premenných a postupu výpočtu.

;Imagine logo
viem heslo :veta
  urobTu "heslo prvok 1 :veta
  urobTu "pocetSlov 1
  opakuj pocet :veta [
    ak prvok pocitadlo :veta = "| | [
      urobTu "heslo slovo :heslo prvok (pocitadlo + 1) :veta
      zvys "pocetSlov
    ]
  ]
  ak2 alebo (:pocetSlov < 5) (:pocetSlov > 18) [
    pis "|Vstup ma mat od 5 do 18 slov|
  ] [
    urobTu "heslo slovo (cPodiel :pocetSlov 2) :heslo
    urobTu "heslo slovo :heslo (prvok 1 pomiesaj [! @ $ % ^ & * , . ; - _ ])
    pis :heslo
  ]
koniec

 

# Python
import random
def heslo(veta):
    '''
    Funkcia vrati heslo vygenerovane zo vstupu.
    :param veta: vstupna veta
    :type veta: string
    :return: heslo
    :rtype: string
    '''
    heslo = ""
    veta = veta.split()  # rozdeli vetu do zoznamu po slovach
    if len(veta) < 5 or len(veta) > 18:  # kontrola vstupu
        print("Vstup ma mat od 5 do 18 slov")
    else:
        heslo = str(len(veta) // 2)  # cislica
        for slovo in veta:  # znaky ako prve pismena zo slov
            prvyZnak = slovo[0]
            heslo = heslo + prvyZnak
        # heslo = heslo + chr(random.randrange(33, 48))  # nahodny znak na koniec
        # alebo
        heslo = heslo + random.choice(["!", "@",  "$", "%", "^", "&", "*", ",", ".", ";", "-", "_",])
        print(heslo)
heslo ("moja m a j l")

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

Zaujímavé riešenie bolo s využitím zoznamu pre vstupnú vetu, kde v cykle s podmienkou sa postupne spracovali slová a zmenšoval sa zoznam, až ostal prázdny.