Nápady na zápočtové programy z Neprocedurálního programování
Byl bych rád, kdybyste si vymysleli vlastní, smysluplný, netriviální projekt. Pokud ale potřebujete inspiraci, tak se můžete podívat do následujícího seznamu. Témata rozhodně nejsou ekvivalentní/přiměřená obtížností – určitě je potřeba se mnou konzultovat jejich obtížnost!
Programovací jazyky (Haskell)
Napište parser a interpreter pro:
- nějaký jednoduchý procedurální jazyk
- Pascal se celkem jednoduše parsuje
- můžete si ale vzít nějaké
C--
- klidně může být ezoteričtější – třeba s podporou českého jazyka jako
definuj x; přiřaď x 20;
atd.
- Scheme, popřípadě nějaký Lisp
- konkatenativní jazyk jako Forth
- funkcionální jazyk (nějaký mini-Haskell)
Ke všemu výše uvedenému jdou dělat i věci jako:
- pretty printer
- zkombinováním parseru a pretty printeru dostanete zdarma formátovátko
- typová analýza
- statická analýza jako analýza mrtvého kódu, nebo CSE
- optimalizátor kódu
- makro expander – je libo generika v Go 1?
- refaktorovací asistent, kterému dáte kus kódu a řeknete “argument 2 ve funkci
foo
přejmenuj nay
” nebo “funkcibar
všude inlinuj” - debugger
- kompilátor/transpiler do RAMu/assembleru/LLVM/JavaScriptu/Céčka/něčeho jiného
- virtuální stroj
- language server protokol (pro napojení na Vim/VSCode)
K výše uvedeným nápadům mám hodně zdrojů, v případě zájmu určitě napište! :)
Programovací jazyky v přestrojení (spíše Haskell)
- Vyrobte program, který bude provádět SQLovité dotazy nad databází v CSV/YAML/JSON souborech
- Překladač z nějakého low-level jazyka na Turingův stroj + simulátor Turingova stroje
- Vyhodnocovač lambda-kalkulového výrazu po krocích s volbou vyhodnocení uvnitř/zvenku, ideálně s barvičkami
- Maličkatý SAT solver, třeba pomocí DPLL algoritmu
- Malinkatý důkazový asistent, který umí i základy predikátové logiky – nabídne pár rozumných kroků kudy dál a nechá uživatele si vybrat
- Tady se nabízí hezké vypisování ve stylu přirozené dedukce
- Nástroj, který dostane co chcete regexem namatchovat a on vám vyrobí nějaký malý deterministický konečný automat (ideálně vyrobí rovnou regex pomocí Brzozwského metody)
- Bonus: nástroj pochopí i negativní matche, tedy na příkladný vstup “mám rád pizzu”, “nemám rád pizzu” a “!mám rád koprovku” vrátí třeba
^^(?:ne)?mám rád pizzu$
- Bonus: nástroj pochopí i negativní matche, tedy na příkladný vstup “mám rád pizzu”, “nemám rád pizzu” a “!mám rád koprovku” vrátí třeba
Složitější algoritmy a datové struktury (jak Prolog, tak Haskell)
Vezměte nějaký netriviální algoritmus / netriviální datovou strukturu a naprogramujte jej / ji. Nezapomeňte si rozmyslet, jestli vybraný algoritmus vlastně jde naprogramovat v daném jazyce rozumně/efektivně!
Hádanky a puzzles (spíše Prolog)
- Vyrobte AI pro nějakou jednoduchou deskovku – šachy, dáma, backgammon, reversi, lodě
- Vyrobte efektivní řešítko pro nějaký puzzle – sudoku, nonogram, Lloydova patnáctka
Zpracování přirozeného jazyka (Prolog)
- Naparsujte rovnici z textového popisu, např. “sedm plus závorka dva krát tři konec závorky” ->
7 + (2 * 3)
a vyhodnoťte ji (a možná zapište výsledek zase slovy) - Vyrobte AI pro nějakou úzkou doménu, třeba pro souborový systém s dotazy “který soubor ve složce home je největší?”
- Vyrobte jednoduchý překladač z lidského jazyka A do lidského jazyka B.
- Vyrobte nějakého základního chatbota!
- Vezměte jednoduchý jazyk jako Esperanto a vyrobte:
- Překladač z daného jazyka do češtiny (či naopak)
- Sémantický slovníček, kterému dáte za úkol najít slovo pro “vtipný člověk”, který pomocí spojování slov vyhodí
amaz-ul-o
, tedy “klaun”. - Syntaktický analyzátor – z věty vyrobí strom syntaxe
- Sémantický analyzátor – u vět typu “Ferda je můj kamarád. On jezdí na koni.” bude schopen zjistit, že “On” v druhé větě je “Ferda”. Alternativně umí odpovědět na dotaz stylu “Co všechno víš o Ferdovi?”
Alternativní užitečnosti
Tato kategorie je velmi obecná – pokud si ji budete chtít vybrat, tak se určitě musíme domluvit na konkrétní podobě!
- Prográmek, který vám ulehčí práci na bakalářce nebo souvisí s ročníkovým projektem
- Chatbot / Permissions bot / jiný bot na IRC / Discord / Slack
- Něco, co rozumně využije Haskell, tedy něco, co v tomto seznamu je označeno jako “Mature” nebo jako “Best in class”
- Rozumné, netriviální vylepšení stávajícího projektu psaného v Haskellu/Prologu
- Například můžete vylepšit editor, ve kterém běžně probíhají naše cvičení!
- Dává také smysl vylepšovat tooling – ať už pro Haskellový LSP plugin nebo pro Prologový VSCode plugin, kde druhý zmíněný potřebuje forknout a zásadně updatovat