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го