Autorské riešenie
[stiahni py]                                       

  • Počet riešiteľov: 27 / 27 = 100  %                       

  • Úspešnosť riešenia:  5 / 6 = 83 %                   

Riešenie úlohy o textovej analýze je založené na práci s textami, pričom zo vstupného textu je potrebné určiť:

  • dĺžku vstupu (len(vstup)),
  •  zoznam dĺžok jednotlivých častí (dlzky) tak, aby bolo splnené pravidlo, že počty znakov v jednotlivých častiach sa líšia maximálne o jeden znak, tu využijeme zvyšok po delení dĺžky reťazca na 4 časti (zvysok),
  • indexy konca jednotlivých častí zoznamu (indexy).

Na určenie dĺžky zoznamu vieme použiť funkciu len(). Dĺžky jednotlivých častí zoznamu určíme tak, že si vypočítame výsledok celočíselného delenia dĺžky zoznamu štyrmi. Pomocou zvyšku po delení dĺžky zoznamu štyrmi si vieme určiť, koľko častí zoznamu bude mať dĺžku zväčšenú o jedna. Ak sa nám podarí určiť predchádzajúce hodnoty, je už ľahké pôvodné slovo zrekonštruovať tak, že jednotlivé časti zlepíme v určenom poradí, pričom môžeme použiť výrezy jazyku Python, napríklad pomocou príkazov stvrtina2 = vstup[indexy[0]:indexy[1]] .

Nasleduje možný zdrojový kód v jazyku Python

# Python
def zrekonstruuj(vstup,):
    stvrtina = len(vstup) // 4
    dlzky = [stvrtina] * 4
    zvysok = len(vstup) % 4
    for i in range(zvysok):
        dlzky[i] += 1
    dlzky = [dlzky[1], dlzky[3], dlzky[0], dlzky[2]]
    indexy = []
    for i in range(3):
        indexy.append(sum(dlzky[:i + 1]))

    stvrtina1 = vstup[:indexy[0]]
    stvrtina2 = vstup[indexy[0]:indexy[1]]
    stvrtina3 = vstup[indexy[1]:indexy[2]]
    stvrtina4 = vstup[indexy[2]:]
    return stvrtina3 + stvrtina1 + stvrtina4 + stvrtina2


vstupy = ('ormckyinfati', 'ormikinfat', 'eslieakren', 'sliekreen')
for vstup in vstupy:
    vystup = zrekonstruuj(vstup)
    print(f'{vstup} -> {vystup}' False

Všimnime si, že dĺžky jednotlivých častí sme si uložili do zoznamu, aby sa nám s nimi jednoduchšie pracovalo. Následne z nich počítame indexy, kde a jednotlivé časti reťazca končia. Opäť ich ukladáme  do zoznamu.

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

Úlohu riešilo 27 tímov. Väčšina riešení bola správna a využívala zvyšok po delení štyrmi na určenie štyroch rôznych prípadov. Viaceré tímy tieto štyri prípady skúmala osobitne a navrhla postup osobitne pre každý z nich. Iba niektoré z tímov to riešili univerzálne, a teda spôsobom, ktorý by sa neskôr dal zovšeobecniť aj na väčší počet častí slova. Niektoré tímy nevyriešili niektorý z týchto štyroch prípadov a riešenie teda fungovalo len pre niektoré vstupy. Niektorým tímom sa podarilo len zlepiť časti slova, a teda na vstupe nepoužívali celé slovo, ale hneď časti tohto slova na dátových uzloch.