Chat:Ru/2021-02-09
MadKnight: типа что-то поинтереснее не прикручивается к apache
MadKnight: я чё, написал "с начальником" ?)
MadKnight: ужс
MadKnight: не с моим начальником
MadKnight: и просто тимлид
MadKnight: неважно
MadKnight: Automaton2000 забудь
Automaton2000: ты в цикле делаешь проверки условий, генерируешь строку для вывода и выводишь? а кто координаты Тора обновлять будет? в плеере ...
MadKnight: как вообще огромные проекты переносят со старых технологий на новые?
MadKnight: чтобы не всё разом, а чтобы постепенно и безболезненно
magaiti: инкапсулируют
MadKnight: что в кого
magaiti: и переписывают по частям
magaiti: части проекта
magaiti: в максимально независимые компоненты
MadKnight: а если это хтмл пхп и апач?
MadKnight: у всяких модных жс фреймворков же у всех свои сервера
MadKnight: которые идут вместо апача
MadKnight: magaiti
depthzer0: amurushkin тоже в этом направлении пока двигаюсь
depthzer0: Uljahn не очень владею терминологией. Когда говорят эвристики - это что имеют в виду? От балды?
depthzer0: MadKnight ну конечно на питон переезжайте
мамонта едят по частям, надо выделить часть функционала огромного проекта и реализовать его в новом, и так много раз
Uljahn: depthzer0: да, условия на основе интуиции, куча if'ов
depthzer0: amurushkin "у топов были симуляции" - тоже не очень понимаю. Симуляции - это значит они у себя сделали такие движки локально?
Uljahn: кнш, тут физики нет, только коллизии, да и то простые
depthzer0: ну да.... но что им эта симуляция даёт?
я могу сделать симуляцию и на ней те же ифы потом заюзать
depthzer0: или что?
YurkovAS: симуляция значит - что в боте можешь сделать любой их доступных ходов и потом посмотреть что будет
Uljahn: можно перебрать варианты хода и как-то оценить их
depthzer0: а.... в том смысле, что они сделали не только или столько локально симуляцию, сколько в голову ботам, чтобы они могли просчитывать
YurkovAS: например сделать перебор всех доступных ходов на текущем первом уровне и потом добавить их оценку по получаемому состоянию игры
YurkovAS: и выбрать лучшй ход
depthzer0: понятно
depthzer0: спс
YurkovAS: а дальше делают оценки глубже, после себя, ходят за противника и выбирают уже лучший для него ход - может он тебя потом выйграет вообще.
Uljahn: это уже уровень леги
YurkovAS: и т.п. и получится минимакс
depthzer0: :thumbsup:
Uljahn: для начала надо научиться королевой уклоняться от врагов, а постройки можно захардкодить
YurkovAS: Uljahn можешь подсказать по минимаксам?
Uljahn: я видел вопрос про transposition tables
Uljahn: думаю, они эффективны в играх, где стейты часто повторяются
Uljahn: типа шахмат
miklla: типа dots and boxes :)
YurkovAS: а нам же еще надо делать iterative deeping?
Uljahn: угу, чтобы не таймиться
miklla: там только есть один подводный камень
YurkovAS: т.е. завести цикл с какой глубины и для каждой потом запускать миник?
miklla: не забудь, что во многих играх кешированная позиция могла быть достигнута на другой глубине, чем ты сейчас, иногда это всё ломает и надо быть аккуратным
YurkovAS: например с глубины 2, потом 3, потом 4 - но случится таймаут, тогда для 4 результат не берем?
Uljahn: если не успели глубину досчитать, то берём с предыдущей
YurkovAS: зачем нужена эта table? там делаю хеширование состояния и для него хранят что-то? типа какой там скор
Uljahn: чтобы заново не оценивать, наверное
YurkovAS: и для этого deeping оно типа дает прирост, т.к. до этого считали?
YurkovAS: и при следующем тике игры, мы же опять будет одно и тоже считать
YurkovAS: так же или нет? не пойму
miklla: можно и последнюю глубину использовать, например с предпоследней глубины первые ходы были упорядочены по оценке №1, №2, №3, .., а ты насчитал в последней глубине и оказалось, что №2 круче номер №1, а в №3 таймаут, тогда лучше выдать ход №2
Uljahn: вот про упорядочивание важная тема
Uljahn: вроде бы, оно как раз даёт прирост в альфа-бете
YurkovAS: получается при упорядочивании использовать именно TT, а не свое? это тоже не понял, сделал свое упорядочивание
YurkovAS: и еще вопрос, как его вообще запускать? вот пример, PVS and Aspiration https://www.chessprogramming.org/Principal_Variation_Search
YurkovAS: Call from root:
rootscore = PVS(-infinite, infinite, depthleft);
miklla: ты сначала минимакс пойми, потом альфу-бету, а потом можешь и глядеть на нулевое окно из ссылки
YurkovAS: но нам же это не подходит, т.к. возвращают оценку а неход
YurkovAS: miklla а как запускать, сделать аналогичную фукцию, но чтобы возвращала Move вместо int?
miklla: я просто score храню в позиции, а не отдельно
miklla: тогда после обсчёта можно по детям просто пройтись
YurkovAS: не понял
miklla: ну границу score
YurkovAS: не понял где храниш
Uljahn: в стейте?
miklla: а там, можно сделать так, чтобы функция возвращала 2 объекта, score и указатель на лучший ход
miklla: ну ща точно проверю свой тарый ход
miklla: старый
YurkovAS: получается сделал копию функции только для первого хода и она возвращает Move вместо int ни где в примерах этого не встречал
Uljahn: можно применить ходы к руту и из них запускать обычную функцию, получить инты и выбрать лучший ход, то же самое почти
Uljahn: из них - из полученных стейтов
miklla: в одной своей реализации я вижу, что функция всегда гарантировала, что в списке детей лучший ребёнок - первый
miklla: ща вторую гляну
YurkovAS: Uljahn понял, ну значит это правильно делаю - все по аналогии с основным алгоритмом, только результат в другом виде
miklla: да, во второй то же самое
YurkovAS: miklla это про сортировку же?
miklla: не надо к детям рута применять, это ухудшает всё
miklla: во второй реализации я натурально сортировал, так как детей всегда было не больше 4, а в первой просто гарантировал, что первый - лучший
miklla: там было много дете
miklla: й
YurkovAS: т.е. у тебя нет этих TT, а сортировал по своей оценке "вручную устанавливал"?
miklla: есть
miklla: не понял, чем ТТ мешают сортировке
miklla: просто указатели на детей хранятся в каком-то порядке
YurkovAS: да я не понял что за ТТ, просто. запрогал игру, а бот очень плохо играет. баги все пофиксил
Uljahn: а как ты гарантировал? очередь с приоритетом или типа того?
miklla: топорно, когда находился новый лучший ход, я свапал первый и второй, а потом лучший с новым первым
miklla: можно было изящнее, конечно
Uljahn: хм, логично
YurkovAS: т.е. у тебя есть массив лучших ходов?
miklla: так получалось, что первый точно лучший, а второй неплохой, наверняка можно было ещё лучше сделать упорядочивание
miklla: нет у меня массива лучших ходов
miklla: есть массив/список детей
miklla: у каждой позиции
miklla: и он как-то упорядочен
miklla: точнее массив/список указателей на детей
miklla: когда в ТТ находится такая же позиция, я просто вставляю указатель из неё
miklla: в список детей
YurkovAS: в общем, потом нашел противника, у него вроде тоже миник на такую же глубину, но играет гораздо лучше - значит проблема еще в оценочной. наверное правильнее ее сначала пофиксить, а потом уже ТТ и прочее смотреть - т.к. они помогают глубже смотреть
miklla: сначала просто минимакс делай с норм оценочной, а только потом можно приступать к изучению всяких альфа-бет, если с ними не имел дел
YurkovAS: понял, спасибо. я только минимакс понимаю - т.к. это полный перебор альфа-бету уже нет
Uljahn: альфа-бета - это оптимизированный полный перебор
Uljahn: результат точно такой же, что и у полного, но заведомо плохие ветки обрезаются
YurkovAS: а этот iterative deeping - правильно же юзаю? цикл по макс глубинам, и результат берем только от отработавшей без таймлимитов?
Uljahn: miklla говорил же, что если у тебя ходы упорядочены, то высока вероятность, что найденный первый потомок на незаконченной глубине будет лучшим, если это гарантируется алгоритмом :thinking:
miklla: а если не упорядочены, то да
miklla: но для альфа-беты будет полезно упорядочивать потом
Uljahn: угу
Uljahn: спс, кое-что тоже прояснилось
YurkovAS: Uljahn ну хорошо что ты понял, подскажешь потом, если что...
tutubalin: Uljahn читак! задачу недели через eval решил
Uljahn: я знаю, что eval зло, но это же просто пазл
tutubalin: с этого всё и начинается )
Uljahn: что начинается? я ж не кодер, с продакшном и юзер инпутами дел не имею )
Uljahn: но вообще да, надо было коммент написать, что это плохая практика
tutubalin: да не, решение прикольное :)
tutubalin: просто читерское )
Uljahn: мне в комментах писали, что scipy импортировать - тоже чит
Uljahn: может надо было сразу на С писать
Uljahn: только я питон не для того выбрал, чтобы игнорить батарейки, а наоборот как раз
tutubalin: я ж по-дружески потроллил просто
735487: я какой то пазл на джаве решал и в ней вызывал интерпретатор javascript или что то такое кажется. через жопу но работало и не надо было самому парсить :) там что то типа калькулятора было
magaiti: первый компилятор лиспа был написан на интерпретаторе лиспа
magaiti: и потом откомпилирован а самом себе
MadKnight: ну почему бы и нет
MadKnight: компилятор - этож просто генератор бинаря
magaiti: сделал ваш пазл недели
magaiti: такая мутотень на плюсах
magaiti: 68 строк :sweat_smile:
depthzer0: прочитал сначала "символов"...
magaiti: хорошо что не файлов
depthzer0: :scream:
YurkovAS: тут пазлы сложнее, чем мульти. это про резисторы? надо попытаться решить, врода даже знаю каким алгоритмом
Uljahn: мой "читерский" "алгоритм": заменить скобки на имена соответствующих функций, подставить инпут и вычислить строку через eval :)
magaiti: однопроходный парсер с рекурсивным аккумулятором
MadKnight: у меня кстати мода забрали
MadKnight: ну бывает
MadKnight: зато теперь всех спамить в лс могу
magaiti: ты слишком мэд
magaiti: вот и забрали
MadKnight: да ваще
MadKnight: а, он пишет я просто слишком долго отсутствовал когда систему прав мода переделывали
MadKnight: туда всех заново надо было добавить
magaiti: https://www.codingame.com/replay/525296510
magaiti: явно баг, раннер застрял на границе чекпоинта
magaiti: может пофиксить, глядишь заимпрувлю
MadKnight: может
MadKnight: я вон вообще 595 радиус чека сделал
magaiti: хмм, да у меня тоже так, но что-то не срабатывает
MadKnight: значит у тебя уже серьёзный баг
MadKnight: интересно какой
MadKnight: magaiti го тебя тоже модом сделаем
magaiti: нее
MadKnight: почему?)
magaiti: зачем мне лишняя ответственность
MadKnight: да ты впишешься
magaiti: я не хочу вписываться в сомнительные мероприятия
MadKnight: Uljahn вписался вон
MadKnight: и ему норм
Uljahn: я не вписывался
Uljahn: меня вписали
MadKnight: ужас
Uljahn: мало того, что ответственность, так ещё и дёргаться приходится постоянно
Uljahn: и платят мало
MadKnight: а сколько?)
magaiti: вам еще и платят?
MadKnight: ну выпишись
magaiti: по 10 копеек за бан?
Uljahn: за спасибо работаем :(
magaiti: спасибо хоть вовремя выплачивают? аванс, получка
Uljahn: пока ещё ни разу не получал
depthzer0: странно что баны не оплачивают.... это же стресс всё-таки.
могли бы полсотни евро накидывать
Uljahn: есть пара плюсов - доступ на модерский канал в дискорде и в админку форума, статистику зырить
Uljahn: после кика или бана могут начать в личку спамить, в чатике защиты от этого нет :(
depthzer0: вот и я о том
depthzer0: а так бы 50 евриков душу согрели
depthzer0: он тебя матами перематами, а ты ему фоточку полтосика ))
magaiti: хмм, а откуда у меня в истории кода гоночек код за 11 дней назад, я вроде 4 месяца не ресабмитил
YurkovAS: ты точно сабмитил, смитс был на твоем месте, до твоего сабмита
YurkovAS: у меня радиус чекпоинта 598. помню что с другими значениями было только хуже
magaiti: сабмитил смитс
magaiti: а я поигрался с параметрами в иде и забил
YurkovAS: тестирюу обычно в брутал тестере локально или в cg-bench
YurkovAS: и тоже как у тебя - если блокер уезжает далеко, то мой раннер останавливается перед чекпоинтом своим
YurkovAS: блокер противника
YurkovAS: в гонки не играют, т.к. 110к участников и за любое место в топ300 получишь свои 4.9к cp
magaiti: думаю это косяк оценочной, раннер предпочитает крутиться относительно блокера врага, вместо того чтоб ползти на чекпоинт
YurkovAS: глянул код гоночек и ни чего не понимаю, т.к. большая часть подобрана экспериментальным путем.
YurkovAS: или еще бывает так, что лучше играет самая первая оценочная функция с коэф подобранными на глаз, приблизительно. и сколько потом не пытаешься их сделать более точными и логичными - выходит только хуже
Uljahn: ну, это вообще классика, в контестах особенно
tutubalin: скоро юбилейный тысячный CoC
YurkovAS: обратную польскую запись получается для этого пазла недели не применить? т.к. > 2 операндов
tutubalin: можно применить
tutubalin: представь, что пробел - это плюс
tutubalin: но вообще так как по сути в выражении только скобки, обратная польская запись сильно упрощается и по сути вырождается в стек
tutubalin: решил задачу недели в стиле функционального программирования :)
AlexDemeo: В задачке https://www.codingame.com/ide/puzzle/ascii-art баг или я туплю? Пример вывода: http://chat.codingame.com/pastebin/54fabbbe-8fe2-4047-a94a-0b532aeb12d2
AlexDemeo: Нашел
tutubalin: переносы строк или пробелы