Repeticiones según la posición
Definir la función
1 |
transformada :: [a] -> [a] |
tal que (transformada xs) es la lista obtenida repitiendo cada elemento tantas veces como indica su posición en la lista. Por ejemplo,
1 2 |
transformada [7,2,5] == [7,2,2,5,5,5] transformada "eco" == "eccooo" |
Comprobar con QuickCheck si la transformada de una lista de n números enteros, con n ≥ 2, tiene menos de n³ elementos.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import Test.QuickCheck transformada :: [a] -> [a] transformada xs = concat [replicate n x | (n,x) <- zip [1..] xs] -- La propiedad es prop_transformada :: [Int] -> Property prop_transformada xs = n >= 2 ==> length (transformada xs) < n^3 where n = length xs -- La comprobación es -- ghci> quickCheck prop_transformada -- +++ OK, passed 100 tests. |
7 Comentarios