Autorské riešenie
[stiahni py]

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

  • Úspešnosť riešenia: 4,96 / 6 = 83 %

Cieľom úlohy bolo na základe vstupnej hodnoty zo senzora vrátiť počet obdĺžnikov, ktoré je potrebné vysvietiť na displeji autonómneho vozidla. Jedno z možných zobrazení vysvietenia je znázornené na obrázku - displej obsahuje 7 obdĺžnikov a vysvietené sú práve 4 obdĺžniky.

šifrovanie

Vstupná hodnota je zakódovaná ako päťciferné číslo v trojkovej sústave.

Úloha mala viacero možných riešení.

Jedným z vhodných riešení je previesť túto vstupnú hodnotu na desiatkové číslo. Prevody medzi číselnými sústavami v jazyku Python je možné riešiť nasledujúcimi spôsobmi:

  1. použitie funkcie int(cislo, zaklad), ktorá prevedie číslo so základom do desiatkovej sústavy,
  2. inštalovaním modulu baseconvert, pomocou ktorého je možné prevádzať ľubovolným smerom,
  3. postupným výpočtom cez násobenie základu čísla vhodným exponentom.

Vieme, že všetky päťciferné čísla v trojkovej sústave predstavujú 3*3*3*3*3=243 rôznych hodnôt v desiatkovej sústave.

Následne už postačí týchto 243 hodnôt správne rozdeliť do ôsmich rovnako veľkých intervalov. Inými slovami, na určenie počtu vysvietených obdĺžnikov postačí číslo v desiatkovej sústave vydeliť počtom všetkých hodnôt a následne tento podiel vynásobiť ôsmimi. Číslo, ktoré dostaneme, zaokrúhlime smerom dole, a tak dostaneme celé číslo, ktoré vyjadruje počet obdĺžnikov.

# Python
def stupen_vysvietenia(vstup):
    return math.floor(int(vstup, 3) / 3 ** 5 * 8)

Úlohu bolo možné riešiť aj bez prevodu na desiatkovú sústavu. Tento spôsob využíva možnosť porovnávania reťazcov v jazyku Python. Nevýhodou tohto riešenia je potreba nájdenia hraníc, v ktorých sa počet vysvietených obdĺžnikov mení.

# Python


def stupen_vysvietenia_inak(vstup):
    if vstup < '01011':
      return0
    elif vstup < '02021':
      return1
    elif vstup < '10102':
      return2
    elif vstup < '11112':
      return3
    elif vstup < '12122':
      return4
    elif vstup < '20210':
      return5
    elif vstup < '21220':
      return6
    else:
      return7

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

Úlohu riešilo 24 tímov, väčšinou správne. Väčšina tímov použila prevod trojkovej sústavy na desiatkovú a následne určila hranica vzťahom alebo priamym zadaním hraníc intervalov. žiaden tím neriešil úlohu porovnávaním reťazcov. Medzi najčastejšie chyby patril nepresný prevod z trojkovej do desiatkovej sústavy. Niektorým riešeniam chýbalo ošetrenie prípadov, ak v päťcifernom čísle v trojkovej sústave na vstupe je prvá cifra rovná 0. Tiež malé nedostatky vznikali aj pri prevodoch na počet obdĺžnikov. Jeden tím vyriešil úlohu aj s možnosťou prevodou medzi rôznymi číselnými sústavami.