Anonymous
запили таблицу
Alexander
у @voidlizard чуть больше полутора секунд
Alexander
причем версия haskell почему-то лидируе
Dmitry
ща заинлайню пойду всё
Dmitry
а, уже нечего инлайнить блин
Alexander
что меня несомненно радует, но удивляет
Anonymous
я чет не понимаю почему хешсумма не совпадает у моего варианта
Alexander
diff -ubw и hexdump -c помогают
Dmitry
@qnikst оно, у меня, кстати, течёт - лень чистить
Dmitry
@anarchostatist префикс с суффиксом перепутал, \r впилил
Anonymous
О
Anonymous
спасибо
Alexander
почему моя сишная версия настолько проигрывает...
Anonymous
вообще хз откуда там ретурн
Alexander
это ж почти на четверть..
Alexander
return из строки
Alexander
файл в виндовых переносах
Alexander
@voidlizard у меня часть до вывода занимает 0.00 по словам \time
Alexander
ринг буффер чтоли твой впилить
Dmitry
мой тормоз
Dmitry
не впиливай
Dmitry
максимум dump сделай как у меня
Dmitry
он абстрагирован
Dmitry
(не тредсейф!)
Dmitry
но у меня сишный код поход похож на настоящий - там настоящий парсер, списки, которые до кучи еще реверсятся
Dmitry
и токены переменных размеров
Dmitry
так что можно углы еще посшибать, наверное
Alexander
аа я не понимаю как dump работает
Dmitry
который?
Dmitry
твой?
Dmitry
смотрит можно ли пихнуть символ, если нельзя - то дампит буфер, перематывает указатель назад и добавляет символ
Alexander
твой
Alexander
мой, я понимаю
Dmitry
есть флаг который заставляет его безусловно сдампить
Alexander
я ж поидее тоже самое делаю?
Dmitry
ща гляну
Dmitry
у нас наверное dump разное делает
Dmitry
у меня он пишет символ в буфер и если буфер полон - то дамп
Dmitry
а у тебя он делает дамп, а с буфером ты там во всех местах что-то страшное делаешь
Alexander
у меня смотрит есть ли место в буффере, если нету - то делает дамп, и пытается пихнуть снова
Dmitry
я не то смотрю, что ли
Dmitry
void dump(char *buffer, int size) { while (size>0) { int w = write(1, buffer, size); buffer+=w; size-=w; } }
Alexander
сам dump у меня это тупо флаш буффера с проверкой того сколько реально записалось
Anonymous
#include <string.h> #include <unistd.h> char buf[10000][2][6]; char obuf[110000]; int main() { read(0, buf, sizeof buf); char *o = obuf; for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { for (int n = 0; n < 5;) *o++ = buf[i][0][n++]; for (int n = 0; n < 6;) *o++ = buf[j][1][n++]; } write(1, obuf, 110000); o = obuf; } return 0; }
Anonymous
попробуйте вот этот вариант на си
Anonymous
там мб тоже наоборот префиксы и суффиксы правда
Alexander
@anarchostatist нет, тут константы захардкожены
Dmitry
ну нет. хардкоды размеров
Anonymous
лол
Anonymous
бля
Alexander
@voidlizard тот код это просто проверка что write успешно записал все
Alexander
если не все записал, то пишем остаток
Dmitry
@anarchostatist ну а что, с хардкодами кто угодно напишет
Alexander
поиедее на это забить можно
Кабачок
А какой там средний размер строки?
Dmitry
нафиг я тогда там ад разводил со списками на списках, если можно всё захардкодить было бы?
Alexander
@greenest_pig в тестовом файле всегда 5
Кабачок
13 байтов на строку значит, 5 слово, пробел, 5 слово, перевод строки (\r\n) ?
Alexander
@voidlizard c dump понятно?
Dmitry
ну твой дамп я понимаю
Alexander
@greenest_pig да, но можно подавать любые размеры и отсутсвие \r
Alexander
@voidlizard дальше у меня там где goto
Dmitry
@qnikst я е понимаю memmove
Dmitry
ну те примерно понимаю, но без деталей
Alexander
проверяем есть ли место, если нету то дамп, иначе копируем в буффер строку и идём далььше
eahqzsr
на таких быстрых реализациях нужно файл больше брать
Alexander
ну пока они ещё отличаются достаточно
Dmitry
@qnikst ну ок, а с моим-то что непонятно, он же примитивный вроде совсем?
Aragaer
тыц
Aragaer
ща починю там совсем косяки
Dmitry
пищем по символу, если некуда писать - то дампим что понаписали, ставим указатель на начало буфера и давай по-новой
Alexander
@voidlizard кстати memmove то может быть тут не выгоден, тут строка 5 символов
Alexander
действительно
Alexander
особенно если glibc с debug
Aragaer
гы, запутался уже в именах переменных
分解物質
оказалось
Alexander
у меня было опыт контеста на лоре где с ручным быстрее
Leonid 🦇
Alexander https://github.com/sopvop/bytestring-flatmap если ещё надо. Чат не читал, вы тут аж 700 мессяг написали.
Alexander
@lonokhov тут c, c++ сейчас