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