Ilya
как только с \r разберусь
Ilya
на 40% ускорил
Aragaer
вим в нижней части где-то пишет, что dos
Dmitry
cat -e | head FTW
Dmitry
сразу видно кракозябры посторонние
Ilya
cat -e | head FTW
спасибо. в референсном выводе (от которого хэш) mygfc5tg3e^M$ у меня: mygfc5tg3e$
Ilya
это значит наоборот \r добавить?
Dmitry
это странно
Ilya
а не, я перепутал местами
Dmitry
dmz@zen ~/tmp/bsfuck $ cat -e x1 | head mygfc5tg3e$ mygfckwam1$ mygfcebk5k$ mygfcfiyee$
Ilya
да-да, это у меня лишние \r значит
Alex
господа, а есть ли какие-либо известные проблемы со space leaks в Text?
Alex
в частности, когда не собираются мусорщиком ByteString и?
Alex
либо в Trifecta
Алексей
Когда делаются маленькие слайсы из больших кусков, они держат весь большой буфер
Alex
а можете глянуть тут например, есть ли навскидку очевидные проблемы https://github.com/idris-lang/Idris-dev/blob/master/src/Idris/IdeMode.hs
Алексей
Так там обычные стринги, которые [Char]
Ilya
В общем если кому интересно, что тут может дать локальность данных, вот измененный код для pypy #!/usr/bin/env pypy import sys w = [l.split(' ', 1) for l in sys.stdin] pref = [x[0] for x in w] suff = [x[1].rstrip() for x in w] chunk = int(sys.argv[1]) def arrange(pref, suff): if len(pref) > chunk: mid = len(pref)/2 arrange(pref[:mid], suff[:mid]) arrange(pref[:mid], suff[mid:]) arrange(pref[mid:], suff[:mid]) arrange(pref[mid:], suff[mid:]) else: for p in pref: print "\n".join([(p + s) for s in suff]) arrange(pref, suff) Вот такая вещь работает побыстрее оригинала на pypy, у меня примерно на 40%, если задать chunk = 1000 (аргумент программы).
Ilya
Старался сделать локальность данных, но хз, что тут реально ускоряет
Ilya
*md5 конечно же не совпадает, если chunk < len(input)
Dmitry
а нельзя как-то сделать, что бы совпадало?
Dmitry
я, наверное, могу написать быстрее, чем у @qnikst с. ну или так же, но меньше кода. но вопрос - надо ли, это же какое-то безумие
Dmitry
FSM + разные блоки фиксированной длины для префиксов и суффиксов. но это ведь уже какое-то навязчивое состояние
Max
Секта микробенчмарка.
Alexander
безумие продолжается https://gist.github.com/normalcoder/91839837070a3ac446c9a7dc71aac160
Dmitry
чо, полсекунды челлендж?
Alexander
пока не дотягивает
Alexander
тут карта смещений, про которую говорил @qnikst
Ilya
0.958 уже взяли?
Dmitry
@kcahek хаскельно, dmz@zen ~/tmp/bsfuck $ time ./offset_map < ./49zGQ6Zt.txt > /dev/null real 0m1.646s user 0m1.644s sys 0m0.000s
Alexander
а какой топовый результат сейчас?
Dmitry
1.008x приблизительно
A64m
тут кто-то собирался на окамле писать, как там успехи?
Ilya
1.008x приблизительно
Это в секундах?
Dmitry
ага
Dmitry
@A64m_qb0 вспоминает окамл, поди
A64m
Я вот либы не помню, но я мягко говоря не великий окамлист
Alexander
а чо-то я пропустил, это какой код 1.008?
Dmitry
ну или предпоследний
Dmitry
а, блин
Dmitry
в смысле, послдений код @qnikst
Dmitry
ада dmz@zen ~/tmp/bsfuck $ time ./special_olimpiade < ./49zGQ6Zt.txt > /dev/null real 1m24.028s user 0m55.284s sys 0m28.736s
Кабачок
у меня получилась в 15 раз медленнее первого пайпай
Alexander
я сегфолт в Haskell коде починю попробую offset-ы зоделать в haskell
Alexander
не хочу больше пилить си пока кто-нибудь процентов на 10-20 не обойдет
Ilya
какие там резервы по оптимизации ещё остались? в сишке
Alexander
выравнивание
Dmitry
@qnikst принято
Alexander
более эффективное копирование
Alexander
cache friendly ness
Alexander
я в это вообще не умею
Alexander
явное sse какие нибудь сплайсы
A64m
@greenest_pig это на чем?
Ilya
в смысле, послдений код @qnikst
вот этот? https://paste.pound-python.org/show/ghuOtpbzd4KN0R7oc7At/
Ilya
1.008?
Dmitry
наверное, да. попозже посмотрю точно скажу
Alexander
да этот
Alexander
явное sse какие нибудь сплайсы
в этой конкретной задаче непрерывые куски по 5 байт, sse кажется не поможет, даже dword за раз копировать смысла нет
Lev
столько энергии потратили, коллективно можно было бы за это время вручную файл рассортировать
Ilya
а вот важный вопрос
Anonymous
запилите репу с трависом
Anonymous
💤
Ilya
гарантируется, что все суффиксы и префиксы одинаковой длины?
Ilya
между собой, в смысле
Ilya
это я на си сел писать... сразу такие вопросы и полезли
Ilya
короче, len(pref1) == ... == len(prefN) ?
Ilya
то есть может быть вход типа aa bb aaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbb
Ilya
?
Ilya
это плохо
eahqzsr
Я смотрю олимпиада продолжается?
分解物質
мой на -O3 быстрее
обновил свой, теперь мой на -O2 тоже быстрее gist.github.com/yellow-apple/69993c04f8d9afc0d72c56f27e55187f
Anonymous
Пришло время мне делать emerge mlton smlnj (и ждать полчаса). SML for the rescue!
A64m
я написал на окамле, это было не сложно
Alexander
не хочу больше пилить си пока кто-нибудь процентов на 10-20 не обойдет
on my machine, так сказать: 1: https://paste.pound-python.org/show/ghuOtpbzd4KN0R7oc7At/ 2: https://gist.github.com/yellow-apple/69993c04f8d9afc0d72c56f27e55187f 3: https://gist.github.com/normalcoder/91839837070a3ac446c9a7dc71aac160 clang -O3 1.c -o 1 && time ./1 < 49zGQ6Zt.txt > /dev/null real 0m1.158s user 0m1.148s sys 0m0.007s clang -O3 2.c -o 2 && time ./2 < 49zGQ6Zt.txt > /dev/null real 0m1.250s user 0m1.238s sys 0m0.008s clang -O3 3.c -o 3 && time ./3 < 49zGQ6Zt.txt > /dev/null real 0m0.867s user 0m0.859s sys 0m0.005s
Alexander
https://gist.github.com/yellow-apple/69993c04f8d9afc0d72c56f27e55187f int bufcap = 120000; char *buf = malloc(bufcap); int buflen; // тут нужен = 0