ProjectEuler
Oct. 12th, 2011 06:35 pmПоследние пару недель игрался на Скале с задачами с http://projecteuler.net/, и заодно подсадил на это дело жену. Мне программы писать неинтересно, интересно сделать в пару функциональных строчек в интерпретаторе, благо у Скалы есть консоль, и она хорошо оптимизирует tail-рекурсию. Когда одна из задач в пару скала-строчек не укладывалось, плюнул, и сделал на J в одну. Для J большинство задач просто семечки.
Эйлер 10 (сумма простых чисел, не превышающих 2,000,000):
Несмотря на то, что уже полгода с J не игрался, принципы все помню, и основное время ушло на поиск глагола для фильтра. Генератор простых чисел в J встроенный, так что по-началу я сгоряча просуммировал все 2,000,000 простых чисел, что тоже заняло всего несколько секунд.
P.S. Скоро мне привезут оригинальные книжки по J, купил остатки на Амазоне, больше там нет.
Эйлер 10 (сумма простых чисел, не превышающих 2,000,000):
+/ (#~ <&2000000) p: i.1000000x
Несмотря на то, что уже полгода с J не игрался, принципы все помню, и основное время ушло на поиск глагола для фильтра. Генератор простых чисел в J встроенный, так что по-началу я сгоряча просуммировал все 2,000,000 простых чисел, что тоже заняло всего несколько секунд.
P.S. Скоро мне привезут оригинальные книжки по J, купил остатки на Амазоне, больше там нет.
no subject
Date: 2011-10-12 04:22 pm (UTC)no subject
Date: 2011-10-12 06:44 pm (UTC)Марина от неожиданности так испугалась, что чуть не
выронила сумку.
...
- А там вон, - ответила она, и показала совком в сторону
прилавков, - только там нет больше. Кончился.
no subject
Date: 2011-10-12 07:23 pm (UTC)Сейчас попробовал, работает примерно со скоростью 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
:)
no subject
Date: 2011-10-13 10:15 am (UTC)P.S. Цитата порадовала, спасибо. Даже перечитать захотелось как-нибудь.