Zkouška 6. 6. 2019

Přednáška je věnována neprocedurálnímu programování. Většina semestru je věnována programování v jazyku Prolog, ve kterém studenti i ladí zápočtové programy. Informativně se studenti seznámí i s jazykem LISP a neprocedurálními částmi programovacích systémů.
domestomas
Matfyz(ák|ačka) level I
Příspěvky: 7
Registrován: 28. 5. 2018 19:16
Typ studia: Informatika Bc.

Zkouška 6. 6. 2019

Příspěvek od domestomas »

Na první část 90 minut, zadání 4 úloh - 2 na prolog a 2 na Haskel. Měli jsme si vybrat pouze 3 z těch úloh a nakódit je. Za každou úlohu bylo 5 bodů a bylo potřeba získat alespoň 4 body z každého jazyka. Říkali, že programy nemusejí seběhnout a i tak za ně může být plný počet, když budou sémanticky správně. Pro obě části jsme mohli používat dodanou offline dokumentaci v pdf. Pro první část jsme měli seznam predikátů a funkci prologu a Haskelu, jiné než vyjmenované jsme nesměli používat. Pro druhou část už jsem mohli používat všechny kromě assert a retract. Byly k dispozici pouze počítače s Windows a protože to některým vadilo, mohli jsme na druhou část i do unixové laboratoře. Příště prý už budeme od začátku tam (je tam dual boot, takže si člověk může vybrat systém). Nesměli jsme programovat na vlastních noteboocích.

Část 1 (90 min):
Prolog:
1) Máte zadán neorientovaný ohodnocený graf a číslo K. Rozdělte ho na komponenty spojené hranami váhy menší než K. Reprezentaci grafu jsme si měli zvolit sami.
2) Máte danou množinu - vypište všechny její rozklady

Haskel:
3) Máte potenciálně nekonečný seznam reálných čísel a konstantu K. Vraťte seznam aritmetických průměrů všech po sobě jdoucích K-tic (okénkové průměry).
4) Na vstupu je inorder výpis stromu (nevím, jaký byl formát), vymyslete si datovou strukturu na strom a zrekonstruujte ho podle výpisu.

Část 2 (85 minut):
Překladový slovník

Jsou zadány dva texty ve dvou jazycích, přičemž druhý text je překladem toho prvního. Můžete předpokládat, že oba texty mají stejný počet vět, přičemž i-tá věta druhého je překladem i-té věty prvního textu.

Problém: Navrhněte (netriviální) heuristiku pro nalezení co nejlepšího přiřazení mezi jednotlivými slovy obou jazyků, které by souhlasilo se zadanými překlady vět.

Uvědomte si, že

věta a její překlad mohou být obecně různě dlouhé
jedno slovo může být přeloženo více způsoby, a naopak různá slova mohou být přeložena stejně
Ve vašem řešení nezapomeňte popsat reprezentaci vstupu a výstupu, s níž budete pracovat.
Vilda
Matfyz(ák|ačka) level I
Příspěvky: 12
Registrován: 15. 1. 2018 15:02
Typ studia: Informatika Bc.

Re: Zkouška 6. 6. 2019

Příspěvek od Vilda »

Pár komentářů:
Měli jsme si vybrat pouze 3 z těch úloh a nakódit je.
Opravdu změnili systém. Nakódit všechny čtyři je k ničemu. Hodnotí pouze tři.
Říkali, že programy nemusejí seběhnout
Vypadá to, že je ani nepouštějí. Na druhou stranu je na ústní dost podrobně čtou a kritizují.
Překladový slovník
Já to interpretoval jako že máme vytvořit optimální alignment mezi větami. Na ústní u Hrice zapůsobilo, že jsem o tom dost žvatlal. Celkově mám dojem, že bylo nejlepší prostě toho nacvakat co nejvíce a dal mi lepší známku i přesto, že v první části jsem neudělal skoro nic.

Mé ukecané řešení k druhé části: https://github.com/zouharvi/mff-things/ ... exam_p2.hs.
xcvb
Matfyz(ák|ačka) level I
Příspěvky: 5
Registrován: 26. 1. 2019 00:46
Typ studia: Informatika Bc.

Re: Zkouška 6. 6. 2019

Příspěvek od xcvb »

Nazdar, víte někdo, jestli se v Haskellu může používat list comprehension? V těch instrukcích k testu v moodlu o tom není zmínka. Je to dost mocná věc, tak by mě zajímalo, jestli s tím můžu počítat, nebo ne...
Thrayld
Matfyz(ák|ačka) level I
Příspěvky: 10
Registrován: 25. 1. 2018 22:01
Typ studia: Informatika Bc.

Re: Zkouška 6. 6. 2019

Příspěvek od Thrayld »

http://learnyouahaskell.com/starting-ou ... prehension

