Chat:Ru/2020-05-19
 BorisZ: по четности - я на первом ходу для каждой ячейки смотрю расстояние до ближайшего перекрестка, и ставлю признак если оно четное
 BorisZ: к координатам тоже как-то стало неловко, да и в туннелях через край там сдвигается четность
 BorisZ: но все равно получается что иногда неправильно, если кастанул скорость на одном краю, потом перешел через 0 на другой - оказываешься на нечетных, но это редко хрен сним
 BorisZ: преемущество кроме того что перекрестки не перескакиваешь на скорости в удобстве в моей реализации  - можно автоматом любой путь достроить до ближайшего перекрестка включительно
 BorisZ: это реально буст дало не слабый
 Uljahn: tutubalin: там JRFerguson спрашивал "Do you know when will the multi be available?", я из дискорда перепостил, что Тибо по этому поводу писал
 ilt: BorisZ >>это реально буст дало не слабый    Для этого есть какое-то логическое объяснение или это просто наблюдение?
 BorisZ: ilt в начале хода ты всегда стоишь на перекрестке или на повороте - видишь во все стороны и всегда что впереди
 BorisZ: больше видимость, меньше шансов что из-за угла налетишь на врага
 BorisZ: то есть проскакивать перекресток или поворот на скорости - почти всегда плохо
 BorisZ: если какой-то крутой трекинг сделан то может и не так важно это, но для среднего бота это плюс
 BorisZ: точнее сказать так - если ты на скорости, то ты никогда не стоишь в начале хода на клетке, соседней с поворотом или перекрестком, если юзаешь скорость на четных
 qbit86: BorisZ Не обязательно. Даже если ты ускоришься на чётной, и разработчики не подсунут нерегулярную карту, у тебя могут быть одноклеточные ниши. Ты не можешь в них зайти, не потеряв оба шага и не сбив чётность.
 BorisZ: на скорости я и не захожу в одноклеточные, кроме случая когда это лучший путь из негенеренных, что очень маловероятно
 BorisZ: только в концовке по сути, когда крошки эти подбираются
 BorisZ: а без скорости то заходит туда бот, но тоже не так часто
 BorisZ: похоже вобще у всех примерно такой метагейм получается что оба сначала собираются перекрестки и проходы, а в концовке тупики, не только еденичные
 BorisZ: *собирают
 wlesavo: о +200 мест за контест
 wlesavo: 13к cp, неплохо
 NightLuna: о, ты обратно аву сменил
 wlesavo: ну контест закончился, хотя эта мне кажется ближе к пакману была :slight_smile:
 BorisZ: доброго кота на злого поменял
 wlesavo: лол, почти одинаковые cp
