Haskell - Permutacions P25271


Statement
 

pdf   zip

html

Aquest exercici explora la generació exhaustiva de permutacions.

  1. Feu una funció permutations1 :: [a] -> [[a]] que, donada una llista, retorni la llista de totes les permutacions que es poden formar amb els seus elements.
  2. Feu una funció permutations2 :: Int -> [[Int]] que, donat un natural n, retorni la llista de totes les permutacions de [1..n].
  3. Feu una funció permutations3 :: [a] -> [[a]] que, donada una llista, retorni les permutacions amb repetició que es poden formar amb els seus elements.
  4. Feu una funció permutations4 :: Int -> [[Int]] que, donat un natural n, retorni la llista de totes les permutacions amb repetició de [1..n].
  5. Feu una funció permutations5 :: [Char] -> [Char] -> [[Char]] que, donades n consonants i n vocals, retorni totes les paraules que es poden formar usant exactament una vegada cada lletra. Les paraules han de començar en consonant, i han d’alternar consonants i vocals.

Observació

Per tal que no importi l’ordre en que genereu la solució, els jocs de proves ordenen el resultat. Per a això, importeu la funció sort del mòdul Data.List encara que no la feu servir.

Puntuació

Cada funció puntua 20 punts.

Public test cases
  • Input

    sort $ permutations1 ["pa", "amb", "oli"]
    sort $ permutations2 3
    sort $ permutations3 ["pa", "amb", "oli"]
    sort $ permutations4 3
    sort $ permutations5 "mpt" "aeo"
    

    Output

    [["amb","oli","pa"],["amb","pa","oli"],["oli","amb","pa"],["oli","pa","amb"],["pa","amb","oli"],["pa","oli","amb"]]
    [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
    [["amb","amb","amb"],["amb","amb","oli"],["amb","amb","pa"],["amb","oli","amb"],["amb","oli","oli"],["amb","oli","pa"],["amb","pa","amb"],["amb","pa","oli"],["amb","pa","pa"],["oli","amb","amb"],["oli","amb","oli"],["oli","amb","pa"],["oli","oli","amb"],["oli","oli","oli"],["oli","oli","pa"],["oli","pa","amb"],["oli","pa","oli"],["oli","pa","pa"],["pa","amb","amb"],["pa","amb","oli"],["pa","amb","pa"],["pa","oli","amb"],["pa","oli","oli"],["pa","oli","pa"],["pa","pa","amb"],["pa","pa","oli"],["pa","pa","pa"]]
    [[1,1,1],[1,1,2],[1,1,3],[1,2,1],[1,2,2],[1,2,3],[1,3,1],[1,3,2],[1,3,3],[2,1,1],[2,1,2],[2,1,3],[2,2,1],[2,2,2],[2,2,3],[2,3,1],[2,3,2],[2,3,3],[3,1,1],[3,1,2],[3,1,3],[3,2,1],[3,2,2],[3,2,3],[3,3,1],[3,3,2],[3,3,3]]
    ["mapeto","mapote","matepo","matope","mepato","mepota","metapo","metopa","mopate","mopeta","motape","motepa","pameto","pamote","patemo","patome","pemato","pemota","petamo","petoma","pomate","pometa","potame","potema","tamepo","tamope","tapemo","tapome","temapo","temopa","tepamo","tepoma","tomape","tomepa","topame","topema"]
    
  • Information
    Author
    Jordi Petit
    Language
    Catalan
    Official solutions
    Haskell
    User solutions
    Haskell