Chat:Ru/2020-05-19

From CG community
Jump to navigation Jump to search

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: зачем своих учитывать?

Default avatar.png Akarachudra: Привет, что-то не вижу крестиков-ноликов в списке контестов. Где глянуть можно?

dbf: это не было контестом

dbf: только в "Games"

Uljahn: в строке поиска tic tac toe

dbf: https://www.codingame.com/multiplayer/bot-programming/tic-tac-toe

Default avatar.png Akarachudra: Спасибо

BorisZ: Uljahn да, своих я не учитываю, ты прав - просто потом пути проверяю чтоб не пересеклись, так что враги только

Uljahn: ну вот, питон в топ-10, всего в 10 очках рейтинга от босса :)

Uljahn: *топ-100

BorisZ: но для каждого пака свои враги тоже

Default avatar.png 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: ну вооот, в дискорде пишут - осенью будет соло-контест :(

Default avatar.png Akarachudra: это значит набивать очки без соперника?

Uljahn: ага, скорее всего соло-оптимизация какая-нибудь

735487: если еще и на 4 часа то это лажа :)

Uljahn: может, как TGD сделают

Uljahn: или TAC, или CvZ

Default avatar.png Akarachudra: я тут как-то открыл танчики-поиск путей (не помню когда это было). тогда это был мой второй раз после botg где было время и мотивация в нем участвовать. но желание улетучилось мгновенно, вся изюминка борьбы ушла куда-то.

Uljahn: AStarcraft?

Default avatar.png Akarachudra: да хз, нужно было максимум очков набрать, там гена еще победил.

Uljahn: вообще лажа какая-то

Uljahn: да, в нём турист и победил как раз

Uljahn: всё же такие контесты не то, за что я люблю CG, таких и на других платформах полно

Default avatar.png Akarachudra: +

Default avatar.png Akarachudra: особенно неделю в одного такое фигачить.

735487: а я в нем не участвовал но потом в мульти спокойно накодил впринципе довольно неплохие результаты

Uljahn: это как разница между VoxCodei и Hypersonic

Uljahn: вроде одно и то же, но и разное очень

Default avatar.png Akarachudra: меня впечатляет насколько популярен CSB контест

Uljahn: он дефолтный для новичков

Uljahn: когда вкладку мульти открываешь, он первый всплывает, да ещё и с туториалом

Default avatar.png Akarachudra: ну судя по 800 людям в легенде)

Uljahn: самая лёгкая лега

Default avatar.png Akarachudra: там далеко не новички и он просто не только дефолтный и ещё крутой.

Uljahn: на самом деле, до голды там туториал, голда - это уровень бронзы на обычном контесте

Uljahn: в топе леги там реально монстры с нейронками

Uljahn: видно даже по очкам отрыв

Default avatar.png Akarachudra: у рекурса нейронка?

Uljahn: первые три точно нейронки

Default avatar.png Akarachudra: а как он её обучал?

Uljahn: написал свой фреймворк для начала)

Uljahn: потом как pb4 в своём мануале

Uljahn: https://github.com/pb4git/Nash-DQN-CSB-Article

Default avatar.png Akarachudra: а, они спустя годы вернулись к этому)

Default avatar.png Akarachudra: ну круто. спасибо за ссылку.

Uljahn: в смысле? какие годы?

Default avatar.png Akarachudra: контест в 2016 был? нейронки запилили в 2019?

Uljahn: топ гоночек переходил из рук в руки между разными алгоритмами, сразу после контеста были ГА, очень долго в топе висели, потом с большим отрывом их сместили минимаксы

Uljahn: все уже решили, что всё, в гоночках ничего не улучшить

Uljahn: т.е. каждый год парадигма менялась, и все думали что всё

Uljahn: теперь вот нейронки с перебором

Uljahn: а, ещё ведь время на ход подрезали в гоночках, изначально было 150мс, теперь 75мс, и всё равно сабмиты идут часами

Uljahn: а так было бы интересно, высоко ли зашли прошлые топы вроде пена или дапорана

Uljahn: тут часто так: обновляют языки - половина ботов ломается, недавно питон2 выпилили

Uljahn: а питон2 боты вроде до сих пор в мульти болтаются

Uljahn: лол, у меня в гоночках py2 как раз...

Default avatar.png Akarachudra: подрезать время хода - жестко. ребята не стали пушить новых ботов?

Uljahn: неа

Uljahn: не стали фиксить, да и вообще пропали

Default avatar.png Akarachudra: ну если там га, то бот сильно просел

Default avatar.png Akarachudra: хотя непонятно, может на 75мс решение по оптимальности не сильно отставало от 150мс

Uljahn: у них были сильнейшие боты на минимаксе вроде

Uljahn: но не факт, что смогли бы с нейронками конкурировать

Uljahn: в статье 97% винрейт против пена на скрине

Uljahn: хотя, то был бот на расте в режиме дебага, а сейчас релиз мод выкатили

BorisZ: блин соло контест конечно печаль, совсем другие ощущения

BorisZ: может петицию написать какую-нибудь на форуме )

BorisZ: собрать стысячу лайков, может передумают, времени то дофига еще

Default avatar.png Akarachudra: пиши)

Default avatar.png Akarachudra: "solo puzzle with hidden information" - из дискорда

BorisZ: нужен хороший текст только, не нытье, с аргументами и зажигательный

BorisZ: хотя хз может и окажется интересным

Default avatar.png 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

Default avatar.png Akarachudra: выглядит как какая-то привычка из раика, перекочевавшая сюда)

Default avatar.png 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

  1. >#

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