8,830 / 10,000
8,838 / 9,500
 Snark_Chaser: Интересно, а они запускают на более слабых машинах игры по сравнению с контестом? у меня вдруг резко стало больше таймаутов
 735487: раньше было замечено 3 разных проца
 Uljahn: так от типа проца не должно зависеть, если ты время правильно измеряешь и прерываешь ход, когда близок к таймауту
 NightLuna: они сделали ,что в песочницу все переходят?
 NightLuna: круто как!
 Snark_Chaser: я ленивый, не считаю время )
 metahom: сегодня новый мульти обещали?
 metahom: или это про пакмана?
 Uljahn: да
 NightLuna: и все хистори оставили, вот это я понимаю, а то этот прикол с тем, что надо заново дерево и тд проходить какая-то фигня
 Uljahn: уже зарелизили пака
 Uljahn: зато теперь экспу по второму разу не дают)
 NightLuna: ну это я как-нибудь переживу)
 NightLuna: раньше был отстой в том, что мало кто в мульти потом заходил и пушил своего бота, было не особо интересно
 Uljahn: угу, эту фичу надо было в первую очередь пилить
 Uljahn: чтобы в мульти народ был
 Uljahn: да и код теперь сохраняется, а то я один раз не успел ни сохранить, ни сабмитнуть
 Uljahn: писал в браузерной ide
 NightLuna: надо пройти в легу в крестиках
 Uljahn: на шарпе/джяве?
 NightLuna: шарп
 BorisZ: там даже питон есть в леге, а шарпов вагон
 BorisZ: хотя может чел язык переключил конечно
 Uljahn: нет там питона, это кто-то язык поменял, когда уже в легу зашёл
 Uljahn: угу
 Uljahn: когда только открывали лиги, многие прошли на джяве с минимаксом, как например кубер)
 Uljahn: в общаке бытует мнение, что на питоне практически невозможно в легу попасть :(
 BorisZ: я бы тоже сделал ставку что невозможно
 Uljahn: единственный вариант - книгу дебютов пилить
 wlesavo: да думаю возможно, но требует примерно такого вложения как на топ 5 леги на другом языке
 Uljahn: надежда только на то, что как-то можно заточиться против босса, и сливать его понемногу, пока половину голды не запушишь в легу))
 wlesavo: ну до него еще подняться нужно
 Uljahn: это верно
 NightLuna: а на шарпе же должно быть не очень сложно
 735487: да какие то оптимизации прийдется сделать. у тебя сколько роллаутов сейчас?
 Uljahn: ну, битборды наверное придётся использовать всё равно
 BorisZ: да даже с дебютами фиг знает - когда то же они закончатся, движок все равно нужен основной
 735487: у меня сначала что то около 25-30к с трудом было. в легу еле прощемился. а потом стал потихоньку улучшать ускорять и вот уже раз и 80к стало. правда на плюсах
 Uljahn: ну, движок для доигрывания, там не очень много роллаутов нужно, или даже миник сойдёт
 735487: одно время даже на 6 месте сидел
 BorisZ: это надо как-то исхитряться чтоб не было вложенных циклов, вызовов функций и прочего всего что на питоне тормозит
 Uljahn: в идеале всё на нумпае сделать
 735487: ассемблерные вставки надо )))
 Uljahn: или фортран компилировать
 735487: NightLuna: попробуй ускорить рандом. корни закешировать и избавиться от деления при расчете UCB. даст большой прирост
 wlesavo: у меня простенький эвал даже неплохо работает, если его транслировать хотя бы на глубину 3-4 можно было бы попробовать, но я устал там бороться
 735487: расчет минидосок выиграл-проиграл тоже надо кешировать
 735487: вот это все по идее уже верхняя половина леги точно должно быть
 BorisZ: Uljahn если ты нумпайный массив обходишь где-то внутри в цикле for то это уже питон - с генератором и ловлей исключения
 Uljahn: ясен пень
 BorisZ: бросай ты это гиблое дело, каждой задаче свой инструмент
 Uljahn: я даже не запилил в роллауты принудительные выигрышные ходы, когда можно захватить минидоску и при этом выиграть игру, всё рандомно сейчас
 Uljahn: BorisZ: так задача не решить задачу, а исследовать возможности инструмента
 BorisZ: тогда задачу надо поменять )
 BorisZ: под инструмент более подходящую
 Uljahn: некоторые пишут (в чате, на форуме), что им перестало хватать производительности, поэтому они переписали на плюсы, для меня это выглядит так: "Эта игра для меня слишком сложна на хардкоре, понижу-ка я сложность до изи мод" :)
 BorisZ: графы вон там как-то пилятся в scipy инори показывал, тоже интересно, какой-нибудь мульти с графами
 Uljahn: я как раз сделал графы в паке на scipy
 Uljahn: 20ms
 BorisZ: где их надо много путей искать на графах - много ж таких
 Uljahn: все расстояния между всеми точками + все пути
 Uljahn: кратчайшие
 BorisZ: 20 на что?
 Uljahn: на расчёт двух матриц - с взаимными расстояниями и следующей клеткой кратчайшего пути
 BorisZ: да, это много, тем более что все то не нужны пути
 Uljahn: для самой большой карты 17х35
 Uljahn: зато пилится в пару строчек, как inoryy завещал
 BorisZ: надо от пака до цели только, но много раз
 BorisZ: поскольку граф меняется
 dbf: вчера как раз топ перезалил свои крестики, оторвался на 2 очка аж от второго места
 Uljahn: граф за счёт врагов меняется?
 dbf: "зато теперь экспу по второму разу не дают)" - мне начислили и за контест и за мульти
 dbf: ворвался в 200 :)
 Uljahn: вчера топ перезалил ботов без дебютных книг в качестве эксперимента
 BorisZ: и за счет своих тоже, их надо то учитывать то не учитывать
 Uljahn: dbf: ты начинаешь в той же лиге, где и закончил, XP не дадут за низшие лиги
 Uljahn: это не про CP
 dbf: ааа, я только за CP трясусь :)
 Uljahn: BorisZ: зачем своих учитывать?
 Akarachudra: Привет, что-то не вижу крестиков-ноликов в списке контестов. Где глянуть можно?
 dbf: это не было контестом
 dbf: только в "Games"
 Uljahn: в строке поиска tic tac toe
 dbf: https://www.codingame.com/multiplayer/bot-programming/tic-tac-toe
 BorisZ: Uljahn да, своих я не учитываю, ты прав - просто потом пути проверяю чтоб не пересеклись, так что враги только
 Uljahn: ну вот, питон в топ-10, всего в 10 очках рейтинга от босса :)
 Uljahn: *топ-100
 BorisZ: но для каждого пака свои враги тоже
 Akarachudra: kovi кажется решил, что контест продолжается и сабмитит как в предыдущую неделю))
 wlesavo: прикольно, примитивнейший бфс на словарях в платинум рифте все расстояния между всеми точками за 40 мс считает
 Uljahn: сначала граф строишь?
 wlesavo: ну просто ноды с линками отдельным словарем храню
 wlesavo: def get_distances(self): http://chat.codingame.com/pastebin/1fad0428-a6e2-4e6d-b80f-3be18c75f2ed
 wlesavo: я думал будет сильно дольше с такой кривенькой реализацией
 BorisZ: wlesavo это еще что, в платинумрифт 2 карты побльше, там не успевает за 50мс посчитать граф на питоне, там у меня класс LazyGraph и метод  do_bfs_until(timer, limit)
 BorisZ: начинает обсчитывать в первый ход, потом досчитывает за следующие )
 Uljahn: что за карты побольше? континенты?
 wlesavo: я во втором как -то коряво делал, сейчас вернулся посмотрел что я в первом понаписал, офигел немного, решил нормально переделать и легенду попытаться взять, а там уж и второй тоже перепишу
 Uljahn: вот кстати где надо scipy затестить :smirk:
 wlesavo: Uljahn не, во втором там есть огромные карты реально
 Uljahn: а, в PR2
 wlesavo: континенты развязаны, поэтому проще
 BorisZ: Uljahn нет, там как раз связный граф всегда, просто ячеек очень много
 Uljahn: я прочитал "2 карты побльше"
 wlesavo: а лол
 Uljahn: ого, в PR2 плейн текст вместо сида 
 ilt: топ3 только постмортем написал?
 ilt: думал мульти начну аккуратно и неспешно пилить с нуля :grinning:
 Uljahn: расстояния за 30-40ms в PR2 считаются на больших картах типа seed=632404084
 NightLuna: amurushkin спасибо, попробую
 Uljahn: чё-т PR2 на GitC слишком похож
 BorisZ: Uljahn pf 30-40 ms это scipy считает?
 735487: гы только дошло как в бимсерч сделать чтобы искал не только на глубину а и лучший счет выбирал. сразу  в сильвере еще поднялся ))))
 BorisZ: а пути она может сделать?
 BorisZ: amurushkin бимсерч тут так многие юзают именно потому что он получается сам отсекает пути, у которых в начале мало точек а в конце много
 BorisZ: дальние точки менее надежны)
 BorisZ: поэтому вроде тупо по количеству точек должно заработать
 BorisZ: ну и не надо отсечку слишком большую - наверное штук 10 максимум стоит хранить
 BorisZ: +- 100 )
 Uljahn: да
 735487: пока храню 26 штук и ищу глубину 8. не спрашивайте почему )))
 Uljahn: проблема только, что не все пути считает, а только один из кратчайших
 Uljahn: зато между всеми парами нод сразу считает
 BorisZ: Uljahn а она именно путь сможет отдавать сразу готовый типа path(a, b) и она вернет список ячеек, или только step(a,b) - и нужно самому путь делать?
 BorisZ: amurushkin но дальним точкав все равно нужно счет уменьшать, чтоб не гнались они за далекими жирными группами, которые может уже съедят пока добежишь
 wlesavo: проверил во втором, тоже не таймится мой бфс 
 BorisZ: wlesavo надо на больших картах именно, там они сильно разные по размеру бывают
 wlesavo: но медленнее в несколько раз чем скайпай
 wlesavo: да я на больших имею ввиду
 wlesavo: на некоторых близко к 1 секунде даже
 wlesavo: но все таки выживает
 BorisZ: там может дают кстати не дают по 1 секунде на 1 тур, старый мульти то
 wlesavo: BorisZ похоже дают, не таймится же
 wlesavo: хотя в описании нет про первый ход
 MadKnight: wlesavo о чём речь?
 wlesavo: Platinum Rift
 wlesavo: BorisZ на самом деле там можно оптимизировать сильно лучше, я ж для каждой точки заново считаю, если учесть (a, b) = (b, a) то будет в разы быстрее
 wlesavo: наверное
 BorisZ: n**2 сведется к n**2 / 2
 BorisZ: но добавятся условия 
 BorisZ: что-то может и даст, но меньше чем в 2 раза
 wlesavo: BorisZ не условия, я же все равно гет из словаря делаю, просто лучше хранить, но вообще хз, проверять надо 
 BorisZ: согласен, без проверки точно не скажешь
 BorisZ: какая операция сколько времени отнимает - хз
 Uljahn: BorisZ: дают следующую ноду в кратчайшем пути (a, b), полностью путь надо самому восстанавливать
 wlesavo: а какая библиотека это?
 Uljahn: from scipy.sparse.csgraph import shortest_path
 TheCrucial: можно ж заранее все пути через флойда уоршела посчитать
 TheCrucial: n**3 от колличества клеток а потом за константу брать расстояние между любыми 2умя
 Uljahn: так оно так и считает, только не на чистом питоне, причём ещё автоматически выбирает наилучший метод из возможных в зависимости от данных
 Uljahn: минимальный proof of concept: http://chat.codingame.com/pastebin/4e9a980b-1220-4a8e-a1f7-980798df2c34
 MadKnight: wlesavo ты в PR щас играешь?)
 Uljahn: *in path опечатка
 MadKnight: wlesavo чё за алгоритм пилишь?
 Uljahn: method='auto' - (default) select the best among ‘FW’, ‘D’, ‘BF’, or ‘J’ based on the input data.
 Uljahn: FW - это Флойд-Уоршелл как раз
 MadKnight: у меня своя библиотека для поиска путе
 MadKnight: й
 MadKnight: была бы на шарпах, сделал бы идеально удобной
 TheCrucial: а где почитать какие библиотеки на каких языках в CG доступны?
 Uljahn: в FAQ
 Uljahn: https://www.codingame.com/faq
 Beard: а у всех борды не обновляются?
 qbit86: http://chat.codingame.com/pastebin/fe25a2b7-c3b6-4d1d-b021-80a3355d5fa7
 wlesavo: MadKnight да, решил переделать старый код, хочу какую-нибудь оценочку и тактику прикрутить, не хочу читать пмы, подумаю немного сам что можно сделать
 TheCrucial: это можно делать до первого хода, там время не особо важно вообще  :) 
 Uljahn: до первого хода можно и другие вещи поделать - спланировать оптимальную разведку и захват платины
 TheCrucial: если для каждой клетки считать пути до всех остальных разве не медленнее получится?
 TheCrucial: это минимально времени берёт в общем как ни считай
 BorisZ: флойд уршал это для взвешанных графов же, когда у каждого линка есть вес - длина пути
 TheCrucial: ну любой невзвешенный это взвешенные со всеми весами 1 :)
 MadKnight: wlesavo а PR 1 или 2 ?
 Uljahn: угу
 BorisZ: то есть если если из а в б есть прямой путь, но длина у него мб больше чем через промежуточную точку
 Uljahn: так мы только соседние ячейки соединяем
 BorisZ: а бфс из каждой точки это эн квадрат
 wlesavo: MadKnight оба, но сначала первый, там у меня все совсем плохо
 Uljahn: а я второй - у меня там вообще ничего
 wlesavo: второй проще немного потому что не нужно спавнить, разведывай да беги, но у меня там тоже коряво сделано
 BorisZ: поэтому тот флойд уршал проверяет для каждой пары точек - нет ли пути побыстрее, вот эн в кубе и выходит
 MadKnight: wlesavo есть идеи?)
 TheCrucial: Да n**3 флойд уоршел, но каждая итерация супер дешевая. если искать в ширину для всех для каждой точки то больше я думаю будет
 wlesavo: MadKnight пока прикрутил какой-то эвал на выбор острова и примитивную логику спавна, сейчас сделаю движение простенькое и засабмичу, дальше же буду думать, хочу чтобы заработало
 MadKnight: гого
 Uljahn: у меня в первом индексы островов захардкожены в списки :joy_cat:
 wlesavo: лол))
 Uljahn: в PR2 в пелере можно колёсиком мыши изменять масштаб :scream_cat:
 Uljahn: а я-то думаю, чего на больших картах номеров ячеек не видно
 Uljahn: специально подбирал сид для тестов, чтобы карта была маленькая, и было видно номера :relieved:
 Uljahn: *в плеере
 Uljahn: ну вооот, в дискорде пишут - осенью будет соло-контест :(
 Akarachudra: это значит набивать очки без соперника?
 Uljahn: ага, скорее всего соло-оптимизация какая-нибудь
 735487: если еще и на 4 часа то это лажа :)
 Uljahn: может, как TGD сделают
 Uljahn: или TAC, или CvZ
 Akarachudra: я тут как-то открыл танчики-поиск путей (не помню когда это было). тогда это был мой второй раз после botg где было время и мотивация в нем участвовать. но желание улетучилось мгновенно, вся изюминка борьбы ушла куда-то.
 Uljahn: AStarcraft?
 Akarachudra: да хз, нужно было максимум очков набрать, там гена еще победил.
 Uljahn: вообще лажа какая-то
 Uljahn: да, в нём турист и победил как раз
 Uljahn: всё же такие контесты не то, за что я люблю CG, таких и на других платформах полно
 Akarachudra: особенно неделю в одного такое фигачить.
 735487: а я в нем не участвовал но потом в мульти спокойно накодил впринципе довольно неплохие результаты
 Uljahn: это как разница между VoxCodei и Hypersonic
 Uljahn: вроде одно и то же, но и разное очень
 Akarachudra: меня впечатляет насколько популярен CSB контест
 Uljahn: он дефолтный для новичков
 Uljahn: когда вкладку мульти открываешь, он первый всплывает, да ещё и с туториалом
 Akarachudra: ну судя по 800 людям в легенде)
 Uljahn: самая лёгкая лега
 Akarachudra: там далеко не новички и он просто не только дефолтный и ещё крутой.
 Uljahn: на самом деле, до голды там туториал, голда - это уровень бронзы на обычном контесте
 Uljahn: в топе леги там реально монстры с нейронками
 Uljahn: видно даже по очкам отрыв
 Akarachudra: у рекурса нейронка?
 Uljahn: первые три точно нейронки
 Akarachudra: а как он её обучал?
 Uljahn: написал свой фреймворк для начала)
 Uljahn: потом как pb4 в своём мануале
 Uljahn: https://github.com/pb4git/Nash-DQN-CSB-Article
 Akarachudra: а, они спустя годы вернулись к этому)
 Akarachudra: ну круто. спасибо за ссылку.
 Uljahn: в смысле? какие годы?
 Akarachudra: контест в 2016 был? нейронки запилили в 2019?
 Uljahn: топ гоночек переходил из рук в руки между разными алгоритмами, сразу после контеста были ГА, очень долго в топе висели, потом с большим отрывом их сместили минимаксы
 Uljahn: все уже решили, что всё, в гоночках ничего не улучшить
 Uljahn: т.е. каждый год парадигма менялась, и все думали что всё
 Uljahn: теперь вот нейронки с перебором
 Uljahn: а, ещё ведь время на ход подрезали в гоночках, изначально было 150мс, теперь 75мс, и всё равно сабмиты идут часами
 Uljahn: а так было бы интересно, высоко ли зашли прошлые топы вроде пена или дапорана
 Uljahn: тут часто так: обновляют языки - половина ботов ломается, недавно питон2 выпилили
 Uljahn: а питон2 боты вроде до сих пор в мульти болтаются
 Uljahn: лол, у меня в гоночках py2 как раз...
 Akarachudra: подрезать время хода - жестко. ребята не стали пушить новых ботов?
 Uljahn: неа
 Uljahn: не стали фиксить, да и вообще пропали
 Akarachudra: ну если там га, то бот сильно просел
 Akarachudra: хотя непонятно, может на 75мс решение по оптимальности не сильно отставало от 150мс
 Uljahn: у них были сильнейшие боты на минимаксе вроде
 Uljahn: но не факт, что смогли бы с нейронками конкурировать
 Uljahn: в статье 97% винрейт против пена на скрине
 Uljahn: хотя, то был бот на расте в режиме дебага, а сейчас релиз мод выкатили
 BorisZ: блин соло контест конечно печаль, совсем другие ощущения
 BorisZ: может петицию написать какую-нибудь на форуме )
 BorisZ: собрать стысячу лайков, может передумают, времени то дофига еще
 Akarachudra: "solo puzzle with hidden information" - из дискорда
 BorisZ: нужен хороший текст только, не нытье, с аргументами и зажигательный
 BorisZ: хотя хз может и окажется интересным
 Akarachudra: ну какой аргумент? одно дело у тебя competition с живым человеком и ты пытаешься понять "как думает он". другое дело соло-пот.
 BorisZ: вот - сформулировать это хорошо, накидать еще что-то
 Uljahn: есть вероятность, что в промежутке выкатят контест от спонсора какого-нибудь, либо коммьюнити разродится контестом в хорошем качестве, которые CG одобрит (как было с ООС)
 BorisZ: в мульти можно идеями обмениваться в чате, всегда интересно общаться когда луюди в одну сторону думают
 BorisZ: а тут все будут молчать в тряпочку
 BorisZ: копить в себе бобро )
 Uljahn: вроде во время TAC довольно много обсуждали в чате, хотя там и приз был большой
 Uljahn: я тогда узнал про MCTS в первый раз)
 BorisZ: тас - это что?
 Uljahn: the accountant
 Uljahn: его нет в мульти, потому что спонсорский
 BorisZ: а, меня тогда не было еще
 Uljahn: но похож на CvZ
 Uljahn: это ещё где Т1024 из призов вылетел за хардкод
 Uljahn: тоже драма была
 BorisZ: да 10 тыщь баксов за 1 место не кисло
 Uljahn: подбирал сиды к валидаторам, чтобы очков набивало больше
 dbf: хм, а в каком канале про соло пишут?
 dbf: в дискорде видел [CG]ThibaudToday at 12:39 PM
