- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
function timeToString(year, month, day, hour, minute, sec, msec) {
var date = new Date(year, month, day, hour, minute, sec, msec);
var now = new Date();
var msec = now.getTime() - date.getTime(); // Миллисекунды
var sec = Math.round(msec / 1000);
var years = Math.floor(sec / (86400 * 365));
var days = Math.floor((sec - years * 86400 * 365) / 86400);
var hours = Math.floor((sec - years * 86400 * 365 - days * 86400) / 3600);
var minutes = Math.floor((sec - years * 86400 * 365 - days * 86400 - hours * 3600) / 60);
var seconds = sec - years * 86400 * 365 - days * 86400 - hours * 3600 - minutes * 60;
// Проверяем, были ли високосные года?
var i;
for(i = date.getFullYear(); i <= now.getFullYear(); i++) {
if(i % 4 === 0) {
if(i === now.getFullYear()) {
if(now.getMonth > 2) {
days++;
}
elseif(now.getMonth === 2) {
if(now.getDay === 28) {
days++;
}
}
}
else
{
days++;
}
}
var yearName;
var yearOst = years % 10;
if(years === 1 || (yearOst === 1 && years > 20))
{
yearName = 'год'
}
else if((years === 2 || years === 3 || years === 4) || ((yearOst === 2 || yearOst === 3 || yearOst === 4) && years > 20))
{
yearName = 'года';
}
else
{
yearName = 'лет';
}
var hourName;
var hourOst = hours % 10;
if(hours === 1 || (hourOst === 1 && hours > 20))
{
hourName = 'час'
}
else if((hours === 2 || hours === 3 || hours === 4) || ((hourOst === 2 || hourOst === 3 || hourOst === 4) && hours > 20))
{
hourName = 'часа';
}
else
{
hourName = 'часов';
}
var dayName;
var dayOst = days % 10;
if(days === 1 || (dayOst === 1 && days > 20))
{
dayName = 'день'
}
else if((days === 2 || days === 3 || days === 4) || ((dayOst === 2 || dayOst === 3 || dayOst === 4) && days > 20))
{
dayName = 'дня';
}
else
{
dayName = 'дней';
}
var minuteName;
var minuteOst = minutes % 10;
if(minutes === 1 || (minuteOst === 1 && minutes > 20))
{
minuteName = 'минута'
}
else if((minutes === 2 || minutes === 3 || minutes === 4) || ((minuteOst === 2 || minuteOst === 3 || minuteOst === 4) && minutes > 20))
{
minuteName = 'минуты';
}
else
{
minuteName = 'минут';
}
var secondName;
var secondOst = seconds % 10;
if(seconds === 1 || (secondOst === 1 && seconds > 20))
{
secondName = 'секунда'
}
else if((seconds === 2 || seconds === 3 || seconds === 4) || ((secondOst === 2 || secondOst === 3 || secondOst === 4) && seconds > 20))
{
secondName = 'секунды';
}
else {
secondName = 'секунд';
}
document.getElementById("time").innerHTML = years + " " + yearName + ", " + days + " " + dayName + ", " + hours + " " + hourName + ", " + minutes + " " + minuteName + ", " + seconds + " " + secondName;
}
Функция для подсчета того, сколько времени прошло с указанной даты.
JavaScript начал изучать вчера. Чувствую, что уже можно заканчивать.
Пришлось код урезать, чтобы вместиться в 100 строк. Более-менее читаемый тут: http://dumpz.org/573381/
Нужно больше работать над собой и читать вумные книжки.
Зато усердно.
Бывает, что усердие превозмогает и рассудок. (q)
А теперь я вам скажу правду: Структуры данных для анскильных питушков. Последний Кароль этого мира(c)
Они, как и ты, думают, что узнай они, что такое связный список( хотя что такое связный список, брёвна и т.п. понимает любой человек, который осилил указатели) они знают сруктуру данных, наивные анскильности. Никто из этих животных не напишет оптимальный двусвязный список - только примитивщину из учебника за 3-й класс.
И что мы в конечном итоге имеем? Человек(имеющий мозг в районе <1-2%, 99% животных, которые обитают тут не попадают под этот 1% людей, из которых программистов намного меньше 1%), который в совершенстве знает массивы и указатели - уже знает все мыслимые и не мыслимые структуры данных автоматом.
Как вменяемый електронщик и схематехник автоматом знает все примитивные и не примитивныел огические( и не только) елементы. Патамучто, он знает, что такое транзистор(конденсатор).
Питухам это не дано понять, поэтому питушки так и дальше будут кукарекать. Неся какую-то херню, не понимая, что тот же двусвязный список - есть обычный массив, в котором prev/next - это не p-1/p+1, а p-offset/p+offset. Хотя питухи, даже не оспилят написать двусвязный список на оффетах, ибо питухи.
И что мы имеем - мы имеем бездарных животных, которые нихрена о структурах данных и вообще о представлении данных не знают, а заучили пару примитивных конструкций, выдавая это за "структуры данных".
Ты имеешь в виду ту реализацию, которая экономит память за счет использования всего одного слова вместо двух указателей?
Или же реализацию с двойным кольцом, за счет которого вставки и удаления становятся простыми и шустрыми (из-за того что не нужно ничего проверять на NULL'ы)?
> p-offset/p+offset
> Хотя питухи, даже не оспилят написать двусвязный список на оффетах, ибо питухи.
Ты, наверное, все-таки имел в виду p-offset1/p+offset2? Потому что с одинаковым офсетом в обоих случаях ничего не получится. Ну а если разные - то офсетный список легко пишется, и его удобно юзать, к примеру, на замапаном в память файле.
Да, согласен.
Что такое слово? Экономят память пару оффсетов, а <<| делают только питухи.
>Или же реализацию с двойным кольцом, за счет которого вставки и удаления становятся простыми и шустрыми (из-за того что не нужно ничего проверять на NULL'ы)?
А разве есть идиоты, которые юзают списки с нуллами на концах? Хотя да, те, кто знают алгоритмы - они знают.
>Ты, наверное, все-таки имел в виду p-offset1/p+offset2? Потому что с одинаковым офсетом в обоих случаях ничего не получится. Ну а если разные - то офсетный список легко пишется, и его удобно юзать, к примеру, на замапаном в память файле.
Что я имелл ввиду - это офсеты, одинаковые - разные не имеет значения. Там -+, поэтому они могут быть одинаковыми и будет работать.
Всё легко пишется и понмиается, только питушки кукарекают.
xor linked list, в котором вместо двух указателей на соседние элементы лежит один size_t, в который помещают ((size_t)next) ^ ((size_t)prev). Там, правда, есть небольшая проблема при обходе: надо тащить 2 указателя - на предыдущий и на текущий элемент. И имея только один указатель на элемент нельзя его удалить или вставить что-то рядом. Так что это только для тех случаев, когда элементы списка мелкие, список длинный, а памяти мало.
> поэтому они могут быть одинаковыми
Не ну они конечно могут совпасть, потому что в куче элементы удачно легли (например их создавали подряд). Но в общем-то случае они разные.
Хреначишь пуллоподобный аллокатор - начало у тебя 0, остальное у тебя оффсет. Для 4-х миллиардов елементов - тебе хватит 32бит+32бита. Получаешь 2указателя за 2-4битовые операции.
>Не ну они конечно могут совпасть, потому что в куче элементы удачно легли (например их создавали подряд). Но в общем-то случае они разные.
Любая нормальная реализация спискаска имеет свой аллоктор. Никто не говорит, что они одинаковые, но никто так же не говорит, что они обязаны быть разными. Это твоя придирка к моему описанию.
уже узнал не только про массивы, но и про хеш-мапы и связные списки?
прогресс
Связный список, питух, как я уже говорил - нагромаждение указателей над массивом.
Я просто не представляю, как ты анскильные ущербаны, удел которых ваять формочки на делфях - лезут в спор со мной, говорят о какие-то хешмапы, причем говоряют полную ересь. Нихрена не знают, не понимают - но нести херню они всегда горазды.
Уйди отсюда питушок, ты мне, животное, до сих пор не описал семантику конста в сишке.
хеш-таблица массив только наполовину, неужели ты этого не знал?
> Нихрена не знают, не понимают - но нести херню они всегда горазды.
ты с зеркалом разговариваешь?
ну так и как ты собираешься хранить значения в корзине твоего хешмапа?
связный список?
питушок, развлеки меня сегодня
Реально? С чего это на половину? data[1 << bit]; data get_data(key_t key) {retrnt data[perfect_hash(key)];}
С коллизиями делается в 2массива.
>ну так и как ты собираешься хранить значения в корзине твоего хешмапа?
>связный список?
Животное, что такое "корзина"?
>питушок, развлеки меня сегодня
то-то ты в прошлый раз слился как детя.
bucket - это тот контейнер в хеш-мапе, который хранит значения, попавшие под один хеш - коллизии этого значения хеша
ну так что там у тебя - массив? отсортированный? связный список? еще один хеш?
>bucket - это тот контейнер в хеш-мапе, который хранит значения, попавшие под один >хеш - коллизии этого значения хеша
Мне похрен как питушки вроде тебя что-то называют.
В моём первом примере он не нужен, но ты это проигнорил, как питух.
Что мне будет удобней. Массив - массив. Ещё один хеш - массив. Связный список - массив(для вас питухов не массив). От питушок прокукарекался. В 80% случаях хешмап состоит на 100% из массивов.
расскажи почему связный список это массив?
У тебя есть 0 ... N массив и ты пишешь правый елемент n, а левый елеменин n. Код тоже индексируется переходами, но от этого он не перестаёт быть масивом.
Твоё жалкое сознание примитивно, основанно на бездарном недопонимании каких-то абстракций.
Ну, если список интрузивный (а сишные Цари используют только такие), то для реализации вполне достаточно одного массива. Вместо указателей - индексы.
в отличие от массива, где 1) для обращения к i элементу нужно совершить 1 действие и 2) при вставке в середину ломается перформанс
Мы-то, анскильные жывотные, привыкли отделять питушиные абстракции от анскильных реализаций. Но наш гениальный друг не желает опускаться до пренебрежения деталями. Ибо всё есть массив и гнуц - пророк его. Питаминь.
Животное упоротое. Никаких i елементов у взаимозависимых индексов нет - питух тупой.
>не будет пенальти при вставке и удалении в отличие от массива
Упоролся чтоли? Иди покури man x86, питушара.
>для обращения к i элементу нужно совершить 1 действие и 2) при вставке в середину ломается перформанс
Упоролся, животное? Не 1 действие, животное, а (3*кешлайн)/длинну елемента( в твоих питушарских плюсах всё ещё хуже). И застопорить конвейер. Но тыж питух, кроме детсодовских "1действие" нихрена не знаешь.
Ты, животное, нихрена не знаешь о перфомансе, даже не заикайся мне о нём - твой удел ваять говно за еду, не более.
ты же ранее уже спизднул, что у нас не хватает уровня абстракции, что массив и список - это всё суть некие контейнеры, которые хранят в себе элементы
"N элементов"- твои слова?
значит с ними обоими можно сделать одни и те же операции - попросить конкретный по счету элемент, вставить элемент за конкретным, удалить конкретный элемент
теперь тут будет вопрос о твоей нелюбимой О-нотации
для тебя же понятно, надеюсь, что container[1] - элемент, следующий за container[0]
итак, сколько попугаев-элементарных абстрактных действий надо будет сделать при обращении к container[5] в случае, если этот container - массив и в случае, если container - список, в котором, как ты хотел, роль указателя на следующий элемент исполняет индекс этого самого следующего элемента?
затем аналогично про удаление container[5] и вставку элемента между container[5] и container[6]
доступно?
0 1 2 3 4 5 6 - это стркутура данных - она хранит.
3 0 2 5 6 4 1 - это индекс, который можно записать как ещё один линейный индекс, либо как связный список. Нулевой елемент тут 2-й, поэтому p+0 - будет нулевой елемент О(1).
Ты животное, у тебя нет прямой индексации к индексу над массивом, которыйм является список.
>затем аналогично про удаление container[5] и вставку элемента между container[5] и container[6]
Животное - ты не можешь вставлять между чем-то упрошка - у твоего списка нет прямой индексации - ты можешь добавлять в хвост. Чтобы ты мог вставлять как ты говоришь - тебе надо захреначить ещё одини ндекс над списком.
В связном списке без верхнего индекса - это бесполезно, с ним - одинаково, что там, что там.
>затем аналогично про удаление container[5] и вставку элемента между container[5] и container[6]
Одинакого и там и там на удалении. Вставка без индексации - одинакова, вставка с индексацией одинаковая - если всё в кеше связный список с внешним индексом будет быстрее, но его полезная нагрузка на байт 20 на елемент меньше, чем у массива.
Питух, ты нихрена не понимаешь - ты несёшь полную херню, ты кроме стл"а ничего не знаешь. Ты не знаешь своих же "стрктур данных". Ты не понимаешь, что [] требует для списка ещё один индекс и это уже далеко не связный список.
связный список в стл, в кнуте и других пока еще непонятных для тебя словах на пальцах описывается вот тут: http://ru.wikipedia.org/wiki/Связный_список
в общем я постарался декодировать то, что ты написал
у тебя, походу, каша из абстрактного понятия "список" и понятия "LRU"
какую то ересь нахерачил
каждый элемент списка знает, где находится соседний к нему элемент
нулевой должен знать про первый, первый должен знать про второй
с помощью массива это запиливается несложно - каждая ячейка массива хранит { T data; size_t next; }
список - идеальная структура данных, в которой важен как порядок соседствования элементов при обходе, так и сравнительная дешевизна размещения нового элемента/удаления ненужного между существующими двумя
[] для списка требует последовательного прохода от головы списка до нужного i-го элемента
сравни с массивом
вставка в середину массива и удаление из середины от тебя потребует (даже если аллоцированный размер позволяет) переноса всех элементов справа
в списке же тебе достаточно найти любую свободную ячейку и переназначить ссылки на нее - все старые элементы остаются на своих местах и никуда не двигаются
что непонятного?
Вот тебе надо вставить по одному елементу на 10, 100, 1000, 10000, 100000 позицию в твоём списке - для того, чтобы получить указатель на 10, 100, 1000, 10000, 100000 елемент в твоём списке - тебе надо обойти 10, 100, 1000, 10000, 100000 елементов, ибо ты знаешь указатель только на первый елемент списка.
Для того, чтобы тебе не надо было обходить елементы, питух тупорылый, пацаны в стл"е пишут для тебя ещё один индекс, но ты этого не понимаешь.
Вставка в произвольное место массива - требует сдвинуть все последующие елементы - вставка в произвольное место списка - требует перебора всех елементов до нужного тебе.
Ты поймёшь это?
я уже знаю указатель на 10000й элемент
как в массиве, так и в списке
я хочу вставить сразу после него новый элемент
ничего дополнительно искать с головы не надо - это задача совсем другого алгоритма
Знал бы ты ещё х86, как строитель материал - ты бы такую херню не нёс. Скорость памяти уже давно перешагнула планку 20гигов на нить.
Максимум, что ты можешь выжать из обхода списка - это отсилы гига 2-3/с. Даже если ты будешь обходить елементов в 2раза меньше, чем я в массиве копировать - вставка у тебя будет медленней.
Так же - ты будешь убивать кеш, ибо ты будешь сбрасывать кешлайны на запись, что убьёт перфоманс оперативы ещё в 2раза. nt обход на списке не реализуем. Префетч тоже.
Вобщем ты анскильное говно, которое несёт просто тотальную херню - вставка в произвольное место списка не быстрее вставки в произвольное место у массива, даже если ты будешь кешировать последние обращения.
можешь переписать на сишке
http://pastebin.com/FptZPZxk
насчет актуальности проца и его кешей - i7-2600k
Произвольная вставка - это имея голову - хреначит в любую часть списка, а не смешать голову и хреначить в неё.
Теперь запили мне бенчь, где ты записываешь в (std::rand() % 1000000) елемент единицу 1000000 раз и слейся, животное.
> С коллизиями делается в 2массива.
HashTable = 2 * Array
HashTable / 2 = Array
Лол, занимательная математика
ну про .rodata ты, надеюсь, помнишь, у тебя же абсолютная память
ну и помнишь про функцию с названием примерно strchrnul
представь, что ты пишешь перформанс библиотеку для анскильных питухов
напиши мне прототип этой одной функции strchrnul, я тебе приведу пример как хочу её использовать
А вот, кстати, хрен там. Если бы const гарантировал помещение в r/o память, то зачем бы в avr-gcc сделали модификатор __flash?
The implementation may place a const object that is not volatile in a read-only region of
storage. Moreover, the implementation need not allocate storage for such an object if its address is never used.
Т.е. компилятор может поместить константы в r/o секции или вообще выкинуть. Но не обязан.
я подожду ответа анскильной куриной королевы
ну так вот
1) к вопросу может/обязан - в обоих случаях строковый литерал следует объявлять как char const * - кто даст гарантии, что сейчас он этот литерал 100% не разместит там
даже несмотря на то, что в сишке строгость типизации совпадает с уровнем строгости режима его лечебного заведения
2) сейчас он представит прототип, но я подозреваю, что в его варианте там будет нечто навроде
char *strchrnul(char *s, int c);
итак, я пользуюсь его библиотекой и обнаруживаю, что его strchrnul принимает мутабельный char *
раз она его принимает, значит делает неспроста (например, strtok делает это неспроста, inplace xml-парсеры делают это неспроста - видимо там такой уберперформанс алгоритм, что убер это требует) - что ж, единственный выход будет сделать либо не менее уебищным способом через массив на стеке длиной strlen(s), или на худой конец strdupa (слыш бивис, он сказал дупа)
вот так вот, лишь потому что я не имею права быть уверенным в том, что функция не засрёт мне аргумент, а ленивый анскильный питушок не способен в прототипе ясно выразить свою мысль, возникают ненужные пессимизации на ровном месте
Сейчас он скажет тебе, что ты неуверенный в себе анскильный питушок, раз не можешь прочитать в доке\исходнике делает ли strchrnull что-то нехорошее со своими аргументами ;)
исходники не всегда бывают - это раз, куриная королева не удостоит свои гениальные творения генерацией доков - это два, ну и код _обязан_ быть самодокументированным - это три
Я уже не раз говорил - меня животные, типа тебя не интересуют.
>исходники не всегда бывают - это раз, куриная королева не удостоит свои гениальные творения генерацией доков - это два, ну и код _обязан_ быть самодокументированным - это три
Всегда бывают исходники, в остальных случаях ты питух. Они не нужны - я не пишу код для животных. Самодокументированных для людей, которые осилил сишку - да, для питухов - нет. Ты питух.
ты пока вообще ни для кого код не пишешь, ни для питухов, ни для курочек
вообще
когда за твой код, который должен будет хоть с чем-либо сопрягаться, тебе начнут платить деньги, внезапно окажется, что питушок-то всего один и ты его хорошо знаешь
где для тебя порог между "за еду" и достойным уровнем заработка?
Вот когда ты будешь писать нужные для мира вещи, создавать что-то и будешь не рядовым кукарекающим веб-говнарём, а реально полезной сущностью.
Пока же ты бесполезное малоразвитое животное, которое нихрена в свой жизни не создало, а весь её код - это впаривание своего говяного выхлопа за еду.
Ещё раз повторю. Для тебя основа написания кода - это запилить поизимодней то, что от меня надо и пойти пить пивас. Поэтому ты ищешь хмл"ы, готовый код, не хочешь осилить сишку.
Когда ты будешь писать код не за еду, тогда ты и будешь не заедушной макакой и будешь способен воспринимать нормальные аргументы и не нести херню.
не стоит судить о бесполезности других для общества по себе :)
т.е. ты готов работать бесплатно, лишь бы тебе было интересно
совместить не пробовал?
или мамка и так борщ сварит и штанишки купит?
Питушок, пиши тогда, когда осилишь сишку хотябы на уровне 2-го курса. Я такого говна давно не видел.
Животное тупо, идиота кусок, просто животное - ты не знаешь семантики функции, незнаешь синтаксис, нихрена не знаешь - и ты споришь питух.
Питух, бесполезный.
Значит ты животное, если ты не осилил понять как работает strtok и как работает shrchr - ты питух и это твои проблемы - меня они не заботят.
То, что ты написал ниже - животное, убейся. Я такого говна в жизни не видел.
Животное, как всегда не осилил c99, питух.
>вот так вот, лишь потому что я не имею права быть уверенным в том, что функция не засрёт мне аргумент, а ленивый анскильный питушок не способен в прототипе ясно выразить свою мысль, возникают ненужные пессимизации на ровном месте
У животного типа тебя, возникают ущербные примеры, ибо ты питух. Меня не интересует животное, которое не смотрит код функций, которые юзает.
Нормальный человек понимает, что strchr() незачем меня твою строку, ибо это ему не нужно - ты же питух не понимаешь - это твои проблемы.
подгорело?
не смотрит код функций? ты бы с гравитацией разобрался сначала, а то пользуешься каждый день, но что такое ускорение не понимаешь
дошла аналогия?
надо быть полнейшим уёбком, чтобы писать функции, требующие при использовании разбора их тел
>не смотрит код функций? ты бы с гравитацией разобрался сначала, а то пользуешься каждый день, но что такое ускорение не понимаешь
дошла аналогия?
Не с гравитацией, а с матописанием. Твоя аналогия говно.
>надо быть полнейшим уёбком, чтобы писать функции, требующие при использовании разбора их тел
Оно не требует разбора тела - оно требует понимания, коего у тебя нет. Если ты питух не понимаешь, что функции не нужно трогать твои данны.
Ты же, животное, понимаешь, что измерение твоей жопы не наносит ей вреда. Ты же перед измерением не оковываешь жопу в сталь и не бежишь читать на рулетке "констатная ли она или нет".
Ты банальное, бездарное животное, которое несёт херню.
самые быстрые и экономные xml парсеры - inplace
что такое парсер объяснять не нужно, надеюсь?
парсер должен прочитать и разобрать входящие данные - и обычный человек подумает, что данные-то менять для этого ему не нужно
однако inplace парсер волен для своего же удобства позаменять неугодные символы на нулевые - и он сделает дохера таких замен
и безусловно, такой парсер примет на вход char *, а не char const *
представь, что ты пишешь свой парсер, убер-перформанс
если ты укажешь char const *, я даже в документацию не полезу с вопросом, не наебнет ли твой парсер мне приложение, если я передам туда константную строку, в противном случае придется потратить существенно больше рабочего времени, чтобы удостовериться - ну нет, похоже, не меняет - и скрестить пальцы, что взаправду не меняет
>представь, что ты пишешь свой парсер, убер-перформанс
Ты идиот? Ты питух? Ты животное? Никому не нужна строка до парсера. Если твоё говно строится на том, что тебе нужна исходная строка после парсинга - ты животное, и уйди отсюда пожалуйста.
Меня твои проблемы, животное, не волнуют. strchr() юзают для уничтожения строки, поэтому юзать его на константную строку никто не будет, кроме таких питухов как ты. Остальное меня не волнует.
ух ты какой, только черное и белое, да?
а про поточные парсеры ничего не слышал?
у тебя плохо с абстрактным мышлением, но всё же попробуй представить себе xml файл, не умещающийся в оперативной памяти, или еще пример - тебе нужна только малая часть приходящего из сети xml документа - его что, надо весь сохранить в памяти и только после </end-tag> приступить к парсингу?
Я не хотел это юзать, но тебя животное надо тыкнуть рожей в лужу, а то ты уже совсем о своём месте позабыл.
Знаешь питух, почему в сишке strchr() возвращает char*? В плюсах есть char * и констрчар? А теперь подумай, животное, почему входящие данные константы, а выходящие( которые являются теми самыми данными) нет?
char * s = strcher(str, *str); - легальный каст из конст в не конст.
>а про поточные парсеры ничего не слышал?
Животное, а знаешь почему они поточные? Потомучто они не сохраняют предыдущие данные.
>у тебя плохо с абстрактным мышлением, но всё же попробуй представить себе xml файл, не умещающийся в оперативной памяти, или еще пример - тебе нужна только малая часть приходящего из сети xml документа - его что, надо весь сохранить в памяти и только после </end-tag> приступить к парсингу?
Тыж животное описываешь свой выхлоп.
По твоей логике вначале надо скопировать данные, которые не умещаются в оперативной памяти в этой же памяти. А потом уже парсить не трогая данные. Питушара.
Питух, что ты мне хочешь сказать? Что нормальные парсеры не юзают константные данны? Я это и без тебя знаю, но ты же начал кукарекать, что тебе нужны эти данные. В чём проблема?
И да, питух, xml юзают только животные вроде тебя, которые не осилили бинарные протоколы/key-value.
А уже если у тебя хмл не вмещается в память - ты трижды идиот и иди убейся, чтобы я больше таких днище-сливпримеров не слышал.
ты же заявил, что все парсеры беспесды будут заменять на ноль хвосты токенов, а те что не заменяют - ненужны ибо для мудаков
поточный парсер - отличный пример парсера, который не модифицирует входные данные
xml?
да ты сейчас в браузере его видишь, прямо сейчас - xhtml подмножество xml, сюрприз, да? прости, что твой интернет не осилил бинарный протокол key-value
ну то, что про тебя нет никакого межведомственного/фискального потока информации в твои то 17 лет, я могу и не удивляться, ладно
у xml есть еще другие преимущества, но самое главное - простота и гибкость описания произвольных данных внутри
у тебя просто маленькая голова, в маленькой голове живет маленький мозг, который отрицает существование здоровых отчетных xml файлов, потому что их никогда не видел
>ты же заявил, что все парсеры беспесды будут заменять на ноль хвосты токенов, а те что не заменяют - ненужны ибо для мудаков
поточный парсер - отличный пример парсера, который не модифицирует входные данные
Значит он тормазнутое говно - максимум, что он может - это не индексировать входные данные, а копировать из них нужные токены, но хмл хоть и питушня, но хранить нули выгодней, чем хранить только токены.
>да ты сейчас в браузере его видишь, прямо сейчас - xhtml подмножество xml, сюрприз, да? прости, что твой интернет не осилил бинарный протокол key-value
Броузер и интеренты писали питухи вроде тебя. Ничего, скоро твой хтмл умрёт. Уже сейчас оверхед на хтмл и хттп перевешивает полезную нагрузку, но вы, вебпитухи слишком анскильны и никто из вас не осилит бинарный протокол.
>ну то, что про тебя нет никакого межведомственного/фискального потока информации в твои то 17 лет, я могу и не удивляться, ладно
у xml есть еще другие преимущества, но самое главное - простота и гибкость описания произвольных данных внутри
Т.е. ты питух пишет свои произвольные данные в оперативе, а потом хранишь в хмле? Ой питух, а задампиьть оперативу не проще? Нормальные люди дампят оперативу - питухи типа тебя юзают хмл.
>у тебя просто маленькая голова, в маленькой голове живет маленький мозг, который отрицает существование здоровых отчетных xml файлов, потому что их никогда не видел
Ах да, питушок считать не умеет. Берём хмл файл в 10гигов - он на 70% состоит из оверхеда. Поэтому тебе, питуху, его надо сжать. В противном случаее тебе дадут по рожи более развитые идиоты.
А бинарное представление key-value занимает пол гига, а не 10гигов - и уже никакие парсеры не нужны, в оперативу влезает - всё хорошо.
Но питухи оправдывают свою анскильность тем, что что-то удобно и везде так.
ты не поверишь, но поточный парсер работает _быстрее_ DOM парсера, прикинь сюрприз
> оверхед на хтмл
соль-то подорожала
прикинь, еще бывают gzipped потоки
> удобно
ты не поверишь
но текстовый редактор - вообще достаточно удобная штука
не пробовал писать на сишке сразу в машинных кодах?
Мне не интересно какое там у вас говно быстрее другого говна. Я могу с тобой поиграться в тыкнуть тебя рожей в лужу - берём любую key-value структуру данны - я хреначу своё бинарное представление и парсер - ты юзаешь свой хмл и самые быстрыы говнопарсеры.
Потом сравним, что быстрее и легче.
>прикинь, еще бывают gzipped потоки
Животное - я об этом уже писал - ты не сливайся так явно.
>ты не поверишь
>но текстовый редактор - вообще достаточно удобная штука
>не пробовал писать на сишке сразу в машинных кодах?
О5 сливаешься как животное. Тактовый редактор для текста - яж не пишу сишку в хмл"е, а ты похоже пишешь.
пишешь key-value для него
потом мы с тобой обсудим возможность добавления обработки элементов <vova> и <hello:pitushok>
америку ты мне не откроешь, не надейся
просто будет небольшой пример, как небрежный прототип заставляет делать пессимизации
Причем тут это? Питух - это семантика не конста, а "статической" памяти. Животное, тупое. Что мне даёт rodata? Ничего.
>представь, что ты пишешь перформанс библиотеку для анскильных питухов
Я ничего не пишу для анскильных питухов вроде тебя.
>напиши мне прототип этой одной функции strchrnul, я тебе приведу пример как хочу её использовать
Я уже писал.
нихуа. все структуры данных на самом деле - ни что иное, как последовательность байтов.
приведи пример хоть одного неупорядоченного
и не кукарекай
В том и суть, что изначально в машине их нет. Поэтому в железе всё массив. А не упорядоченный - это уже абстракция относительно нижнего порядка.
но не
> Последовательность байтов и есть массив
видишь разницу?
и любой поток - последовательного или произвольного (как в массиве) доступа - упорядочен, т.к. байты идут один за другим, либо пронумерованы (для массива - индекс), а не перемешаны рандомно
>и любой поток - последовательного или произвольного (как в массиве) доступа - упорядочен, т.к. байты идут один за другим, либо пронумерованы (для массива - индекс), а не перемешаны рандомно
Изначальная софтварная абстракция - есть массив. Поток - это поток, а массив это массив.
У тебя есть какой-нибудь кеш, аля примитивные 4*! на ячейку, что получается? У тебя набор этих елементов - есть массив. У тебя массив массивов. А вот то, что идёт по шинам - уже поток байт.
Поток - есть набор байтов за t - т.е. t+0 - первый байт, t+1 - второй и т.д. А вот массив - это статичная конструкция. И основа всего - это массив, ибо если бы небыло статичных байтов - неоткуда было бы взятся потоку.
Поэтому взависимости от уровня интерпритации - это может быть всё, что угодно - ибо ты можешь дойти до електронов и прочего.
в отличие от потока, массив не может быть неограниченным, "бесконечным"
ща, угу. Иди попроси бесконечный байтовый поток без произвольного доступа у своего ethernet-адаптера.
да запросто. бесконечный байтовый поток с последовательным доступом.
а вот бесконечный байтовый массив с произвольным доступом - уже сложнее
он не мой.
и не зря я сказал "бесконечным" в кавычках. потому как принципиальная разница именно в том, что у массива определена некая длина, а поток может быть сколько угодно открытым, пока не придет сигнал окончания потока.
поэтому, массив может быть потоком, но поток массивом может быть, а может и не быть.
Ну да, для 64-битки хороший вариант.
> Никто не говорит, что они одинаковые
А это тогда что было: p-offset/p+offset? Я к этой записи и придирался.
В это записи лишь говорится, что к какому-то указателю прибавляется оффсем и получается другой указатель.
Если же p-offset и p+offset это, разные, независимые формулы, в которых offset'ы друг к другу никакого отношения не имеют (и поэтому могут быть хоть одинаковыми, хоть разными), то претензий не имею.
А строитель, хорошо научившийся ложить кирпичи, без проблем сможет построить 10 этажный дом без помощи архитектора... Кул стори, бро.
> ложить
кажется, я знаю такого одного
На меня намекаете? :)
= )
Да, строитель который досканально знает основу всех материлов, все их х-ки и прочее. Архитектор, глупая, анскильная, ты моя лалка - учит материалы, и уже зная особенности материлов - может строить любые конструкции.
Только вот максимум, что архитектор выучит - это марки бетона. Пропацану не упали марки бетона, ибо он в идеале знает х-ки компонентом и может сам себе смесить бетончик.
Ну и да, питух, строитель даже из 10% может построить 10-этажный дом без помощи архитектора. Строитель может не знать, ибо он аскиллед типа вас, какие именно ему нужны стены, на чём можно сэкономить - он просто захреначит коробку коробку из боковой лесенки в кирпича 3-4 и конструкция тупо на свой жесткости простоит.
Хотя вы же сродни панельщикам - вы клепаете панельно говно и кричите "ты не знает форм панелей" - хотя я могу тупо из кирпача составить любые мыслимые и не мыслимые формы, а так же отлить из бетона. И мне ваши примитивные формы понелей не упёрлись, ибо я знаю основу - бетон и арматура в идеале и могу хреначить всё, что душе угодно.
Ты забыл написать - в принципе может. Расшифровку "в принципе" читай в пасте Карманова.
Ну готовые структуры данных юзают не только потому, что не могут на ходу придумать свои...
Во-первых да, ты прав, не каждый программист способен придумать структуру и реализовать ее. А писать как-то надо. Ведь гениев совсем мало, а прикладная опердень их совершенно не интересует. Вот и приходится большинству юзать готовые реализации готовых структур, не вникая в то, как они работают.
Во-вторых это экономит время на написание кода. Нахрена каждый раз писать реализацию какого-нибудь хешмапа, если уже есть готовая и достаточно шустрая? Да, не спорю, этот код будет работать медленнее, чем заточенная под конкретный случай реализация.
В-третьих код, в котором используют стандартные структуры быстрее читается. Не ну я не спорю, разобраться можно в любом коде, просто это займет больше времени.
В-четвертых, в своей реализации можно допустить ошибку. Забыть какой-нибудь крайний частный случай, или погнавшись за оптимизацией допустить какой-нибудь косяк в реализации. Если писать свою реализацию для известной структуры, или вообще взять готовую, вероятность ошибки намного меньше.
P.S. Не пойму, почему ты так уперся в перформанс... Рвать всех по скорости конечно круто, и интересно, но ведь есть еще такие характеристики как время разработки, надежность, легкость модификации и т.п... Да и не далеко не всем кускам кода нужен этот перфоманс.
На 90% только поэтому.
>Во-первых да, ты прав, не каждый программист способен придумать структуру и реализовать ее. А писать как-то надо. Ведь гениев совсем мало, а прикладная опердень их совершенно не интересует. Вот и приходится большинству юзать готовые реализации готовых структур, не вникая в то, как они работают.
Поэтому и существует проблема 95%. Не каждому дано думать, разваваться, быть человеком. Проще быть шаблонным ущербаном и глушить ягу/пивасик(замени нан ужное слово) с горямыки.
>Во-вторых это экономит время на написание кода. Нахрена каждый раз писать реализацию какого-нибудь хешмапа, если уже есть готовая и достаточно шустрая? Да, не спорю, этот код будет работать медленнее, чем заточенная под конкретный случай реализация.
Я уже это объяснял - в хешмапе сложность не в самом хешмапе, а в хеше. На подбор нормального хеша у тебя уйдёт больше времени, чем на написание самого хешмапа, а в 50% случаев всё сводится к перфектхешу и банальному массиву. В остальных случаях - самое сложное - это обработка коллизий - но и тут захреначь туда связный список - получи хешмап за 5минут.
>В-третьих код, в котором используют стандартные структуры быстрее читается. Не ну я не спорю, разобраться можно в любом коде, просто это займет больше времени.
Нет, не быстрее. Быстрее читается неосиляторами, мозг которых не способен понимать что-то за гранью стл. По вашей логике ваши 100строчек читается проще нормальных 20, но всё какраз-таки наоборот.
Какую такую ошибку? Очередная отговорка - шанс на допуск ошибки у неосиляторо в stl-api больше, чем у человека зафейлить что-то. Ты можешь зафейлить, когда ты пишешь в комментике на говнокоде, ибо тебе лень запустить код, но в реальной жизни - ты можешь запустить свой код и поглядеть.
>P.S. Не пойму, почему ты так уперся в перформанс... Рвать всех по скорости конечно круто, и интересно, но ведь есть еще такие характеристики как время разработки, надежность, легкость модификации и т.п... Да и не далеко не всем кускам кода нужен этот перфоманс.
Для конкретно меня - писать любые конструкции - это 5-10% времени - остальное время я думаю. Мне проще писать так, чтобы моё представление ложилось на код без искажений - остальное меня мало интересует.
Самый простой код - самый надёжный. Чем больше кода в своей программе ты можешь написать сам, а лучше пишешь сам - тем надёжней твой код. Тогда для тебя не будет никаких чёрных ящиков в программе, всё будет идеально сопрягаться и не будет кастылей, которые и дают 95% багов. Да и на любое неправильное поведение - ты уже будешь примерно представлять где оно не работает, а лалка будет гадать, ибо он даже не знает, как работает его стл.
Самая лёгкая модификация - это переписать. Ты же не строишь дом, говоря - он должен легко модифицироваться. Ты строишь надёжно, красиво, хорошо и так, как тебе надо. Ты вкладиваешь в дом возможность сделать после то, что ты не сделал сейчас - это максимум.
Не всем кускам кода нужен МАКСИМАЛЬНЫЙ перфоманс - это да, но не более, ибо максимальный перфоманс основан на хаках х86 говна и это получается не минималистично и не очень красиво.
10 этажей это не хер собачий - наверное понадобится лифт, сколько лифтов нужно, очевидно, нужен технический этаж, балконы нужны или нет, какие стены несущие, должны ли стены на 2 этаже быть такой же толщины, что и на 9м, из чего крыша, какая она
далее - сметная стоимость работ, материалов, какие нужны технические средства, чем ты будешь на 8 этаж доставлять кирпич, чем будешь рыть котлован, сколько времени это займет
всегда легко пиздеть, не владея темой совершенно
кстати, рядом с моей работой есть кирпичный бизнес-комплекс из нескольких корпусов
такой же горе-10% наверное проектировал - 12 этажный дом дал трещину и начал заваливаться (ибо построили на подземной реке), потом отдельно ему стены и фундамент укрепляли, сшивая металлический каркас
http://www.kp.ru/daily/24085/318248/
Никакие ремонты никаких дамов не делаются. Срок службы у этого дома будет сотни лет. Осадка зависит не от дома.
Сколько нужно - столько и хреначат. Очевидно нужен и не технический этаж - ты упоротое животное несёшь такую херню, что я просто поражаюсь. Какая разница нужны балконы или нет? - это тебе не панелька.
Толщена стены зависит не от "должны", а от "сколько мы сэкономим". Причем тут вообще несущие стены? Ты перебираешь всё, что ты услышал/нагуглил о "строительстве"? Несущие стены - это набор стен, которые обеспечивают минимально нужную дому жеткость. Это зависит не от дома, а от стен. Какая крыша не принципиально - хреначь хоть ещё один этаж без стен.
Далее, животное, ты о5 перебираешь бесполезности? Стоимость чьх работ? моих? За мою работу отвечаю я. Посчитай. Строишь этаж - строишь лифтошахту первой, далее цепляешь на верх лифт - им и хреначишь. С плитами сложнее.
Лопатой буду рыть. Какая разница сколько времени это замёт? Я сам строю - я решию как и сколько я строю, пусть хоть 50лет буду строить.
Как всегда животное открыл статью на википедии и перебрал всё подрят, не понимая даже того, что он несёт.
>такой же горе-10% наверное проектировал - 12 этажный дом дал трещину и начал заваливаться (ибо построили на подземной реке), потом отдельно ему стены и фундамент укрепляли, сшивая металлический каркас
Реально? Он его строил? Нет - питушок.
расскажи это жителям Норильска
ты же как строитель-10% вообще нихуя не знаешь, какой толщины должна быть кирпичная, бетонная, деревянная и иная хуянная стена для удержания тепла при внешней температуре этой широты
срок службы у любого дома рассчитывается и планируется - может у тебя на украине не так, и всем похуй на ремонты и никто не чешется, пока подъезд не обвалится, у нормальной системы ЖКХ это всё учтено в бюджетах текущего и следующего периодов
ну так "сколько нужно - столько и хреначат" - как тупоголовому строителю-10% сколько нужно сообщают сверху, да так, что ему и думать не надо
осадка зависит от веса конструкции и почвы, для тебя это не очевидно? какой фундамент ты будешь делать на берегу реки для 10 этажного кирпичного (!) дома? кого посадят, если дом поедет и рухнет в течение года?
"берешь лучшие материалы - остальное не важно"
отличная логика - берёшь лучших швейцарских работников, платишь им сотню млн $ - остальное не важно
как ты думаешь, почему сейчас не стоят многоэтажных домов целиком из кирпича?
"какая разница сколько это времени займет" - теперь ты подошел к тому вопросу, о котором у тебя совершенно нет никакого представления - трудозатратам
за 50 лет ты в одиночку 10 этажный дом не построишь
я в целом не понимаю, чем ты питаешься - родители спонсируют на еду? без расчета трудозатрат обеспечивать положительный баланс денег можно только воровством.
Животное 90% многоэтажного житья в постсовке - панельки, которые клали на твоё тепло - ты что н есёшь?
>срок службы у любого дома рассчитывается и планируется - может у тебя на украине не так, и всем похуй на ремонты и никто не чешется, пока подъезд не обвалится, у нормальной системы ЖКХ это всё учтено в бюджетах текущего и следующего периодов
Анука, где нормальная система жкх? Удиви меня, питушок.
>осадка зависит от веса конструкции и почвы, для тебя это не очевидно? какой фундамент ты будешь делать на берегу реки для 10 этажного кирпичного (!) дома? кого посадят, если дом поедет и рухнет в течение года?
Животное упоротое, а так же от площади фундамента. Животное - она зависит не от дома, питух. Раскопал метров на 100 в глубь и 500метров в ширь - захреначил мильярд тонн бетотону - неуедет.
Ты жалкий питушок, который пытается выехать на цитатках из википедии.
>"берешь лучшие материалы - остальное не важно"
>отличная логика - берёшь лучших швейцарских работников, платишь им сотню млн $ - >остальное не важно
>как ты думаешь, почему сейчас не стоят многоэтажных домов целиком из кирпича?
Так ты и съезжаешь на хмл"е. В том и суть - вы все бездарные животные, вы все делаете говно. Строю я, а я строю как хочу. Суть поста не в том, чтобы построить дешевое говно, которое простоит 20лет, а суть в том, чтобы построить.
ты что, даже не можешь себе предположить, что в ссср таки были нормы и панельки за полярным кругом отличались от панелек в сочи?
у тебя прям травма по панелькам
у меня в москве - нормально
вот этим летом подъезд капитально отремонтировали
> мильярд тонн бетона
а за чей счет банкет?
что, строитель-10% уже не может посчитать сколько конкретно тонн и какого размера ему надо делать подушку под фундамент? это же просто
ты хоть понимаешь, каким конкретно образом например строили "кирпичные" высотки в нью-йорке 100 лет назад, что они стоят до сих пор?
ничего общего с "строитель в цикле ложит кирпич в 3-4 ряда"
найди информацию, просветись
Ты анскильный питух, твоё "жил" - мне не интересно. овер 50% панелек в постсовке построены в районе после середины 80-х. Тогда уже никакого совка небыло. Мб первы паре домов.
>у меня в москве - нормально
>вот этим летом подъезд капитально отремонтировали
Покрасили? От чего его отремонтировали?
>что, строитель-10% уже не может посчитать сколько конкретно тонн и какого размера ему надо делать подушку под фундамент? это же просто
Питух, никто ничего не считает. Идёшь тюкаешь молочком по земельке - мериешь углубление и силу удура - считаешь сколько неутрамованная земелька держит. делишь вес конструкции на эту байду - вуаля. Для боковых нагрузок есть сваи, если лениво хреначить гиганский фундамент.
>ты хоть понимаешь, каким конкретно образом например строили "кирпичные" высотки в нью-йорке 100 лет назад, что они стоят до сих пор?
Да, не экномили - строили нормальной кладкой нормальные стены.
>ничего общего с "строитель в цикле ложит кирпич в 3-4 ряда"
Где я такое говорил, сливпитух? Нагло врёшь, говнарь упоротый.
Дом из нормального кипича, с нормальной облицовкой вечен.
ты анскильный питух, твое не интересно мне не интересно
снипы соблюдались и в 90м году
ты просто не в курсе, ишак
это потом уже при ельцине начался пиздец
покрасили, заштукатурили, побелили, стекла заменили, лифты заменили, входную группу, почтовые ящики - достаточно прилично для ремонта за счет ЖКХ
> нью-йорк
поищи любую фотку с небоскребом в процессе строительства
посмотри, что делают до того, как кладут кирпич
>покрасили, заштукатурили, побелили, стекла заменили, лифты заменили, входную группу, почтовые ящики - достаточно прилично для ремонта за счет ЖКХ
Покрасили - копетальный ремонт - питушок. Ящики заменили - неужели, блин - капремонт нахрен.
Перекраска уже капремонтом считается - буду знать.
>поищи любую фотку с небоскребом в процессе строительства
Т.е. ты, анскильное животное, наврало и проигнорило свой слив? Ок. До того как кладут керпичь - кладут керпичь.
Фото в студию, питух.
http://polit.pro/_dr/29/52128540.jpg
даже дети это знают
Эра современных небоскребов началась в 1885 году, когда Вильям ле Барон Дженни возвел небоскреб в Чикаго, штат Иллинойс. Тогда здание было небольшой этажности, всего 10 этажей, тем не менее, это была первая в мире высотка с несущей конструкцией, которая полностью удерживала его вес. К тому же, изнутри здания использовался стальной каркас. Именно с этого дня строительство небоскребов стало развиваться огромными темпами, здания росли в буквальном смысле до небес. Прошло всего 30 лет после возведения первого современного небоскреба, как в мире появились строения уже с 60 этажами
да-да, панелька п44
как раз тогда, когда по мнению питушка уже всё было плохо
но ему то лучше знать
за 50 лет ты в одиночку 10 этажный дом не построишь
Построю. Сколько кубов кладки надо на дом? Посчитай. Куб можно класть, с мотря какой кладки, ну за 3-4часа на среднем скилле. Это в районе 1квадрата хорошей стены за часа 2. За неделькую окольцуешь средних размеров дом на 30-40сатиметров.
Фундамент в некоторых районах вообще нахрен особо не упало строить - за пару лет можно свайки забить и запилть даже руками.
>я в целом не понимаю, чем ты питаешься - родители спонсируют на еду? без расчета трудозатрат обеспечивать положительный баланс денег можно только воровством.
У нас разное представление о мире.
Ах да, почему сишников сейчас нет, а остальные одни заедушные, бесполезные бездарности вроде тебя? Ты дешевый как граязь.
Дураки что ли изобрели железобетон с металлической арматурой и здания на металлическом каркасе?
Ну расскажи, строитель, сколько этажей выдержит твоя стенка.
Он будет строить керпичьную перамиду, как у египтян, чтобы не париться с каркасами.
Да, не умею.
сколько лет прошло, а говно всё не тонет.
И да, Ваш код более походит на C++, чем на JS. Во время изучения (пока Вы не реализуете что-то серьёзное, пока код Ваш не будет поддерживаться другими) следует писать JS-ориентированный говнокод, чтобы лучше познать суть:
зато еще лучше писать что-то вроде
К сожалению, порядок "один, два, много" пришлось нарушить, чтобы не ставить лишний восклицательный знак.
P.S. Если не передавать этой функции строки и другую гадость, которая станет NaNом, то можно ещё (n|=0) заменить на n.
P.P.S. Ни версия сверху, ни эта не возвращают верный результат для отрицательных чисел.
Решение предыдущего оратора просто неправильно решает. (Это тоже решает неправильно, но времени нет доделать). Предыдущий оратор наивно верит в то, что в каждом дне было по 24 часа, не учитывая ДСТ.
Если учитывать ДСТ, то надо тащить с собой всю таблицу этих зон. А тогда проще прицепить готовую либу для работы с датами и не париться...
Имхо, человеку для оценки интервала почти всегда достаточно т.н. "fuzzy clock" - "более 2 месяцев", "полгода", "2 недели", "более часа", "чуть менее 5 минут" и т.п. Один хрен увидев 2 года 5 часов 3 минуты и 5 секунд человек подсознательно округлит это до 2 лет...
А вообще, лучше бы ДСТ отменили. На сколько бы проще жить стало... и не экономит оно нифига, даже в странах, где разница более заметна между зимой и летом.
Лучше бы его вообще не вводили. Теперь вот его убрали, а старые даты все равно нужно пересчитывать с учетом DST.
код в студию, мне охота сравнить
Цари не пишут код в студии
Сохранив в suka.js, запускаем под Node под Windows/Linux/MacOS и, вероятно, Android:
И получаем вывод:
Здесь си тоже использовать уместнее и проще? (перфоманс не требуется)
http://s2.ipicture.ru/uploads/20130703/5NLmsvuF.png
Для интереса проверим браузерный вариант от inkanus-gray на этой странице:
Запускаю прямо тут, в консоли хрома. Получаю результат:
* это первое измерение. результат может становиться в пару раз меньше при повторном запуске, даже если везде добавились "суки" - V8 неслабо так оптимизирует код при повторном запуске.
Думаю, даже нетбук на старом атоме сделает это в <=5 раз медленнее.
Впрочем, код я привёл, каждый может проверить и решить, когда переписать это на си.