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

Ostatní jazyky Ostatní programovací jazyky 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í
IT Man 0 Stáhnout řešení
patrik.valkovic 0 Stáhnout řešení
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

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
Redaktor
Avatar
Nahoru Odpovědět  +3 18.10.2015 17:37
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Peckááá :D

Nahoru Odpovědět  +1 18.10.2015 17:39
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Denis Homolík (Alfonz):

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
Vše je možné, dokud si to myslíte!
Avatar
tomisoka
Redaktor
Avatar
tomisoka:

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  +1 18.10.2015 18:24
Avatar
rikenbekr
Člen
Avatar
rikenbekr:

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 (czubehead):

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

Nahoru Odpovědět  +3 18.10.2015 19:33
Why so serious? -Joker
Avatar
rikenbekr
Člen
Avatar
rikenbekr:

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

Nahoru Odpovědět  -1 18.10.2015 19:36
In world without fences and walls, who needs Gates and Windows?
Avatar
Jakub Šárník:

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  +1 18.10.2015 19:37
Avatar
Denis Homolík (Alfonz):

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
Vše je možné, dokud si to myslíte!
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na rikenbekr
Zdeněk Pavlátka:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Nahoru Odpovědět 18.10.2015 20:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Denis Homolík (Alfonz):

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  +3 18.10.2015 20:14
Vše je možné, dokud si to myslíte!
Avatar
Michal Žůrek (misaz):

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

Nahoru Odpovědět 18.10.2015 20:19
Nesnáším {}, proto se jim vyhýbám.
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
rikenbekr:

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:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na rikenbekr
Zdeněk Pavlátka:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Denis Homolík (Alfonz)
Zdeněk Pavlátka:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
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:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na rikenbekr
Zdeněk Pavlátka:

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:

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
Ten, co se snaží "programovat"
Avatar
Odpovídá na D0ll0k
Michal Žůrek (misaz):

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

Nahoru Odpovědět  +1 21.10.2015 21:40
Nesnáším {}, proto se jim vyhýbám.
Avatar
D0ll0k
Člen
Avatar
Nahoru Odpovědět 21.10.2015 21:45
Ten, co se snaží "programovat"
Avatar
rikenbekr
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
rikenbekr:

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

Nahoru Odpovědět  -1 24.10.2015 17:28
In world without fences and walls, who needs Gates and Windows?
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na rikenbekr
tomisoka:

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:

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
Redaktor
Avatar
Odpovídá na rikenbekr
tomisoka:

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
Jakub Šárník:

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
Avatar
Odpovídá na Filip Šohajek
Jakub Šárník:

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
Avatar
rikenbekr
Člen
Avatar
rikenbekr:

Už je to vyhodnocené?

Nahoru Odpovědět  +1 28.10.2015 21:58
In world without fences and walls, who needs Gates and Windows?
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

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
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

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á).

IT Man - 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.valkovic - 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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 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.