it's not been decided internally yet
 Uljahn: https://discord.com/channels/466965651135922206/711887567590654013
 Akarachudra: выглядит как какая-то привычка из раика, перекочевавшая сюда)
 Akarachudra: там в топе пишут "детекторы" противников частенько)
 Uljahn: а как правильно? трекеры?
 dbf: да, действительно, надо уточнить
 dbf: "SOLO puzzle is probably a placeholder"
 dbf: вся надежда на это :)
 Uljahn: ну уж за полгода-то могут выродить норм мульти
 Uljahn: соло это смешно, Automaton2000
 Automaton2000: у тебя же количество очков есть
 Uljahn: )
 Uljahn: Automaton2000: как я буду Мэда количеством очков рекать? мне реплей нужен
 Automaton2000: а я до сих пор
 dbf: мне, кстати, A*craft понравился, но он вроде не на целую неделю был
 BorisZ: может на выходные был - 3 дня, я уже не помню, а в истории даты не пишут
 BorisZ: мне не запомнился он совсем - блеклый какой-то
 tutubalin: Uljahn я так и не понял, почему ты пост удалил?
 Uljahn: если коротко, то инфа уже устарела, я там сказал, что мульти задерживается до сегодня
 Uljahn: это не пм был
 Uljahn: почему-то мало кто дискордом пользуется
 Uljahn: хотя он в браузере в отдельной вкладке работает спокойно
 Uljahn: вернее, много кто, но не только лишь все
 Uljahn: "only 18 accounts removed afaik" ахах то есть мяу
 Uljahn: копипейстеры палятся
 tutubalin: венгерские друзья кови?
 Uljahn: да всяких полно, вон из контура даже парочка
 Uljahn: в каком-то американском вроде вузике учредили специальную награду для студентов - они пошли по приватам выпрашивать ботов за денежку))
 wlesavo: о, похоже таки возьму сегодня золото
 vrabosh: я походу начинаю во вкус питона входить 
 vrabosh: print(*(.join(i) for i in m[:-1]),sep=)
 vrabosh: :)
 Uljahn: хд
 Uljahn: чё-то вообще криво)
 Uljahn: распаковка и нулевой сепаратор
 vrabosh: это когда надо лабиринт нарисовать.. я в конец границы обозначаю \n и в итоге и работаь норм и выводить(
 Uljahn: пипец
 vrabosh: Detective Pikaptcha EP2 - прикольная задачка
 vrabosh: это я на задачках такое делаю
 Uljahn: а чего тебе построчно не выводится?
 vrabosh: ну надож понтануться кодом
 Uljahn: не по дзенски)
 vrabosh: я кстати пока эту задачу еще не решил.. только решил когда на лево ходит..
 vrabosh: или вообще не решил. там он должен обязательно пройти весь лабиринт?
 Uljahn: Your objective is to write a program that will compute, for each cell of a maze, the number of times Pikaptcha will step into the cell by following a wall until he reaches his original location. 
 vrabosh: понял, там просто ситуации прикольные встречаются.. которые не ожидал
 vrabosh: 0#0
