LINUX.ORG.RU

[haskell] [projecteuler] мемоизация

 


0

1

Есть задача с PE

Написал решение в лоб, для 1000 работающее, для 10^7 - нет.

main :: IO( )
main = print $ problem_92 1000

problem_92 :: Int -> Int
problem_92 n = n - (length $ filter ( ==1) $ map last_ [1..n])

next_ :: Int -> Int
next_ n | (n >= 10) = (next_ ( n `div` 10 )) + (n `mod` 10)^2
        | otherwise = n^2

last_ :: Int -> Int
last_ n  = until (\x -> x == 89 || x == 1) next_ n

Нагуглил своего рода оптимизацию http://blog.dreamshire.com/2011/07/19/project-euler-problem-92-solution/, суть которой сводится к вычислению определённого количества значений функции и последующему использованию этих величин.

Вопрос. Как мемоизировать первые 567 значений функции last?

Ответ на: комментарий от anonymous

Да, хорошая ссылка. А как применяется это на данном примере?

garmonbozia
() автор топика
Ответ на: комментарий от anonymous

Все ок. Скобочки не распарсил. Прошу прощения

anonymous
()
Ответ на: комментарий от anonymous

Ответил вопросом на вопрос = слил

anonymous
()
1 ноября 2011 г.

last__ = map last_ [1..]

И take n last__ вместо map last_ [1..n]

anonymous
()

выброси хачкель, это бесполезное говно для задротов

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.