NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Soutěž: Machr na algoritmy - Brainf***

Soutěž již skončila

Zadání

Tentokrát si zasoutěžíte v práci s ezoterickým jazykem jménem Brainfuck. Pokud ho někdo nezná, základní informace najdete např. tady: https://esolangs.org/wiki/Brainfuck .
Machr bude rozdělen na 2 samostatné části (každá bude hodnocena zvlášť, můžete se zúčastnit obou naráz):

  1. V první části bude vaším úkolem v tomto jazyce napsat několik prográmků - kratší program = více bodů
  • šifrovací program: na vstupu dostane šifrovací klíč a zprávu stejné délky, a to následujícím způsobem - kzkzkzkzkz... kde k je znak klíče a z je odpovídající znak klíče. Šifrovat se bude posunem o hodnotu znaku klíče (jako u Vernamovy šifry - https://cs.wikipedia.org/…a_%C5%A1ifra )
  • dešifrovací program: stejný jako předchozí, jen místo zprávy dostany její zašifrovanou podobu a má za úkol vypsat původní zprávu
  • vypsání všech znaků, které lze vypsat (hodnoty 0 - 255)
  • rozepsání vstupu - každý znak na nový řádek
  • vypsání vstupu ukončeného znakem ! (např. pro vstup Hello!World se vypíše jen Hello)
  • lepší šifrovací program: vstup bude ve tvaru klíč!zpráva, zpráva a klíč budou stejně dlouhé
  • dešifrovací program pro předchozí bod

Pozn. Prográmky můžete testovat např zde: http://brainfuck.tk/
Pozn 2. za konec řádku bude považován znak s kódem 10, konec vstupu (EOF) je 0, program bude mít k dispozici 30 000 bajtů bez znaménka (hodnoty 0 - 255)

  1. Druhou část bude tvořit napsání interpreteru brainfucku v jednom z následujících jazyků: C#, Java, C++, Visual Basic. Úkolem je napsat ho co nejjednodušeji, nicméně musí splňovat následující podmínky:

vstup čte ze souboru, výstup vypisuje do konzole / souboru, umožňuje přetečení a podtečení hodnot, bude splňovat 2. poznámku z 1. části

Pro jakékoli dotazy je dost místa v komentářích.

Pozn.: Prosím odevzdávejte to v zazipované složce, ať to nemusím rozbalovat nějakou webovou službou

Výhra

Vítěz dostane placku Machr na algoritmy a ocenění do portfolia.

Výhra

Výsledky

Jméno bodů Řešení ( Stáhnout vše )
tomisoka 20 Stáhnout řešení
Matěj Kripner 20 Stáhnout řešení
Bratr 14 Stáhnout řešení
rikenbekr 7 Stáhnout řešení
Jan Lupčík 0 Stáhnout řešení
Patrik Valkovič 0 Stáhnout řešení
Aktivity
Avatar
Zdeněk Pavlátka:18.10.2015 17:18

V téhle soutěži si budeme hrát s ezoterickým jazykem brainf***.

Soutěž končí 24.10.2015 23:00:00, tak se nezapomeň zapojit! :-)

Odpovědět
18.10.2015 17:18
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Honza Bittner
Tvůrce
Avatar
Nahoru Odpovědět
18.10.2015 17:37
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Patrik Valkovič:18.10.2015 17:39

Peckááá :D

Nahoru Odpovědět
18.10.2015 17:39
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
alfonz
Člen
Avatar
alfonz:18.10.2015 18:19

Tak interpreter je hotovej, protože jsem si s BF hrál už dřív, dělal jsem si i vlastní editor :D

Nahoru Odpovědět
18.10.2015 18:19
lmao
Avatar
tomisoka
Tvůrce
Avatar
tomisoka:18.10.2015 18:24

Jen pro jistotu:

kde k je znak klíče a z je odpovídající znak klíče.

chápu to dobře, že z je znak, který musíme zašifrovat a k je o kolik to posunem?

 
Nahoru Odpovědět
18.10.2015 18:24
Avatar
rikenbekr
Člen
Avatar
rikenbekr:18.10.2015 19:13

Bylo by možné napsat interpret v c?

Nahoru Odpovědět
18.10.2015 19:13
In world without fences and walls, who needs Gates and Windows?
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:18.10.2015 19:33

Ten jazyk je... no brainfuck...prostě :D

Nahoru Odpovědět
18.10.2015 19:33
the cake is a lie
Avatar
rikenbekr
Člen
Avatar
rikenbekr:18.10.2015 19:36

První dešifrátor dostane vstup kzkzkzkzkzkz
k - znak kliče
z - zakodovany znak
??
Chápu to správně?

Nahoru Odpovědět
18.10.2015 19:36
In world without fences and walls, who needs Gates and Windows?
Avatar
Neaktivní uživatel:18.10.2015 19:37

Možná to bude první machr, kterýho se zúčastním. Interpret už mám hotovej, ale tu první část radši dělat nebudu :-D

Editováno 18.10.2015 19:38
Nahoru Odpovědět
18.10.2015 19:37
Neaktivní uživatelský účet
Avatar
alfonz
Člen
Avatar
alfonz:18.10.2015 20:02

Ta první část je naprosto jednoduchá, prostě šifrování je součet K a Z a dešifrování jen rozdíl Z a K. :D

Nahoru Odpovědět
18.10.2015 20:02
lmao
Avatar
Odpovídá na rikenbekr
Zdeněk Pavlátka:18.10.2015 20:09

V C ano, zapomněl jsem ho napsat

Nahoru Odpovědět
18.10.2015 20:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na rikenbekr
Zdeněk Pavlátka:18.10.2015 20:09

ano, chápeš to správně

Nahoru Odpovědět
18.10.2015 20:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
alfonz
Člen
Avatar
alfonz:18.10.2015 20:14

kde k je znak klíče a z je odpovídající znak klíče

Nemělo by tam být:

kde k je znak klíče a z je odpovídající znak zprávy

Nahoru Odpovědět
18.10.2015 20:14
lmao
Avatar
Michal Žůrek - misaz:18.10.2015 20:19

no je ta formulace té věty nějaká divná.

 
Nahoru Odpovědět
18.10.2015 20:19
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
rikenbekr:18.10.2015 20:23

Těch 30 000 je požadavek na interpret, nebo s ním musí vystačit i programy?

Nahoru Odpovědět
18.10.2015 20:23
In world without fences and walls, who needs Gates and Windows?
Avatar
rikenbekr
Člen
Avatar
rikenbekr:18.10.2015 21:30

Má se nějak ošetřit i to že některé znaky prostě vypsat nejdou?

Nahoru Odpovědět
18.10.2015 21:30
In world without fences and walls, who needs Gates and Windows?
Avatar
Odpovídá na rikenbekr
Zdeněk Pavlátka:19.10.2015 12:05

to je pro oba, jak interpreter, tak program

Nahoru Odpovědět
19.10.2015 12:05
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na alfonz
Zdeněk Pavlátka:19.10.2015 12:07

Ano, asi jsem se při psaní zamyslel

Nahoru Odpovědět
19.10.2015 12:07
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na rikenbekr
Zdeněk Pavlátka:19.10.2015 12:23

Jak to myslíš?

Nahoru Odpovědět
19.10.2015 12:23
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
rikenbekr:19.10.2015 15:27

No když součet k a z bude mít hodnotu znaku který nelze vypsat např. EOF.
Nebo je posun pouze v rozsahu abecedy a po překročení hodnoty 'z' se jede znovu od a?

Nahoru Odpovědět
19.10.2015 15:27
In world without fences and walls, who needs Gates and Windows?
Avatar
Odpovídá na rikenbekr
Zdeněk Pavlátka:19.10.2015 19:22

vypiš znak, ať je jakýkoli, já ti jen zaručím, že eof nevyjde :)

Nahoru Odpovědět
19.10.2015 19:22
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
rikenbekr
Člen
Avatar
Nahoru Odpovědět
19.10.2015 19:57
In world without fences and walls, who needs Gates and Windows?
Avatar
D0ll0k
Člen
Avatar
D0ll0k:21.10.2015 21:39

Chci se jen zeptat. Ten program v Brainf*** má být odevzdaný jako .exe nebo napsaný v textovém souboru?

Nahoru Odpovědět
21.10.2015 21:39
Veni, vidi, programmato
Avatar
Odpovídá na D0ll0k
Michal Žůrek - misaz:21.10.2015 21:40

asi v textovém souboru, bude se hodnotit přehlednost zdrojového kódu :P

 
Nahoru Odpovědět
21.10.2015 21:40
Avatar
D0ll0k
Člen
Avatar
Nahoru Odpovědět
21.10.2015 21:45
Veni, vidi, programmato
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Michal Žůrek - misaz
rikenbekr:24.10.2015 17:28

Takže to má být komentované?

Nahoru Odpovědět
24.10.2015 17:28
In world without fences and walls, who needs Gates and Windows?
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na rikenbekr
tomisoka:24.10.2015 17:35

No v zadání je napsané jen:

kratší program = více bodů