- >#
 
0#0
 Uljahn: я вот так 2D массивы печатаю:
for row in arr.astype(str):
   print("".join(row))
 Uljahn: сложность кода распределена равномерно, читается легко
 Uljahn: а однострочники - это удел гольфистов)
 vrabosh: наконецто сделал.
 vrabosh: в пазле чел с помощью нампи и скайпай такое классное решение выдал.. надо посмотреть лекции по скайпаю..
 Uljahn: в каком эпизоде?
 vrabosh: 
DETECTIVE PIKAPTCHA EP1
 Uljahn: хммм, какие лекции по сайпаю? там же просто функции для нампайных массивов
 Uljahn: читаешь доки, ищешь примеры
 vrabosh: чтоб узнать. что есть.. под кофеек люблю лекции посмотреть)
 Uljahn: вот примеры хорошие найти реально сложно
 vrabosh: хотя через лекции сложно обучаться.. либо там вода или нубское, а сложное лучше с книгой
 vrabosh: мне еще вот эта фишка понравилась
 vrabosh: grid = [list(input()) for _ in range(height)] 
 vrabosh: красиво, в один код.
 vrabosh: ой стр
 Uljahn: хорошее решение со свёрткой
 Uljahn: в одну строку - это же простой генератор списка (list comprehencion)
 vrabosh: вот мне бы такое решение еще найти, чтобы с определенных частей массива брать данные по  заданому шаблону как там kernel
 Uljahn: *comprehension
 Uljahn: с каких определённых?
 vrabosh: ну я еще нуб, только учусь не все знаю, не все доходит
 vrabosh: ну есть матрица 100 на 100, и я хочу допустим крестик взять по координатам
 Uljahn: а что на выходе?
 vrabosh: kernel = [[0,1,0], [1,0,1], [0,1,0]] - вот хочу по этому шаблону взять в определен координатах
 vrabosh: мне желательно индексы
 Uljahn: почему бы к индксу элемента не прибавить нужные смещения?
 Meagnar: свертка выглядит умно, но по факту удваивает количество вычислений в данном случае. 4 клетки можно и руками перечислить
 vrabosh: приходится фором пользоваться
 Uljahn: тут суть в том, чтобы написать функцию, которая одинаково ко всему массиву применяется, это назвается векторизация
 Uljahn: за счёт этого нумпай в 100х раз быстрее питона
 vrabosh: причем хочется как тут он сделал, чтоб еще и ошибки небыло когда за границы выходишь
 Meagnar: а если писать самому функцию на массиве из нумпая? или все равно медленно?
 Uljahn: если нумпайные функции - то быстро
 Meagnar: def func(x, y):
