Jul. 2nd, 2014

orleanz: (main)
Вот я тут ради прикола сделал простейший экперимент

Взял первую, саму простую задачу из Проджект Эйлер. Найти сумму первых N чисел которые делятся на 3 или на 5. В начальной задаче N = 999 (https://projecteuler.net/problem=1), но я взял N = 9,999,999 чтобы дольше работало.

Код на Хаcкеле (сорри, я не знаю Хаскель, почти совсем, наверно это не самый оптимальный код)

isgood n = if (n `mod` 3 == 0) || (n `mod` 5 == 0) then True else False
result = sum $ filter isgood [1..9999999]
main = do print result

Код на Джаваскрипте

var res = 0;
for (var i = 1; i <= 9999999; i++) {
if (i % 3 == 0 || i % 5 == 0) {
res += i;
}
}
console.log(res);

Результаты работы компилированного Хаскеля
$ gtime ./first +RTS -K256M -RTS
23333331666668
3.35
user 0.23system 0:03.59elapsed 99%CPU (0avgtext+0avgdata 2312650752maxresident)k
0inputs+0outputs (0major+141238minor)pagefaults 0swaps

Результаты работы Джаваскрипта под Ноде
$ gtime node first.js
23333331666668
0.20
user 0.01system 0:00.22elapsed 100%CPU (0avgtext+0avgdata 57032704maxresident)k
0inputs+0outputs (0major+3720minor)pagefaults 0swaps

Хаксель компилировался командой
ghc first.hs -rtsopts

Почему такая адская разница?
orleanz: (main)
4 штуки европейцев, 4 латиносов

все остальные ужо отдыхают (африка, пендосы, азиаты)
orleanz: (main)
Чужой против Хищника - одно из самых гениальных названий фильма в истории кино.

Я не смотрел фильм, но как только я слышу его название,

на сердце сразу становится тепло,

лицо расплывается в улыбке.

Ощущаешь глубокую гармонию мироздания ...

Оптимизм, справедливость.

Ну и просто смешно еще, до кучи.
orleanz: (main)
$ gtime ./first +RTS -K512M -RTS
23333331666668
3.55

$ gtime python first.py
23333331666668
2.38

$ gtime node first.js
23333331666668
0.20

$ gtime java first
23333331666668
0.11

https://projecteuler.net/problem=1

Хаскель:
isgood n = if (n `mod` 3 == 0) || (n `mod` 5 == 0) then True else False
result = sum $ filter isgood [1..999]
main = do print result

Петон:
res = 0
for x in range(1,10000000):
if x % 3 == 0 or x % 5 == 0:
res += x
print(res)

Джаваскрипт
var res = 0;
for (var i = 1; i <= 9999999; i++) {
if (i % 3 == 0 || i % 5 == 0) {
res += i;
}
}
console.log(res);

Джава
public class first {
public static void main(String[] args) {
long res = 0;
for (long i = 1; i <= 9999999; i++) {
if (i % 3 == 0 || i % 5 == 0 ) {
res += i;
}
}
System.out.println(res);
}
}
Page generated Aug. 12th, 2025 02:55 am
Powered by Dreamwidth Studios