ProjectEuler

Oct 12, 2011 18:35

Последние пару недель игрался на Скале с задачами с http://projecteuler.net/, и заодно подсадил на это дело жену. Мне программы писать неинтересно, интересно сделать в пару функциональных строчек в интерпретаторе, благо у Скалы есть консоль, и она хорошо оптимизирует tail-рекурсию. Когда одна ( Read more... )

j, программирование

Leave a comment

Comments 4

ex_juan_gan October 12 2011, 16:22:13 UTC
А если закешировать простые до 1500, то ещё быстрее будет.

Reply

ushastyi October 12 2011, 19:23:41 UTC
Чтобы на делители проверять быстрее? Да, хорошая мысль. Я почти так и делал, только список найденных чисел строился динамически и таскался через рекурсию не самым оптимальным образом, параллельно суммируясь. Было длинно и медленно, вот со злости и сделал через J-brute-force :)

Сейчас попробовал, работает примерно со скоростью J.

scala> val ps = primeStream(2, Nil).take(1500).toList

scala> (2 to 1999999).foldLeft(BigInt(0))( (x: BigInt, y: Int) => x + (if (ps forall (p => y <= p || y % p>0)) y else 0))
res23: scala.math.BigInt = ..censored..

Да еще и красивая симметричная конструкция образовалась:

p => y <= p

:)

Reply


shabunc October 12 2011, 18:44:05 UTC
- Самка, где виноград брали?
Марина от неожиданности так испугалась, что чуть не
выронила сумку.
...
- А там вон, - ответила она, и показала совком в сторону
прилавков, - только там нет больше. Кончился.

Reply

ushastyi October 13 2011, 10:15:09 UTC
Надеюсь, броска не последует? Не отдам :)

P.S. Цитата порадовала, спасибо. Даже перечитать захотелось как-нибудь.

Reply


Leave a comment

Up