return chr((field[x-1,y]+field[x+1,y]+field[x,y-1]+field[x,y+1]+13)*field[x,y]+35)
 Uljahn: each numpy operation is implemented in highly optimized c-code meaning that passing in a python function or a python lambda would force numpy to go to the object level every time and eval. 
 Meagnar: но обращение к элементам массива из питона по идее ж все равно относительно быстрое. или все-таки нет?
 vrabosh: тут задачек на год целый хватит
 Uljahn: относительно быстро, но с оверхедом
 Uljahn: вот нашёл похожее, там тоже типа свёртки, только фильтр https://stackoverflow.com/questions/10996769/pixel-neighbors-in-2d-array-image-using-python
 Uljahn: тут зависит, что ты с этими данными дальше делать собираешься
 Uljahn: чтобы спланировать все операции в нумпи, и из питона в нумпи и обратно не конвертить с оверхедом
 Uljahn: а просто абстрактную функцию выбора элементов крестиком лучше на питоне написать, действительно
 Uljahn: если ты её пару раз применять собрался
 Meagnar: я чуть вышел кинул свою функцию. собственно это и есть та же самая свертка, только ручками, т.к. пока не изучал какие функции есть в нампи
 vrabosh: спасибки
 Meagnar: а проверку краев можно не делать, если хранить поле с запасной линией по краю
 vrabosh: я так и делаю, лучше ешение не нашел..
 vrabosh: w, h = [int(i) for i in input().split()]
