Mínima suma borrando todas las ocurrencias de un dígito
Para la lista [23,12,77,82], las sumas obtenidas eliminando todas las ocurrencias de uno de sus dígitos son
1 2 3 4 5 |
+ Eliminando el 1: 23 + 2 + 77 + 82 = 184 + Eliminando el 2: 3 + 1 + 77 + 8 = 89 + Eliminando el 3: 2 + 12 + 77 + 82 = 173 + Eliminando el 7: 23 + 12 + 82 = 117 + Eliminando el 8: 23 + 12 + 77 + 2 = 114 |
El mínimo de las sumas es 89 (que se obtiene eliminando todas las ocurrencias del dígito 2).
Definir la función
1 |
minimaSumaEliminandoDigito :: [Integer] -> Integer |
tal que (minimaSumaEliminandoDigito xs) es el mínimo de las sumas obtenidas eliminando todas las ocurrencias de uno de los dígitos de xs. Por ejemplo,
1 2 |
minimaSumaEliminandoDigito [23,12,77,82] == 89 minimaSumaEliminandoDigito [2312,7,4,82] == 50 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import Data.List ((\\), nub) minimaSumaEliminandoDigito :: [Int] -> Int minimaSumaEliminandoDigito xs = minimum [sumaSinDigito k xs | k <- digitosLista xs] -- (digitosLista xs) es una lista, sin repeticiones, de los dígitos de -- xs. Por ejemplo, -- digitosLista [23,12,74,82] == [2,3,1,7,4,8] digitosLista :: [Int] -> [Int] digitosLista = nub . concatMap digitos -- (digitos x) es la lista de los dígitos de x. Por ejemplo, -- digitos 3252 == [3,2,5,2] digitos :: Int -> [Int] digitos x = [read [c] | c <- show x] -- (sumaSinDigito k xs) es la suma de los números de xs en los que se han -- borrado todas las ocurrencias del dígito k. Por ejemplo, -- sumaSinDigito 2 [23,12,22,82] == 12 sumaSinDigito :: Int -> [Int] -> Int sumaSinDigito k xs = sum (listaSinDigito k xs) -- (listaSinDigito k xs) es la lista de los números de xs en los que se han -- borrado todas las ocurrencias del dígito k. Por ejemplo, -- listaSinDigito 2 [23,12,22,82] == [3,1,8] listaSinDigito :: Int -> [Int] -> [Int] listaSinDigito k xs = [read cs | x <- xs , let cs = filter (/=c) (show x) , not (null cs)] where [c] = show k |
Nuevas soluciones
- En los comentarios se pueden escribir nuevas soluciones.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>