Prolog:
1) Na vstupu dostanete 2 seznamy, každý obsahuje nejvýše 1 hvězdičku, kterou lze nahradit libovolným počtem libovolných prvků (mohli jsme si vybrat, jestli povolíme i nahrazení ničím). Výstupem měla být odpověď, jestli je možné oba seznamy doplnit tak, aby se shodovaly. Např.
[*,5,7,7] a [1,2,*,7] vrátí true
[3,*,5,7,7] a [1,2,*,7] vrátí false
2) Dostaneme graf reprezentovaný seznamy sousedů a množinu M. Máme zjistit, jestli je graf bipartitní s jednou partitou M. Pokud ano, vrátit i druhou partitu.
Haskell:
1) Definujte funkci,
Kód: Vybrat vše
rozdel :: (a->Bool) -> [a] -> [[a]]
rozdel odd [1,3,5,2,4,6,7,9] vrátí [[1,3,5],[2,4,6],[7,9]]
2] Multimnožina (prvky se mohou opakovat) je definována
Kód: Vybrat vše
type Multim = [(Int,a)]
Řekneme, že M1<M2, pokud v M2 existuje prvek, který není v M1 a je větší než všechny prvky v M1, které nejsou v M2. Naším úkolem bylo definovat funkci (<).
Velký příklad
Každé zařízení je identifikováno n-bitovým číslem, celkem máme 2n zařízení. 2 zařízení jsou v přímém spojení, pokud se liší právě v jednom bitu. Dostaneme monžinu O a A, |O| = |A| což představuje odesilatele a adresáty. Odesilatelé posílají zpravů adresátům. Jedno zařízení může zprávu poslat pouze těm zařízením, se kterými má příme spojení. Jakmile zpráva doputuje k nějakému adresátovi, již se dál neposílá. Naším úkolem je heuristicky najít takovou disjunktní množinu cest, že přes každé zařízení projde zpráva právě jednou.