Mínimo número de saltos para alcanzar el final
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