m = [list(input()+'#') for _ in range(h)]
m.append(['#']*w)
 vrabosh: вотак обычно делаю
 Meagnar: field[y+1, 1:-1] = [(ord(c)-35)/13 for c in input()]
 Meagnar: я просто в середину вставлял
 Uljahn: а что за магия с ord?
 tutubalin: коды U D L R превращаются в 0 1 2 3 или типа того
 Meagnar: привычка с олимпиад писать без ифов)
 aropan: Плохая привычка.
 Meagnar: привычка с олимпиад писать без ифов)
 aropan: “UDLR”.find(c) тогда уже.
 Meagnar: упс. дабл пос
 735487: наверное получается 0 или 1 на выходе
 Meagnar: (ord('#')-35)/13 == 0
(ord('0')-35)/13 == 1
 Uljahn: символы нуля заменяем на 1.0, а # на нули?
 Meagnar: конверчу карту из букв в числа для свертки
 aropan: А зачем тогда на 13 делить?
 aropan: А, ок.
 aropan: Понял. Но 0 if c == ‘#’ else 1 понятнее же.
 aropan: И в коды не надо смотреть.
 Meagnar: я с плюсов пришел. там же char - это число. сделать пару арифметических операций с числом всегда быстрее, чем лишние проверки
 vrabosh: я смотрю на ютубе есть прикольыне ведюшки
 vrabosh: SciPy 2019: Scientific Computing with Python Confere
 vrabosh: но жалко я англ не знаю
 wlesavo: о, голда в пр
 Uljahn: символы нуля заменяем на 1.0, а # на нули?
 Uljahn: чатик не работает чё-т, Automaton2000
 Automaton2000: да может не хуже. повторю ещё раз. нужно 400 игр сыграть двум ботам, чтобы выровнять дисперсию.
 Uljahn: о, страницу пришлось обновить
 Uljahn: да что такое-то, сообщения не отправляются :(
 Meagnar: м-да. чат подгружается только обновлением страницы.
Uljahn, да. из аски-карты делаю массив нулей и единиц и прогоняю свертку. потом обратно тем же способом в аски. в плюсах это точно самый быстрый вариант
 Uljahn: ясно, спасибо. не уверен, что в питоне самый быстрый - надо тестить
 Uljahn: во, браузер перезапустил - вроде обновляться стало
 Uljahn: первый раз такое
 tutubalin: в играх, где используются U,,L,R,D можно использовать ord(c)%5, чтобы получить 0,1,2,3
 zuko3d: а как ты на плюсах свёртку делаешь?
 Uljahn: tutubalin: прикольных хак
 Uljahn: *прикольный
 zuko3d: только процент - дорогая операция
 YurkovAS: Если нажать submit в Search Race код же не опубликуется для всех?
 YurkovAS: https://www.codingame.com/ide/demo/84237264ea233365577df010c3a68883d86556
я про это
 Uljahn: я думаю, читабельность в питоне  важнее, особенно для некритичного кода, который один раз выполняется
 zuko3d: тогда уж лучше x = index(['U', 'L', 'R', 'D'])
читаемость явно лучше
 Uljahn: YurkovAS: код для всех разве где-то публикуется? кроме случая, когда ты сам для пазлов публикуешь решения?
 YurkovAS: Uljahn понял, спс, уже нажал. ну мало ли...
 zuko3d: ой, только наоборот там.
x = ['U', 'L', 'R', 'D'].index(c)
 tutubalin: да можно и 'ULRD'.find(c)
 tutubalin: но для кодегольфа иногда приходится жертвовать читабельностью
 Meagnar: zuko3d, ну для данной задачи сверткой будет просто суммирование значений соседних клеток. но я еще домножаю на значение текущей, чтобы занулить стены. тогда при переводе в аски стены становятся #, а числа остаются числами
 zuko3d: а что за задача?
 Uljahn: https://www.codingame.com/ide/puzzle/detective-pikaptcha-ep1
 Uljahn: там есть на питоне решение на scipy
 zuko3d: ну в нампи есть свёртка, можно через неё
 Uljahn: думаю, разница не большая
 zuko3d: ага, у них кодовая база общая
 zuko3d: забавная задача =) видимо, в производительность тут не упрёшься
 Meagnar: интересно какие тут библиотеки на плюсах можно подключать. по скорости я не уверен, что что-то может переплюнуть интеловский IPP
 Meagnar: а. нашел.
 Uljahn: faq нашёл?
 Uljahn: под исполнение кода выделяется одно физическое ядро, доступны инструкции AVX2, народ юзает прагмы ещё, это всё, что я знаю о плюсах :(
 zuko3d: ну avx2 это немало.
 Uljahn: Meagnar: а ты как на CG попал? с топкодерс? если уж плюсовик-олимпиадник...
 Uljahn: вроде в этот раз на порядок больше народа на контест привалило с аналогичных платформ
 Meagnar: на хабре пару лет назад видел статейку про платформы, на которых можно потренероваться кодить. сейчас решил взяться за питон и вспомнил
 Uljahn: понятно
 zuko3d: ну это ты удачно зашёл =) на мой вкус CG - самая удобная платформа для тренировки
 Uljahn: а питон зачем? для ML или django?
 Uljahn: по питону ещё есть checkio.org , но там только пазлы
 Meagnar: питон для души :) ну и для разнообразия. я по распределению попал в одну небольшую госконтору. когда в штате полтора программиста, приходится заниматься всем от низкоуровневых прог, до верстки сайта. но на качество кода смотреть некому. вот решил тут попробовать себе культуру привить
 Meagnar: checkio у меня в соседней вкладке) а чатик так и не работает. общий нормально, а русский только перезагрузкой
 Uljahn: мне пришлось браузер перезапускать, стало норм
 zuko3d: имхо культура кода только через код-ревью появляется. т.е. надо чтобы кто-то другой смотрел твой код и комментировал. Самому как-то сложно заметить проблемы, о которых не знаешь
 Uljahn: я вообще не кодер, ревьюера взять негде, приходится учить PEP8, читать чужой код и усваивать лучшие практики
 tutubalin: наверняка есть сайты где народ друг друга ревьюит
 tutubalin: на крайняк на гитхабе публиковать и просить коммьюнити
 Meagnar: если с работы код нельзя выносить, то нужно дома писать что-то свое. например решать тут задачи
 Uljahn: задачи решать - потом чужие решения смотреть, а можно в мультиплееры залипать, если хочется чего-то более масштабного :)
 Uljahn: если клэши - это семечки, пазлы - орешки, то мульти - это жвачка, Automaton2000
 Automaton2000: у меня с самого начала
 zuko3d: Uljahn можно не учить PEP8 если PyCharm используешь - он там автоматом проверяется. У нас просто на работе нельзя коммитить код, который нарушает PEP8, поэтому PyCharm помогает своим авто-форматом
 Uljahn: я в VSC какие-то автоформаттеры добавил, но надо настраивать, наверное, кодестайлы где-то брать?
 zuko3d: чужие решения смотреть, читать чужой код - ваще полезно лично мне было. Иногда то либу какую-то на Питоне заметишь, то какой-то интересный приём.
 zuko3d: ну я VSC не использую, поэтому не могу сказать. Советую PyCharm попробовать - там всё из коробки работает =)
 Uljahn: PyCharm когда-то давно пробовал, чем-то он не понравился, надо дать ещё один шанс, а то все хвалят в последнее время
 zuko3d: если пробовал пару лет назад - то он был просто сырой тогда
 Uljahn: от 17-го года инсталлер лежит :)
 zuko3d: ну в 17м он был плох, там даже автодополнение тупило
 Uljahn: потребовал перезагрузку, теперь индексирует 30 гигов конды... :relieved:
 Uljahn: единственный минус пока - тёмная тема мутная, надо посочнее подобрать, в остальном вроде не хуже VSC
 wlesavo: Uljahn после пичарма на VS ушел, как то проще и привычнее, пичарм для маленьких проектов мне как то не понравился
 wlesavo: прикольно, в голде PR сильно меньше ресурсов и тактика меняется прямо сильно, нужно под типы карт похоже еще  подстраиваться
 tutubalin: я тоже с пичарма ушёл на vscode
 tutubalin: в том числе из-за линтера
 tutubalin: я код пишу для себя, мне PEP8 по барабану, и постоянные предъявы подбешивали
 tutubalin: особенно на олимпиадах, где 4 часа на всё, а он до пустой строки докопавыется
 wlesavo: хм, потеребонькал 3 коэффициента и с 20го места в топ голды сразуб может и не придется сильно менять ничего
 wlesavo: tutubalin вот да, одно дело сайтики в нем на джанге писать, другое дело бота или небольшую задачку
 wlesavo: ой, с 200го