Exercitium1-0.1.0.0: Problemas de Exercitium (Volumen 1)

CopyrightExercitium (17-05-14)
LicenseGPL-3
MaintainerJoseA.Alonso@gmail.com
Safe HaskellSafe
LanguageHaskell2010

Descomposiciones_con_n_sumandos

Description

Descomposiciones de x como sumas de n sumandos de la lista ns

Definir la función

sumas :: (Num a, Ord a) => Int -> [a] -> a -> [[a]]

tal que (sumas n ns x) es la lista de las descomposiciones de x como sumas de n sumandos en la lista ns. Por ejemplo,

>>> sumas 2 [1,2] 3
[[1,2]]
>>> sumas 2 [-1] (-2)
[[-1,-1]]
>>> sumas 2 [-1,3,-1] 2
[[-1,3]]
>>> sumas 2 [1,2] 4
[[2,2]]
>>> sumas 2 [1,2] 5
[]
>>> sumas 3 [1,2] 5
[[1,2,2]]
>>> sumas 3 [1,2] 6
[[2,2,2]]
>>> sumas 2 [1,2,5] 6
[[1,5]]
>>> sumas 2 [1,2,3,5] 4
[[1,3],[2,2]]
>>> sumas 2 [1..5] 6
[[1,5],[2,4],[3,3]]
>>> sumas 3 [1..5] 7
[[1,1,5],[1,2,4],[1,3,3],[2,2,3]]
>>> sumas 3 [1..200] 4
[[1,1,2]]

Synopsis

Documentation

sumas1 :: (Num a, Ord a) => Int -> [a] -> a -> [[a]] Source #

1ª definición (fuerza bruta)

combinacionesR :: Int -> [a] -> [[a]] Source #

(combinacionesR k xs) es la lista de las combinaciones orden k de los elementos de xs con repeticiones. Por ejemplo,

>>> combinacionesR 2 "abc"
["aa","ab","ac","bb","bc","cc"]
>>> combinacionesR 3 "bc"
["bbb","bbc","bcc","ccc"]
>>> combinacionesR 3 "abc"
["aaa","aab","aac","abb","abc","acc","bbb","bbc","bcc","ccc"]

sumas :: (Num a, Ord a) => Int -> [a] -> a -> [[a]] Source #

2ª definición (divide y vencerás).

prop_equiv_sumas :: Positive Int -> [Int] -> Int -> Bool Source #

(prop_equiv_sumas n ns x) se verifica si las definiciones de sumas son equivalentes para n, ns y x. Por ejemplo,

>>> quickCheckWith (stdArgs {maxSize=7}) prop_equiv_sumas
+++ OK, passed 100 tests.

Comparación de eficiencia

> sumas1 3 [1..200] 4
[[1,1,2]]
(2.52 secs, 1,914,773,472 bytes)
> sumas 3 [1..200] 4
[[1,1,2]]
(0.17 secs, 25,189,688 bytes)