Sumable sin vecinos
En la lista [3,2,5,7,4] el número 12 se puede escribir como una suma de elementos de la lista sin incluir sus vecinos (ya que es la suma de 3, 5 y 4); en cambio, 14 no lo es (porque es la suma de 3, 7 y 4, pero 7 y 4 son vecinos).
Definir la función
1 |
esSumableSinVecinos :: [Int] -> Int -> Bool |
tal que (esSumableSinVecinos xs n) se verifica si n se puede escribir como una suma de elementos de xs que no incluye a ninguno de sus vecinos. Por ejemplo,
1 2 3 4 5 |
esSumableSinVecinos [3,2,5,7,4] 12 == True esSumableSinVecinos [3,2,5,7,4] 9 == True esSumableSinVecinos [3,2,5,7,4] 6 == True esSumableSinVecinos [3,2,5,7,4] 14 == False esSumableSinVecinos [3,2,5,7,4] 1 == False |
Soluciones
1 2 3 4 5 6 |
esSumableSinVecinos :: [Int] -> Int -> Bool esSumableSinVecinos _ 0 = True esSumableSinVecinos [] _ = False esSumableSinVecinos [x] n = x == n esSumableSinVecinos (x:y:zs) n = esSumableSinVecinos zs (n - x) || esSumableSinVecinos (y:zs) n |