Aragaer
а у меня входной файл почему-то 20 тысяч
a66ath
Скиньте версии, соберу в одном месте
Alexander
https://pastebin.com/E7gVniNe
Alexander
моё
Alexander
из оптимизаций только strlen убрать можно наверное за счет массивов длин получаемых при токенизации
Aragaer
https://gist.github.com/aragaer/43300249f0c4ec4f175361d753001efe
Alexander
из корректности - убрать константы и макс размер данных под файл и макс кол-во строк
Aragaer
тупо в лоб. Чтение ммапом, писать можно как-то с буферами, но я не заморачивался
Dmitry
но это не тот код
Dmitry
stdin, stdout ?
a66ath
@voidlizard а где твой хаскель?
Alexander
мой найди где-то выше
Alexander
v-stream
Aragaer
у меня файлы приходят через argv. Хотя можно второй через stdout
Alexander
@aragaer без файлов plz
Dmitry
ну тогда разное сравниваем, смысл?
a66ath
@qnikst нашел уже
Alexander
stdin и stdout
Aragaer
через stdin сделать можно, просто надо будет приписать код выделения памяти
Aragaer
ок
Alexander
ну просто если есть файл то и в haskell-лях можно его mmap-нуть или stat + прочитать в байтостроку
Alexander
@voidlizard кстати у @aragaer аналогично последнему моему haskell-лю
Dmitry
ага, я вижу
Alexander
где каждый раз заново парсится
Dmitry
но
Dmitry
тормозит-то блин не парсинг!
Alexander
угу
Alexander
тормозит Io, тут тоже будет
Alexander
т.к. write-ы мелкие
Dmitry
вот у меня 0.029 результат
Dmitry
без выхлопа
Dmitry
4 секунды - с выхлопом
Dmitry
сейчас прикручиваю буферизацию
Alexander
особенно по 1 символу
Alexander
прикрути как у меня
Dmitry
ну вот у меня тупо читает по одному символу
Alexander
вроде халявно получилось и корректно
Alexander
разве что честную функцию для дампа
Dmitry
да, щас попробую
Alexander
(щас запилю)
a66ath
Написал тупо на крестах, 2 секунды
Dmitry
2 секунды на написание?
a66ath
Работает 2 секунды
Dmitry
а. ну это непонятно на чём, давай ссылку на код ну или сравни с pypy вариантом
a66ath
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main(){
string a, b;
list<string> as;
list<string> bs;
while (cin){
cin >> a >> b;
as.push_back(a);
bs.push_back(b);
}
string megastr;
megastr.reserve(as.size() * bs.size() * (a.size() + b.size()));
for(const auto& a : as) {
for(const auto& b : bs){
megastr += (a+b);
}
}
cout << megastr;
return 0;
}
a66ath
Бля
Alexander
@voidlizard во 1с
Alexander
с честным дампом, щас ещё честное чтение запилю
a66ath
Добавил переносы строк и тормозит
a66ath
2.45
Alexander
а сколько питон?
Alexander
pypy
a66ath
Где питонокод?
Alexander
ох.. надо сервис для таких вещей
Alexander
там где-то выше, смотри начало сегодняшней дискусссии там ссылка на вчерашнее сообщение
Aragaer
сделал с stdin, stdout
Aragaer
тут уже на самом деле можно использовать буферизацию вывода, но пока не трогал
Anonymous
таккк
Anonymous
сколько строк в результате должно быть
Aragaer
https://gist.github.com/aragaer/43300249f0c4ec4f175361d753001efe
Anonymous
Aragaer
входной файл 20тыс, значит выходной 400млн
a66ath
В гисте?
Anonymous
10тыс же
Anonymous
Anonymous
во входе
Alexander
@iamweasel не, на wgetpaste было
Dmitry
я с этим мемувом постоянно ошибаюсь
Alexander
@voidlizard померяешь вариант @aragaer ?
a66ath
Dmitry
меряю
Aragaer
а, 10 тыс строк, 20 тыс слов
Aragaer
ща
Dmitry
кранты
Aragaer
готово с буферизацией
Dmitry
30 секунд и хочет умереть
Dmitry
я не то меряю?
a66ath
Версию на питоне дайте эталонную
eahqzsr
Чисто в памяти низя строку генерировать. Должно работать на файликах с миллионом строк.
Aragaer
https://gist.github.com/aragaer/43300249f0c4ec4f175361d753001efe - вот все