Ještě bych doplnil, že ve čtyřce byly vrcholy vypsané v infixu a to jako dvojice (hodnota, velikost podstromu). Velikost podstromu je počet prvků a to včetně kořene.

Co se týče velké úlohy, tak pokud to bude fakt nějaký humus (jako si myslím, že to naše bylo), tak se to ani nemusí blížit stavu ke spuštění. Stačí zachytit hlavní rysy algoritmu a sem tam nějaké "magické" predikáty / funkce zase tolik nevadí.

A nakonec taková pragmatická rada - neztrácejte naději :D
I když to vypadá, že z malých příkladů můžete jít rovnou domů, tak doporučuji zůstat a pak jít i na ústní. Před ústní se podívat na ty příklady, které jste řešili, ale nedořešili. Na ústní si k tomu můžete něco říct a případně dostanete i něco opravit. Pokud to tedy opravdu není tak, že odevzdáte tři prázdné soubory, tak je dobré to zkusit. Speciálně tedy Dvořák je opravdu hodný a myslím, že jen tak někoho vyletět nenechá, respektive dá vám hodně příležitostí to někde napravit.
xcvb
Matfyz(ák|ačka) level I
Příspěvky: 5
Registrován: 26. 1. 2019 00:46
Typ studia: Informatika Bc.

Re: Zkouška 6. 6. 2019

Příspěvek od xcvb »

Já vím, jak se to používá, já se ptal, jestli to zkoušející povolují používat ;-)
Protože to někdy ten typ úloh, co v testech historicky byl, hodně zjednodušuje...
Thrayld
Matfyz(ák|ačka) level I
Příspěvky: 10
Registrován: 25. 1. 2018 22:01
Typ studia: Informatika Bc.

Re: Zkouška 6. 6. 2019

Příspěvek od Thrayld »

V Haskellu nic zakázaného. Btw stejná věc se dá udělt kombinací filter + map.
xcvb
Matfyz(ák|ačka) level I
Příspěvky: 5
Registrován: 26. 1. 2019 00:46
Typ studia: Informatika Bc.

Re: Zkouška 6. 6. 2019

Příspěvek od xcvb »

Tak určitě, ale to samé jde říct o většině funkcionality (a rozdíl může být jeden fool-proof řádek vs několikařádková změť lambda funkcí). Každopádně díky za odpověď i předchozí komenty!
domestomas
Matfyz(ák|ačka) level I
Příspěvky: 7
Registrován: 28. 5. 2018 19:16
Typ studia: Informatika Bc.

Re: Zkouška 6. 6. 2019

Příspěvek od domestomas »

Thrayld píše:V Haskellu nic zakázaného (...)
Podle mě jsme v Prologu i Haskelu směli používat jen věci z toho seznamu (viz příloha). Konkrétně psali:

Seznam standardních predikátů jazyka Prolog a funkcí jazyka Haskell z přednášky, které můžete používat, aniž byste je explicitně definovali. (odkaz na pdfko)

Ze zadaných čyř úloh si vyberte a vyřešte POUZE TŘI.
Čas: 1h 30 min
Hodnocení: Každá úloha je hodnocena 5 body.
Minimální požadavky: Aspoň 4 body z úloh 1-2 (Prolog), aspoň 4 body z úloh 3-4 (Haskell) a aspoň 9 bodů celkem.
Plné bodové ohodnocení se poskytuje za stručné, elegantní a korektní řešení.

Body se odečítají za řešení zbytečné komplikované či nestrukturované.

U všech úloh můžete předpokládat, že vstup je zadán korektně.

Můžete používat standardní predikáty jazyka Prolog či standardní funkce jazyka Haskell (viz níže). V Prologu prosím nepoužívejte predikáty typu

bagof, setof, findall či assert a retract.

K dispozici máte překladače obou jazyků (SWI Prolog + GHCi) + libovolné textové editory. Prosím nepoužívejte žádné online zdroje.
Přílohy
PredikatyaFunkce.pdf
(73.74 KiB) Staženo 219 x
Thrayld
Matfyz(ák|ačka) level I
Příspěvky: 10
Registrován: 25. 1. 2018 22:01
Typ studia: Informatika Bc.

Re: Zkouška 6. 6. 2019

Příspěvek od Thrayld »

Ok, to je také pravda.
Já jsem to spíš myslel tak, že zatímco v Prologu jsou zrovna ty velmi užitečné predikáty na shromáždění výsledků explicitně zakázány (podle Dvořáka jsou prý pomalé a s trochou práce je jde zpravidla obejít), tak v Haskellu nic takového není. Pokud vím, tak říkali, že můžeme používat co chceme. Pokud ovšem něco nenáleží do seznamu, tak bychom to měli na požádání umět definovat (mě se třeba ptal i na definici foldl) pomocí těch "povolených" funkcí.
Odpovědět

Zpět na „PRG005 Neprocedurální programování“