Здравствуйте, ie, Вы писали:
ie>Да фиг знает, если честно. ie>Вчера вечером о выводах как-то недумалось — спать хотелось. Сегодня утром сделал вывод, что надо было плюнуть на все и идти таки спать
Хороший вывод.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Здорово. Теперь объясните мне, пожайлуста, какие выводы из этой пенесометрии можно сделать?
VD>Собственно интересуют ответы обоих сторон.
я собственно, третья сторона, но моё мнение такое:
членометрия важна —
с каждым таким примером становится ясно:
немерле позволяет в большинстве случаев переписать прогу 1-в-1
или почти 1-в-1
Здравствуйте, PhantomIvan, Вы писали:
PI>собсно, скепсис в среднем и уменьшается
Вообще-то товарищь здесь защищал мнение о том, что ленивость по умолчанию это супер-пупер-здорово. Мол это дает невероятную гибкость. На просьбу привести жизненный пример подтверждащий его слова он привел очередной оторванный от жизни пример из математики (и как всегда далекий от оптимального алгоритм в угоду красоты).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
PI>>собсно, скепсис в среднем и уменьшается
VD>Вообще-то товарищь здесь защищал мнение о том, что ленивость по умолчанию это супер-пупер-здорово. Мол это дает невероятную гибкость. На просьбу привести жизненный пример подтверждащий его слова он привел очередной оторванный от жизни пример из математики (и как всегда далекий от оптимального алгоритм в угоду красоты).
та ладно, рано или поздно все "гастрономы" и "бизнесы" будут удовлетворительно автоматизированы
и программирование вернётся к изначальным ценностям — там, вычисление простых чисел,
расчёты вычислительной математики, системы автоматического вывода,
управление марсоходами и прочими терраформирующими комбинатами...
так что фраза "оторванный от жизни" — это временная фраза, уводящая программирование
от его, программирования, цели...
Здравствуйте, ie, Вы писали:
ie>Здравствуйте, VladD2, Вы писали:
VD>>Здорово. Теперь объясните мне, пожайлуста, какие выводы из этой пенесометрии можно сделать?
ie>Да фиг знает, если честно. ie>Вчера вечером о выводах как-то недумалось — спать хотелось. Сегодня утром сделал вывод, что надо было плюнуть на все и идти таки спать ie>Вообщем вывод который я для себя сделал, пора завязывать с пенесометрией! Вот только alpha-blend на J сделаю, уже пообещал Хропову
Да, кому нечем заняться в праздники рекомендую попробовать на время написать одну программку (если конечно вы не слышали об этом исследовании раньше) на своем любимом языке (естественно, не подглядывая в уже выложенные программы).
Результаты там были такие:
Lisp - от 2 до 8,5 часов
C/C++ - от 3 до 25 часов
Java - от 4 до 63 часов
( здесь). Сам Норвиг (который не кто-нибудь там, а руководитель всего исследовательского подразделения в Google) написал за 2 часа на Lisp.
Однако тут один товарищ (Lionello Lunesu) недавно запостил свое решение на D, которое заняло по его словам всего 1 час 15 мин!
Я сам попробовал на Nemerle и у меня вышло 3 ч 17 мин. Пришлось правда самому писать тривиальщину которая должна быть в станд. библиотеке (построчное чтение из файла через IEnumerable) и также сказалась недоделанность отладчика. А также мне понадобилось конвертировать string в list[char] и обратно, хотя возможно можно обойтись и без этого.
Здравствуйте, ie, Вы писали:
ie>Здравствуйте, R.K., Вы писали:
ie>
>>out.exe
ie>Elapsed: 8.0298764 ;; Count: 1080193
ie>>>По поводу переписывания на C++, опять же ленивости то нет, как ты функцию подобную primesFromTo писать собираешься? RK>>Ну будет не так кратко, но что быстрее в 4-8 раз — почти не сомневаюсь
ie>Можно и в моем варианте еще немного пооптимизировать. Например, избавится от основных тормозов — списков в строчках (**) и (++), заменить их соответственно на ie>
У меня на компе соответственно получается 7.62 и 0.98 в среднем.
Спасибо за указание тормозных мест — они в наших программах аналогичны. Пооптимизировал свою изначальную версию, вот что получилось:
genMap 2 3 = [5,7] -- special case, even p0^2
genMap p0 p1 = arrayFilter $ accum (\_ e -> e)
(listArray (1, bound-1) $ repeat True :: UArray Int Bool)
[ (j, False)
| i <- takeWhile (<p1) $ tail primes
, j <- takeWhile (<bound) $
iterate (+i) $ (correct (lo-rem lo i+i) i - lo) `quot` 2
]
where
lo = p0^2; hi = p1^2
bound = (hi-lo) `quot` 2
correct n i
| even n = n+i
| otherwise = n
arrayFilter a = intern (lo+2) 1
where intern n i
| i==bound = []
| a!i = n : intern (n+2) (i+1)
| otherwise = intern (n+2) (i+1)
Выполняется за 6.10 сек. Но на этом останавливаться не захотелось — вот версия, выполняющая тест за 0.94 сек:
import Data.Array.IO
import System.IO.Unsafe
genMap 2 3 = [5,7]
genMap p0 p1 = unsafePerformIO $ do
a <- newArray (1, bound) True :: IO (IOUArray Int Bool)
let erase i = intern $ (correct (lo-rem lo i+i) i - lo) `quot` 2
where
intern j
| j>bound = return ()
| otherwise = do writeArray a j False; intern $! j+i
correct n i
| even n = n+i
| otherwise = n
mapM_ erase $ takeWhile (<p1) $ tail primes
let extract n i acc
| i==0 = return acc
| otherwise = do
f <- readArray a i
if f
then ((extract $! n-2) $! i-1) $ n:acc
else ((extract $! n-2) $! i-1) acc
extract (hi-2) bound [] >>= return
where
lo = p0^2; hi = p1^2
bound = (hi-lo) `quot` 2 - 1
Все остальные функции остаются без изменений. Ну как?
Андрей Хропов wrote: > Однако тут один товарищ (Lionello Lunesu) недавно запостил > <http://www.digitalmars.com/d/lisp-java-d.html> свое решение на D, > которое заняло по его словам всего 1 час 15 мин!
C++ — 2 часа 20 минут. Начал писать в 4 часа ночи
Здравствуйте, ie, Вы писали:
ie> Круто! В очередной раз показали, что тормозные программы не есть свойство языков, а есть свойство программистов их пишущих
Ну, да. Хроший программист на ленивом языке скормит пример другу пишущему на немерле... тот перепишет код... скормит его дотентному профайлеру... выдас узкие места... и хороший программист устранит их на любимо языке.
Так же можно поступать и с отладкой.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.