Dada una lista de enteros positivos, se interpreta cada elemento el máximo número de pasos que se puede avanzar desde dicho elemento. Por ejemplo, para la lista [1,3,5,8,9,2,6,7,6,8,9], desde sólo se puede avanzar un paso (hasta el 3), desde el 3 se puede avanzar 3 pasos (hasta el 5, 8 ó 9), y así sucesivamente. En dicha lista, el mínimo número de saltos que hay que dar para alcanzar el final es 3 (el recorrido es 1, 3, 8, 9).
Definir la función
minimoSaltos :: [Int] -> Int |
tal que (minimoSaltosxs) es el mínimo número de saltos que hay que dar en la lista xs para alcanzar el final. Por ejemplo,
minimoSaltos [1,3,5,8,9,2,6,7,6,8,9] == 3 minimoSaltos (replicate 10 1) == 9 minimoSaltos [1..25] == 5 |
Soluciones
import Data.List (tails) minimoSaltos :: [Int] -> Int minimoSaltos (x:y:xs) = 1 + minimum [minimoSaltos ys | ys <- take x (tails (y:xs))] minimoSaltos _ = 0 |
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>