Búsqueda en los dígitos de pi
El fichero Digitos_de_pi.txt contiene el número pi con un millón de decimales; es decir,
1 |
3.1415926535897932384626433832 ... 83996346460422090106105779458151 |
Definir la función
1 |
posicion :: String -> IO (Maybe Int) |
tal que (posicion n) es (Just k) si k es la posición de n en la sucesión formada por un millón dígitos decimales del número pi y Nothing si n no ocurre en dicha sucesión. Por ejemplo,
1 2 3 4 5 6 7 8 9 10 11 12 |
λ> posicion "15" Just 3 λ> posicion "2017" Just 8897 λ> posicion "022017" Just 382052 λ> posicion "14022017" Nothing λ> posicion "999999" Just 762 λ> posicion "458151" Just 999995 |
Nota. Se puede comprobar la función mediante The pi-search page o Pi search engine.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 |
import Data.List (isPrefixOf) posicion :: String -> IO (Maybe Int) posicion ns = do ds <- readFile "Digitos_de_pi.txt" return (posicionEnLista (drop 2 ds) ns) posicionEnLista :: Eq a => [a] -> [a] -> Maybe Int posicionEnLista xs ys = aux xs 1 where aux [] _ = Nothing aux (x:xs) n | ys `isPrefixOf` (x:xs) = Just n | otherwise = aux xs (n+1) |
6 Comentarios