Chat:Ru/2020-05-25
BorisZ: допилили бы чтоб как в спунке было - указал диапазон лидерборда и все
tutubalin: а вот щас, когда флеш мёртв, на чём теперь визуализаторы быстро делать?
tutubalin: на Unity?
qbit86: Флэш мёртв, но Blazor/WebAssembly продвигают.
wlesavo: tutubalin на гиф анимации кадров :slight_smile:
qbit86: Можно на SVG. Нет, правда!
Uljahn: Qt?
tutubalin: ага, сперва кути, потом генту, потом 9000 сообщений в чатике
tutubalin: wlesavo в гифки код не вставишь. флеш был хорош именно тем, что на нём можно было очень быстро нарисовать симпатичный UI и сделать его интерактивным
735487: рисуешь гифки а интерактив через JS )))
tutubalin: во флеше хорошая композиция была. можно было в один клип (например форма) засунуть другие клипы (кнопки, инпуты), в которых ещё клипы (украшалки, бахрома, свистелки, перделки)
BorisZ: надо то сетку нарисовать просто, в каждую ячейку картинку да 2-3 лейбла и на мышь он ховер - доп текст рядом
tutubalin: и все размеры, позиции можно было настроить в графическом редакторе без кода
BorisZ: можно хоть на tkinter намутить
tutubalin: ещё там кадры были. очень удобно для смены состояний. рисуешь в первом кадре крестик, во втором нолик, в третьем пусто. потом код выбирает, какой кадр показать. и не надо никаких фрейммэпов
tutubalin: короче, такую технологию прокакали...
tutubalin: Uljahn если загуглить PyAsm, можно найти несколько одноименных проектов, позволяющих запускать буфер с бинарником или прямо в питоне писать на ассемблере
Uljahn: один очень старый, второй под винду
Uljahn: да и не актуально это всё, есть же нумба, цитон
tutubalin: а на CG их можно использовать?
wlesavo: у вас не подлагивает сайт? как будто страницы очень медленно загружаются
wlesavo: ух, зарерайтил gitc мож наконец запромоучусь, была одна из первых мульти которые пробовал, наверное вторая после батл рояля
wlesavo: но смотреть страшно конечно было че там нагорожено
Uljahn: жиза
Uljahn: именно поэтому страшно во многие мульти возвращаться)
Uljahn: если только всё удалять сразу
Egrace: у меня норм, не лагает ничего
wlesavo: ну я примерно так и сделал, поудалял все
Egrace: кста, а вы тесты пишете? например, на симулятор вполне актуально по-моему
wlesavo: я ассерты вставляю, полноценные тесты пока как то не, на контесты может имело бы смысл, а так у меня не тот уровень коммитмента
Uljahn: мда, сайт ощутимо подлагивает
Uljahn: я в дебаг вывожу результаты тестов, которые просто проверить руками
wlesavo: сабмиты тож
Uljahn: опять чат сломался
wlesavo: изменения на промоушен: dist = dist-1
Uljahn: изи топ
wlesavo: баг был что изза этого дискаунт не правильно считался и мог отправить всех с базы прямо перед прилетом врагов
wlesavo: мид сильвер, норм, можно чето пробовать
Uljahn: тестирую Numba на Horse Racing Duals, взял из последнего теста несколько тысяч значений, замутил разные варианты полного перебора без сортировки на питоне, numpy и numba: в итоге numpy с векторизацией в 10-15 раз быстрее питона, а numba ещё в 10-15 раз быстрее numpy, т.е. в 150 раз быстрее наивного питона при том же коде. Единственное - заменил список на нумпай-массив и прописал сигнатуру в декоратор, чудеса
[CG]Thibaud: test (privet)
Beard: Privet, [CG]Thibaud
[CG]Maxime: ok [CG]Thibaud
Uljahn: testing Automaton2000
Automaton2000: я хз как это можно сделать
inoryy: нет
inoryy: а блин херасе проскроллило
qbit86: [CG]Thibaud Hi, Thanks a lot for deploying .NET Core! Guys here were just discussing Numba — could you please add it too? (I don't know what that actually means since I'm not a Python guy, but anyway?)
Uljahn: maybe it would be easier to add it to tech.io first and make a playground to test it
Uljahn: basically it's a package similar to numpy
Uljahn: brining JIT (and AoT) to python could be a game changer
tutubalin: Uljahn ещё надо бы сравнить с PyPy
BorisZ: пайпай - это отдельный компилятор, надо добавлять отдельный язык, а нумба просто либа, все равно что нумпай, хочеш юзай хочешь нет, поверх сипайтона ванильного
Uljahn: лучше с плюсами сравнить, нужен желающий запустить последний тест из horse racing duals без сортировки, у меня 7 секунды получилось на стареньком ноутбучном i7
Uljahn: 7-7.4
BorisZ: причем часть кода будет интерпретатор, а то что выделишь - скомпилируется, там есть ограничения, не со всем сможет работать, ей типы надо суметь выделить
Uljahn: дык главное - всякие циклы ускорить, которые не векторизуются через numpy
Uljahn: с хитрыми условиями
Uljahn: я просто в шоке, как один декоратор позволяет обычному питон коду обгонять numpy
Uljahn: хотя, возможно, что это лапки не из того места
tutubalin: BorisZ PyPy вроде меньше изменений код требует
BorisZ: очень может быть, я одинаково плохо разбираюсь и втом и в другом, на уровне прочитал заглавную страницу мануала
BorisZ: ключевое отличие именно в том что pypy надо будет как отдельный язык добавлять
BorisZ: а на КГ с этим жуткая проблема
BorisZ: а numba просто пакет дополнительный, сам язык остается cpyton как и было
Uljahn: +
Uljahn: больше всего модификаций кода требует cython, pypy - это просто другая реализация интерпретатора: более шустрая, но и менее совместимая
Uljahn: для numba модификация кода только в использовании декоратора заключается, как с cProfile
tutubalin: но зато будет видно, кто честно на питоне фигачит, а кто JIT использует )
tutubalin: а почему с добавлением языка проблема?
tutubalin: вот на https://tio.run/ особо не парятся )
BorisZ: у них бэкенд - монолит, который работает с нулевых готов, когда еще не было ни докеров ни прочих кубернесисов
BorisZ: *с нулевых годов
BorisZ: а переписывать видимо не выгодно
Uljahn: ага, самописное решение, оттуда и проблемы при обновлении языков, когда отваливается не в том месте, которое обновляли)
Uljahn: переписывают же, вон tech.io запилили, там всё по уму, как говорят
BorisZ: https://www.codingame.com/forum/t/python-and-jit-compiler/184919
BorisZ: написал с помощью гугла и такой-то матери, ставьте лайки и подписывайтесь
ilt: выжал 4-5к полных роллаутов на 2 ходе джава
ilt: есть подозрение что это максимум
Uljahn: BorisZ: спасибо, у меня бы получилось хуже (и медленнее)
Uljahn: ilt: битборды используешь?
ilt: да
qbit86: BorisZ Надо заменшнить кого-нибудь из разрабов. Тот же [CG]Thibaud обычно отзывчивый.
qbit86: Чтобы навязать персональную ответственность :)
ilt: около двадцати операций идет обработка одного хода
Uljahn: [CG]Thibaud же коммьюнити менеджер
qbit86: Uljahn Вот он пусть и пропихивает дальше по цепочке.
Uljahn: ilt: а дерево строишь или пока только роллауты?
ilt: ноды друг за друга цепляются
ilt: по сути да дерево
Uljahn: эм?
Uljahn: ты по ходу дела создаёшь ноды?
ilt: нет вначале
Uljahn: а, тогда ладно)
Uljahn: а что за ноды, если по сути дерево? у тебя не MCTS что ли?
ilt: MCTS
Uljahn: значит и UCT формулу используешь
ilt: да
Uljahn: там корни и логарифмы, ты их кешируешь?
Uljahn: или каждый раз считаешь?
Uljahn: всё что можно надо пытаться посчитать в первый длинный ход
ilt: не кеширую
Uljahn: потом ещё на джаве очень медленный рандом, говорят
ilt: это добавлю
ilt: рандом у меня переписанный
ilt: роллауты 80% времени занимают
ilt: логарифмы и корни немного добавят
qbit86: Что такое роллаут?
ilt: плейаут
Uljahn: симуляция игры до терминального состояния
Uljahn: рандомный роллаут - когда игроки делают рандомные ходы
qbit86: А, ок, спасибо.
Uljahn: пока игра не закончится
dbf: ilt, надо разгонять, чтобы 20к было на 2-м ходе :)
ilt: dbf у тебя сколько?
dbf: скачет 15-30, на втором порядка 20
dbf: скорее даже 25
ilt: а сколько у тебя операций уходит на один случайный ход
ilt: ты битборды используешь?
dbf: да, но достаточно коряво
tutubalin: BorisZ "regular Python cycles" - тут лучше loops
dbf: у меня 4 инта для доски маленькой
dbf: но рандом, действительно лучше заменить сразу на SplittableRandom, у него тот же апи
dbf: https://en.wikipedia.org/wiki/Xorshift еще быстрее, но разница уже не так велика
ilt: у меня если исходить из 30к роллаутов генератор за 20 мс их выдает
tutubalin: https://www.pcg-random.org/
ilt: в смысле 2.4m случайных чисел
YurkovAS: dbf 4 инта для 1 минидоски? :smiley:
Uljahn: :thinking:
Uljahn: там же 2х9=18 бит, округляем до 32, не?
YurkovAS: я так понял, что 4 x int
735487: и еще для одного игрока забыли ))
tutubalin: у меня 9 + 16 + 16 бит для обоих игроков
tutubalin: в смысле 9 общих бит + по 16 на каждого игрока
735487: а почему 16? мало же
tutubalin: это на минидоску.
735487: там же 9 клеток
tutubalin: 9 бит - это занятые клетки
tutubalin: 16 бит - это по два бита на линию (количество "своих" значков на линии)
735487: пипец хитро как. не переусложнил?
tutubalin: не. там как раз всё очень просто получается. сложением и битовыми операциями почти моментально определяю, получилось 3 в ряд или нет
735487: можно просто уложиться в 36 бит и хранить значения ячеек
tutubalin: а как ты делаешь проверку на 3 в ряд?
735487: получилось 3 в ряд или нет кешируется и все
tutubalin: в смысле все возможные исходы хранишь?
735487: да
Uljahn: заранее рассчиываешь все три-в-ряд и в LUTе отмечаешь
735487: их не так уж и много
tutubalin: хитро! чо-то я не додумался до такого )
Uljahn: LUT на 512 элементов, проверка по индексу
tutubalin: век живи, век учись )
tutubalin: а я думал, у меня суперпупер ноухау )
Uljahn: по-моему, это не обсуждают, потому что все уже знают
Uljahn: оказывается, не все)
Uljahn: полезно иногда пройтись по основам
735487: выдам еще одну фичу хотите?
ilt: не все тут постоянно тусят
ilt: хотим
735487: кешить корни и логарифмы можно небольшое число. 1000 у меня
tutubalin: у меня вот так: http://chat.codingame.com/pastebin/8b102294-446a-408b-b7c1-f4326c8d67f7
YurkovAS: amurushkin а остальное по формуле? супер быстрой?
735487: визиты с таким числом редки и их можно посчитать налету. а меньший размер кеша на них дает прирост
735487: YurkovAS: да у меня ифается либо посчитать либо с кеша взять
735487: на удивление это дало где то 5к роллаутов кажется. ну не меньше 2-3 точно
tutubalin: у меня есть массив масок: какая клетка на какие линии влияет. просто прибавляю это маску к уже имеющемуся 16 битному числу.
tutubalin: когда получается три в ряд, это значит два соседних бита стали единичками. побитовое И само с собой со сдвигом найдёт такие места
735487: просто смотри у тебя когда ты роллауты делаешь сколько операций уходит на то чтобы занятые клетки помечать?
Uljahn: а, это как в мануале на ютубе по битбордам?
Uljahn: хитрые масочки
tutubalin: пока не делал замеры
735487: ну причем тут замеры. просто по коду даже если смотреть
735487: у меня это просто одна битовая операция
tutubalin: у меня тоже
tutubalin: занятые клетки отдельно хранятся
735487: так у тебя еще и считать количество надо
Uljahn: блин, у меня сдвиг ещё, надо срочно переделать
tutubalin: есть битовая маска занятых клеток, есть битовая маска (точнее двухбитовая) количества значков на линии
735487: ну вот для меня это уже звучит как много операций чтобы ходы делать
tutubalin: первая определяет, куда можно ходить, вторая определяет, победили ли на доске
tutubalin: ну да, про кэш я вобще не подумал
tutubalin: реально тема
Uljahn: amurushkin: я уже кажется спрашивал, как быстро найти валидные ходы?
tutubalin: и да, вроде избавляет от сдвига
735487: сейчас гляну
735487: они предрасчитаны тоже
Uljahn: а то я большой массив использую на 2**18, в нём храню индексы сободных клеток, пипец как неэффективно :(
735487: http://chat.codingame.com/pastebin/239f76f3-332d-40d1-bcd3-d6099f852e12
Uljahn: т.е. это для одного игрока
735487: это для миниборды пофиг для какого игрока
Uljahn: а, мы обоих игроков сначала объединяем по или
735487: да
Uljahn: потом лукап, спасибо
YurkovAS: amurushkin int-ы а нет int8. везде стараюсь по минимому юзать, правда компилятор пишет часто, что +- кастуют к int-ам
Uljahn: там ещё выравнивание :smirk:
tutubalin: uint_fast8_t
YurkovAS: вот да, надо изучить тему, почему +- кастует к int-у. и про выравнивания
tutubalin: потому что иногда процы быстрее работают с 32-битными числами, чем с 8-битными
YurkovAS: tutubalin typedef unsigned char uint_fast8_t; думаешь оно быстрее будет? надо ASM добавлять, на питоны)
tutubalin: насколько я понимаю, конкретное определение uint_fast8_t зависит от целевой платформы
kotobotov: на сколько я помню с 8 битными числами процессор и не работает
kotobotov: типа выравнивают их до 32 (чаще до 64), и уже с ними типа работают
Uljahn: да и в линии кэша тоже не по 8 бит данные копируются
kotobotov: Уль, ву
kotobotov: Уль, ну че там? нагибаешь в соревнованиях
Uljahn: нихрена
Uljahn: обленился как кубер
Uljahn: тот хоть с нейросетками балуется, в дискорде накидал своих проделок
kotobotov: карьеру строить надо
kotobotov: типографию то наверно закрыли сейчас?
kotobotov: пора уже вОйти войти
tutubalin: ну вот я тут недавно попал. тип функции случайно написал uint16_t вместо uint64_t, а потом делал арифметику с uint64_t
tutubalin: компилятор мне навставлял MOVZ, чтобы 16 бит перевести в 64