IMHO: brainfuck ani nejde psát nějak přehledně (pokud to není něco naprosto triviálního) a pokud by se to mělo komentovat, tak komentář bude minimálně 3x větší než samotný kód.

 
Nahoru Odpovědět
24.10.2015 17:35
Avatar
rikenbekr
Člen
Avatar
Odpovídá na tomisoka
rikenbekr:24.10.2015 17:43

Alle co když za znaky které se počítají do délky jsou jen [],.<>+-?

Nahoru Odpovědět
24.10.2015 17:43
In world without fences and walls, who needs Gates and Windows?
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na rikenbekr
tomisoka:24.10.2015 17:54

Samozřejmě že se počítají jen funkční znaky, jen říkám, že nikde se o potřebě komentáře nepíše. Pokud tam chceš komentář klidně ho tam měj, ale řekl bych, že ani s komentářem by se ten kód nikomu luštit nechtělo...

 
Nahoru Odpovědět
24.10.2015 17:54
Avatar
Neaktivní uživatel:24.10.2015 19:07

Tak se bohužel nezúčastním, protože třída interpreteru sice funguje skvěle, ale jakmile se jí předá místo stringu zadanýho už v programu obsah souboru jako string, tak se z nějakýho důvodu dostane do nekonečné smyčky...

Nahoru Odpovědět
24.10.2015 19:07
Neaktivní uživatelský účet
Avatar
Nahoru Odpovědět
24.10.2015 19:10
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:24.10.2015 19:50

No to už jsem vyřešil, ale maže mě to vstupní soubor, takže na to stejně kašlu :-D

Nahoru Odpovědět
24.10.2015 19:50
Neaktivní uživatelský účet
Avatar
rikenbekr
Člen
Avatar
rikenbekr:28.10.2015 21:58

Už je to vyhodnocené?

Nahoru Odpovědět
28.10.2015 21:58
In world without fences and walls, who needs Gates and Windows?
Avatar
Zdeněk Pavlátka:29.10.2015 9:18

skoro, chybí mi zkontroloval jeden interpreter, akorát mi začal zlobit Avast - nahlašuje projekty z visual studia, tak se to teď snažím řešit

Nahoru Odpovědět
29.10.2015 9:18
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
rikenbekr
Člen
Avatar
Nahoru Odpovědět
29.10.2015 14:02
In world without fences and walls, who needs Gates and Windows?
Avatar
Zdeněk Pavlátka:1.11.2015 20:24

Díky všem za účast, zde jsou výsledky:

tomisoka - 20 bodů
tomisoka:
1. část - 7/7 -> 20 bodů -> V této části vítězíš

2. část -> 19 bodů
Krátké, jednoduché, dobře fungující. Jen ne úplně uživatelsky přívětivé (Bez pochopení kódu bych neměl tušení, jak se to používá).

Jan Lupčík - 0 bodů
Prázdné řešení...

Bratr - 17 bodů
2. část -> 17 bodů
Celkem se mi u tebe líbí výběr souboru, to je velmi dobrý nápad. Co se týče interpreteru, není špatný, ale zdá se mi zbytečně komplikovaný. V hlavním cyklu by asi byl přehlednější switch než ta řada ifů, ale to je jen můj názor.

rikenbekr - 7 bodů
1. část -> 7 bodů

  1. OK -> 2 body
  2. nefunguje
  3. funguje, ale zbytečně dlouhý kód, lze to napsat takto - .+[.+] -> 1 bod
  4. měl jsi vypisovat vstup + zbytečně dlouhý kód -> 1 bod
  5. OK -> 3 body
  6. a 7) chybí

Patrik Valkovič - 0 bodů
Prázdné řešení...

Matěj Kripner - 20 bodů
1. část -> 17

  1. a 2) nechápu význam těch mínusů, pokud bys chtěl pracovat jen se znaky abecedy, musel by výstup být také ve znacích abecedy, a to není. -> 1.5 bodu, 1.5 bodu
  2. OK -> 2 body
  3. funguje, ale zbytečně tvoří konec řádku znovu a znovu, používá zbytečně moc paměti (2 * délka vstupu) - lze to napsat s použitím 2 polí v paměti -> 1 bod
  4. OK -> 3 body
  5. OK -> 4 body
  6. OK -> 4 body

2. část -> 20 bodů -> V této části vítězíš
Pěkně napsáno. To navyšování paměti je dobrý nápad, i když osobně bych neskákal ze 100 rovnou na 30000, ale navyšoval bych postupně (např po 1000).

Placku tedy získává tomisoka, Matěj Kripner. Gratuluji :)

Editováno 1.11.2015 20:25
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
1.11.2015 20:24
Kolik jazyků umíš, tolikrát jsi programátor.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 36 zpráv z 36.