кто-то знает - Haskell
Задача - найти самую длинную непрерывную цепочку отрицательных чётных чисел. чисел до 10^6, каждое число по модулю до 10^9.
моё решение (не самое идеальное) ниже. Вопрос в том, что почему-то вылетает по памяти. Может ли кто-нибудь посоветовать литературу об аллокации памяти в хаскеле? сам код:
int :: Char -> Int
int x = (read [x]) :: Int
isLastEven :: [Char] -> (Bool, [Char])
isLastEven [] = (False,[])
isLastEven (x:[]) = (even $ int x,[])
isLastEven (x:' ':xs) = (even $ int x, xs)
isLastEven (x:xs) = isLastEven xs
skip :: [Char] -> [Char]
skip [] = []
skip (' ':xs) = xs
skip (_:xs) = xs
count :: Integer -> Integer -> [Char] -> Integer
count mx cur [] = max cur mx
count mx cur ('-':xs) =
let (isEven, tail) = isLastEven xs
in if isEven then count mx (cur + 1) tail else count (max mx cur) 0 tail
count mx cur (_:xs) = count (max cur mx) 0 $ skip xs
main :: IO ()
main = do
-- x <- getLine
-- ln <- getLine
let ln = tail $ concat [" -999999998" | i <- [1..1000000]]
putStrLn $ show $ count 0 0 ln
для кода на хаскеле есть чат хаскеля - haskellru
Обсуждают сегодня