169 похожих чатов

Добрый день. Я новичёк в хаскелле, буду благодарен если кто-то

поможет.

Задача - найти самую длинную непрерывную цепочку отрицательных чётных чисел. чисел до 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

2 ответов

14 просмотров

Компиляция с -О3?

они поди компилируют без O2, анализатор строгости не отстреливает и в mx и cur образуются thunk'и. Попробуйте заменить первую строку определения count на count !mx !cur [] = max cur mx и добавить {-# LANGUAGE BangPatterns #-} в шапку файла

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта