Ilya
как только с \r разберусь
Ilya
на 40% ускорил
Aragaer
вим в нижней части где-то пишет, что dos
Dmitry
cat -e | head
FTW
Ilya
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 + разные блоки фиксированной длины для префиксов и суффиксов. но это ведь уже какое-то навязчивое состояние
Ilya
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
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
какие там резервы по оптимизации ещё остались? в сишке
Anonymous
Alexander
выравнивание
Dmitry
@qnikst принято
Alexander
более эффективное копирование
Alexander
cache friendly ness
Alexander
я в это вообще не умею
Alexander
явное sse какие нибудь сплайсы
A64m
@greenest_pig это на чем?
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