Chat:Ru/2020-05-15
BorisZ: Начинаю все переписывать в четвертый раз.
BorisZ: если не взлетит то сдаюсь
BorisZ: поеду на дачу
BorisZ: в деревню, в глушь в саратов
BorisZ: надо уметь отступать
BorisZ: маньяки долго не живут )
mykeich: BorisZ ужас
gybson_samara: Programming language colorization is up to 3 times faster
gybson_samara: MS нас балует =)
Hamibar: BorisZ живут не долго, но зато ярко!
metahom: тяжело вообще в голду попать?
Uljahn: смотря откуда лапки :disappointed:
metahom: ))
metahom: ну предположим лапки посередине между
Hamibar: если посередине тогда легко.
dbf: не очень тяжело, а вот потом кажется человек у 200 почти одинаковые боты и непонятно чего делать :)
dbf: т.е. понятно, что трекер врага, но непонятно как
metahom: ясно, спасибо. мож тогда на выходных запинаю себя
wlesavo: я тут кстати подумал про разные чатиковые идеи, надо все таки реализовать, tutubalin таки прав, просто концепцию нападений изза угла нужно обобщить на нападения когда тебя противник не видит а ты его видишь
Hamibar: странный контест. Почему-то не особо выбивают из топ 50. Хотя казалось бы уже давно должны были
Hamibar: может действительно уже почти не чего улучшать
Borrow: а запирание в тупиках уже многие реализовали?
gybson_samara: а как ты запрешь? тебя сожрут
Borrow: видишь жертва зашла в тупик - заходишь за ней следом
Hamibar: я у многих топов видел
Borrow: если она свитчается, свитчуешься сам и съедаешь
Hamibar: ну у некоторых точно
Borrow: если не свитчается, съедаешь так
Hamibar: на самом деле это риск
Hamibar: нападать когда кулдаун 0
gybson_samara: а главное зачем?
Hamibar: ну вот ты меня зажал. У меня есть выбор свичнуться или нет. Если нападешь, а я свичнусь, то погибнет твой пак
gybson_samara: зачем этим заниматься то?
Borrow: я должен нападать на тебя, но не 100%
Hamibar: ну и получается небольшая угадайка
Borrow: но если ты в оборонных целях свитчнешься раньше чем я напал, ты съеден
Hamibar: но думаю все равно более менее выгодно
Borrow: фактически тебе надо угадать момент когда я напал в точности
Hamibar: gybson_samara у тебя становиться на 1 пака больше, чем у врага)
Borrow: так что если я например жду random(1,5) ходов перед нападением, у тебя шанс 20% выжить.
Hamibar: и на самом деле, если твоего пака съели на ранних ходах, то почти нет вариантов выиграть
Hamibar: ну да, по идее нападающий в более выигрышной ситуации
gybson_samara: нападающий в проигрышной, так как во время его хода обороняющийся просто свитчится
gybson_samara: а еще и догнать надо
gybson_samara: Uljahn вот есть nonzero, а как нулевые то элементы искать?
Borrow: не надо догонять если жертва в тупике
Hamibar: Borrow правильно написал, обороняющемуся нужно угадать точны момент нападения. А атакующий может подождать
gybson_samara: если он ждет, то он уже какой-то совсем и не нападающий
Hamibar: подождать пару ходов, а потом получать профит остальные 50-100 звучит как хороший размен.
Hamibar: Но действительно не уверен, что это даст большой прирост рейтинга.
Borrow: потом, жертва же тоже ждёт
Borrow: так что это даже не потеря времени
Borrow: кароче по-моему любому у кого хватает сил закодить это поведение, нужно закодить
Uljahn: gybson_samara: numpy.nonzero(arr == 0) или np.where использовать, зависит от ситуации
gybson_samara: Uljahn dtype = np.int8 уводит в ТА, она с float больше дружит?
Uljahn: нет
Uljahn: что-то не так делаешь
wlesavo: gybson_samara время померь, уверен что именно таймит? или локально потести
Uljahn: мне кажется, это из-за того, что у тебя нумпай с питонячьими структурами данных смешан
wlesavo: nonzero конечно нетривиальный вывод дает на первый взгляд
Uljahn: желательно что-то одно использовать преимущественно, иначе оверхед на преобразование типов сожрёт весь профит
Uljahn: nonzero и where выдают результаты для использования при индексировании, перевести в 2D массив индексов можно так: np.array(np.where(arr == 0)).T
Uljahn: если arr двухмерный, конечно
wlesavo: Uljahn как применить операцию хитрую для каждой точки без лупа по массиву? есть какиенибудь интересные методы?
wlesavo: типа заполнить соседние точки для этой если они меньше какогото значения
wlesavo: я видел в книге нумпайной такое, но не разобрался с реализацией
wlesavo: я скорее не понял как они к этому массив готовят
wlesavo: ну и сам луп тоже несовсем
Uljahn: есть метод применения функции к элементу массива в зависимости от окружающих элементов, типа свёртки
Uljahn: https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.generic_filter.html
Uljahn: я в пазле minesweeper применял его
Uljahn: типа найти количество мин в окрестности клетки
Uljahn: там небольшая масочка пробегает по всем элементам, выделяет область вокруг, и передаёт в функцию, потом результат записывается в элемент
wlesavo: хм
wlesavo: посмотрел, да похоже
wlesavo: но вроде это не оч быстро
Uljahn: ну, должно быть быстрее, чем на чистом питоне
Uljahn: да и кода писать меньше, плюс грамотно скомпилированные библиотеки могут получать буст от возможностей проца, есть это intel, то рекомендую посмотреть на MKL и ironpython
Uljahn: ой, intelpython конечно
Uljahn: у них свой канал в конде
vrabosh: в золоте играют люди которые перебором ищат пути?
735487: а вообще в золото реально пройти без переборов путей?
vrabosh: я через граф сделал
Uljahn: эйлер что-то про глубину 4 говорил
vrabosh: типа волну пускаю, и он мне показывает где ближайшая точка.. ну и там небольшие манипуляции с весами
vrabosh: что за глубина 4?
wlesavo: amurushkin генерация путей это 30 строчек кода, не ленись :slight_smile:
735487: типа взять перебрать все пути недалекоие и там оценить количество коллизий и сколько сьем? и наверное еще надо тогда учитывать и ближайшее расстояние до следующей пелетки? я пытался заполнить всю карту ими. и потом те что вижу вес восстанавливаю а остальным каждй ход уменьшаю. и идти в место скопления веса. но я хз почему оно не работает хорошо совсем
735487: wlesavo да у меня просто на работе завал. сроки уже давно закончились ))
mykeich: amurushkin раз сроки провалил решил поиграть?:)
wlesavo: я пытался сделать диаграммы вороного и по сумме диаграммы со скидкой определять направление, заработало в разы хуже чем рандомные пути, даже просто учет этого в оценке очень плохо работал
BorisZ: у меня почти без перебора версия старая - нашел для одного пака лучший путь бфсом, потом для второго лучший, если пересекся с первым то следующий пока не утрясутся все
wlesavo: ну с произведением диаграммы на пелетки разумеется сумма
BorisZ: с вороным интересно но сложновато в реализации - они же жрут друг друга (
BorisZ: то есть твоя территория не факт что твоя если тебя опп может съесть
BorisZ: между своими может только - чтоб у всех поровну было?
735487: Uljahn: ты телеграмой пользуешься?
dbf: "потом для второго лучший, если пересекся с первым" - у тебя длинные пути? просто непонятно стоит ли выкидывать путь, если вдали пересекается, все же может поменяться
735487: mykeich: нет я решил контест не кодить )) так для проформы спросил может получиться пару ифов дописать и в золото хотя бы пройти ))
BorisZ: до ближайшей точки пути только, но этого недостаточно явно
735487: wlesavo: я пробовал вороным разделить типа области чтобы свои друг другу не мешали. тоже почему то плохо зашло
BorisZ: я уже списал в утиль эту версию
Uljahn: amurushkin: не очень
BorisZ: там какие-то зубодробильные оценки - дно короче
wlesavo: BorisZ ну там да, деталей много и можно все очень по разному делать, у меня не получилось объективную оценку на этом запилить
vrabosh: BorisZ , я с пересекающимися путями легко решил пробл.. просто пускаешь волну отовсех и у них появляются границы куда они не могут заходить чтоб не пересечься
735487: Uljahn: там просто на канале русского CG комьюнити про тебя спрашивали ))
vrabosh: и в приделах своего поля уже показывает ближайшую жирную точку куда идти
BorisZ: vrabosh скорость то разная
735487: vrabosh это у тебя похоже на вороного как раз
BorisZ: или бфс с учетом скорости?
Uljahn: amurushkin: угу, вижу)
vrabosh: скорость тут не сильно и повлияет
Uljahn: спроси, чего ему надо)
vrabosh: всеравно они к границам не приближаются
BorisZ: ну фиг знает, на первом то ходу точно повлияет, дальше меньше наверное, можно будет перестроится
vrabosh: но бфс не выбирает идеальные пути.. точнее я нашел способ как даже хорошие пути выбирать. но столкнулся с проблемой когда на след ход он хочет назад вернутся
BorisZ: хотя идея запустить бфс с учетом скорости каждого пака не выглядит шибко сложной, можно подумат)
vrabosh: да не как не влияет.. они же к границам не идут. а чтобы с учетом скоростей гдето подошли к границам и еще и встретились. это 1 из миллион ситуац
vrabosh: точно со скоростью можно не парится
BorisZ: ты имеешь ввиду границы карты?
BorisZ: вроде они тут не при чем, мы же с графом работаем, у него нет границ
vrabosh: но с бфс яж говорю.. как искать идеальный путь? он то находит хорошо ближ лижайшие точки.. ну токам можно веса раставить. типа перекресткам больше вес дать..
vrabosh: не карты границы.. а границы где юниты пересикаются.
Uljahn: типа вороного для каждого своего юнита?
Uljahn: а, amurushkin уже это подметил
vrabosh: да
vrabosh: я правда не зна кто такой вороного
S0L0: это плохо работает , у меня так типа вороного
Uljahn: так один юнит не может свою область захватить быстро
vrabosh: во щаз как раз посмотрел.. а вороного
vrabosh: зато они не пересикаются.. и каждый в своей области крутится.. ну и каждый ход же ситуация меняется
S0L0: ну да свои не пересекаются
Uljahn: а, ну если каждый ход перестраивать, то да
S0L0: зато область построения ограничена , порой она с 10 клеток
vrabosh: на нампи оч быстро все это делается.. я даже не парюсь с таблицами.. когда надо для эксперемента новые создаю и забываю даже их отключать)
S0L0: ему негде просто путь искать
vrabosh: честно сказать, они у меня могут заходить за область.. только там веса маленькие
vrabosh: т.е. когда у себя нету поинтов , то он уже ищет у чужего ближ лежащего
vrabosh: если у себя поинта нет, он к союзнику заходит берет то, что ближе
MelnikovIgor: Кто нибудь из топов юзает MCTS или что-то подобное с симуляцией
MelnikovIgor: ?
vrabosh: как симуляции делать? я хочу научится
Uljahn: узнаем в постмортемах)
vrabosh: вообще через волны хорошо они ищат поинты ближайшие и не мешают друг другу.. но пути выбирают не идеальные, не логичные точнее
vrabosh: вот сейчас простенький беребор сделал.. где учитываю ход союзника.. мне кажется лучше пути ищет.. они могут даже рядом ходить но, при этом хорошо собирают и не пересикаюстя
ashelkov: я вообще в шоке от того что вы тут пишете/ вороного, симуляции и прочее/ слышал конечно но хз что такое
==========
что типа bfs - нахожу пути (c запретом возврата назад при поиске) потом по всем путям считаю score ( тут пару коеф которые можно регулировать - unseen coef / distance) потом выбираю лучший путь и вперед
Uljahn: так это по сути всё одно и то же
Uljahn: флудфил ещё
vrabosh: ashelkov , два bfc одновременно это и есть вороного
Uljahn: кто как называет
vrabosh: ashelkov, тоже столкнулся с проблемой что туда сюда ходят если запрет не делать?
ashelkov: ну не ходят ибо score учитывает пройденные клетки
ashelkov: но тем не менее отсекаю их / зачем перенапрягать алгоритм
ashelkov: depth 15 изи считает
vrabosh: у меня бфс всю карту оч быстро считает..
vrabosh: я разные вариации пробовал... порой было по 20 просчетов .. на каждого юнита, как своего так и противника делал.
vrabosh: потом есть еще хитрасть, если пустить обратную волну от жирных точек и просумировать, то он найдет хорошие ходы на ближ лежайшие точки.
ashelkov: противников даж не считаю / просто отсекаю поиск путей там где есть блокеры
vrabosh: вот эта тема мне кажтся хорошо бы заработала в предыдущем конкурсе
vrabosh: я рад, что попробовал решить задачу через бфс, я до этого контеста даж не слышал не разу, что такое графы
vrabosh: просто тут задача для новичка по графам сложноватая.. надо разобраться с алгоритмом когда он может на одну и туже точку по несколько раз ходить..
ilt: vrabosh >>как симуляции делать? я хочу научится
ilt: в рефери есть game.java
ilt: там public void performGameUpdate()
ilt: делает симуляцию одного хода
ilt: перепиши под свой язык и бота
ilt: на входе варианты ходов
ilt: на выходе состояние после хода
vrabosh: впринципе при моей текущем алгоритме, если еще понижать приоритеты точке там где возможно прошелся противник.. то можно и в топ200 попробовать войти
vrabosh: еще и тупиковым ветвям надо приоритет понижать..
vrabosh: тут можно правилами два акаунта делать?
zuko3d: вряд ли
vrabosh: хочу прараллельно через перебор попробовать.. с нуля..
Uljahn: нет, но многие делают
Uljahn: например, некоторые стриммеры стримят со второго акка
vrabosh: повод для бана, пускай даже малейший давать не хочется
Uljahn: попробуешь в мульти
vrabosh: щаз уже наверно допишу за сегодня все тонкости на текущий алгоритм.. и может завтра попробую
gybson_samara: ^^$^%&^&$!!!!!!!!!!!! Забодай меня пчела self.simfield[y][x] == STATE_PACK
AntonT: сравнение вместо присваивания?
Uljahn: классика
Uljahn: а у меня команды для съеденных паков выводятся
vrabosh: а зачем они сделали dead?
Uljahn: чтобы знать, что ты съел противника, когда не видел его
Uljahn: из-за угла например
MelnikovIgor: А там и свои и противники помечаются как DEAD?
MelnikovIgor: до конца игры?
vrabosh: чтобы когда проходишь эту точку, можно былобы сообщения какие нить писать скорбящие)
gybson_samara: притом это одно из самых важных присваиваний в игре
735487: лол решил еще раз взглянуть на код где пытался считать скопления пеллетов. а там я к y прибавляю x )))
vrabosh: Akarchuadra, общается тут?
vrabosh: как он в топы входит?
wlesavo: на скиле
Uljahn: +на опыте
wlesavo: + у него не лапки
Uljahn: справедливо :/
vrabosh: что за лапки?)
MadKnight: он же кот
vrabosh: wlesavo , а ты как топишь?)
MadKnight: https://sun9-7.userapi.com/c628230/v628230735/49ced/Sn8AMqmVXcs.jpg
MadKnight: вот этот кот
wlesavo: vrabosh так я не топлю, 100 максимум при удачном сабмите
MelnikovIgor: Как правильно считать тайм лимит? У меня разброс большой слишком
wlesavo: ща вот хочу прикрутить пару вещей, может даст чето, но скорее всего нет
Uljahn: начинай засекать после первого инпута
MadKnight: "слишком" это сколько MelnikovIgor ?
Uljahn: и GC отключай по возможности
MelnikovIgor: Разброс большой от 50 до 200 мс
MelnikovIgor: до падения
MadKnight: тогда делай как Uljahn говорит
vrabosh: MelnikovIgor, после интупта ставить
MelnikovIgor: это не первый ход
MadKnight: после первого инпута
MadKnight: первого за ход
Uljahn: после первого инпута в цикле
MelnikovIgor: Иногда почему то 200 мс проходит
vrabosh: не после последних?
MelnikovIgor: После 1го ставлю, разброс офигенно большой
MadKnight: покажи
vrabosh: я после последних поставил.. у стало меньше 10мс.. так под 100 было
dbf: > Иногда почему то 200 мс проходит
MelnikovIgor: MadKnight ну у меня нет простого примера
dbf: может это первый ход?
MelnikovIgor: Нет, 1+
Uljahn: иногда проходит чуть больше, но на следующий ход если опять превышение, то точно таймацт
MadKnight: а до чего 200мс проходит? как проверяешь и узнаёшь?
Uljahn: таймаут
vrabosh: потомучто, я сделал ход. потом жду пока противник сделает ход.. и потом мне в инпут результат кидают
vrabosh: после всех инпутов полюбому надо делать
MelnikovIgor: MadKinight, симуляции, на каждые 20 симуляций вывожу прошедшее время
MelnikovIgor: В Error
Uljahn: ну так ты и засекаешь после первого инпута и до вывода команды, vrabosh
MadKnight: покажи строчку после которой время засекаешь
MelnikovIgor: Прошедшее время считает StopWatch после 1го инпута
MelnikovIgor: inputs = Console.ReadLine().Split(' ');
GlobalData.TickSw.Restart();
MelnikovIgor: public static Stopwatch TickSw = new Stopwatch();
Uljahn: язык какой? может таймер неточный
MadKnight: шарп же
MelnikovIgor: C#
MadKnight: да в шарпах же норм таймер
Uljahn: может GC тогда
MadKnight: а чё это за строка инпутов?
MelnikovIgor: Угу, в других контестах проблем не было
MelnikovIgor: Самай первая на ход (после 0 тика
MelnikovIgor: Из примера
Uljahn: наверное, кучу объектов создаёшь, потом сборка мусора тупит
MadKnight: да он бы таймаутнулся просто
vrabosh: да можно после первого интупа.. тазницы нету..
MelnikovIgor: Но это не обьясняет почему 200 мс иногда влезает
MadKnight: и не вывел уже ничего
MelnikovIgor: именно
vrabosh: среднее время отклика 5мс, мне можно еще развернуться
MelnikovIgor: MadKnight давай попробую минимизировать пример, там посомтрю
MadKnight: го
Uljahn: "иногда проходит чуть больше, но на следующий ход если опять превышение, то точно таймаут", т.е. это вопрос к админам
Uljahn: что они там накрутили
Uljahn: го в дискорд
MelnikovIgor: у когдингейма есть гист?
MelnikovIgor: куски кода кидать
MadKnight: ага
MadKnight: они автоматические
MadKnight: когда сообщение больше 4 строк
MelnikovIgor: Минимальный пример довольно точно считает, проблема на моей стороне видимо.
MelnikovIgor: Кому интересно код
MelnikovIgor: http://chat.codingame.com/pastebin/5b7fa301-8f07-4b1c-afbc-8c547d36db38
Uljahn: в шарпе же GC? нельзя его отключить как-нить? либо попробовать переиспользовать объекты, а не создавать новые
MelnikovIgor: GC встрено в рантайм, не отключаетяс
MelnikovIgor: Можешь сам неуправляемо аллоцировать в обход ГЦ и почти как на gk.cf[ gbcfnm
MelnikovIgor: как на плюсах*
MelnikovIgor: Пулинг обьектов норм тема, но это оптимизация, до неё еще не дошел
Akarachudra: Привет. Тут скидывали ссылку на брутер - чтобы бились твои два бота. Может кто повторно скинуть?
MelnikovIgor: О, еще один шарпист, расскажи секрет, юзаешь симы?)
dbf: Akarachudra есть такое, но я не следил насколько это актуальная арена https://github.com/dreignier/cg-brutaltester/
qbit86: Uljahn Например, в .NET Core есть ArrayPool<T>.Shared
qbit86: ArrayPool<T>.Shared.Rent(minimumLength)
MelnikovIgor: Но сам массив и обьекты в нем будут трекаться GC и пиниться в куче
MelnikovIgor: Что все равно лучше чем каждый раз пересоздавать
MelnikovIgor: Да и если глобально смотреть, видимо проблема в алгоритмах, а не в языке
MelnikovIgor: Я особо нигде в язык не упирался, кроме крестиков
qbit86: Пакманы — экземпляры ссылочного типа, они пересоздаются. Но их всего штук пять за ход (нет смысла заморачиваться с пулингом). А все остальные сущности в игре — или значимые типы, или пулятся (все коллекции, например).
MelnikovIgor: Юзаю SmitsiMax получилось очень неочень
MelnikovIgor: Я думал лучше зайдет
MelnikovIgor: Рандомный перебор кажется лучше зашел бы)
ashelkov: ну с богом/ сабмит пошел!
gybson_samara: ААААААААААААААА!!!! self.simfield[pac.y,pac.x] == STATE_FLOOR В двух местах, собака такая
gybson_samara: уже почти всех победил, когда заметил, что в какой-то момент у меня пропала информация о пелетках на карте ...
ashelkov: ну очень неплохо! в топ 7 засабмитило!
gybson_samara: грац
ashelkov: а уже 8
ashelkov: сенк)
MelnikovIgor: ashelkov генетика, мктс?
ashelkov: ни то ни другое/ обычный код )
ashelkov: по факту пасфайндер с оценкой весов каждой клетки
Uljahn: в легу на эвристиках :smiley:
wlesavo: лол https://www.codingame.com/share-replay/464428810
ashelkov: другой вопрос веса подорать верные
ashelkov: тут то конечно неплохо бы генетику прикрутить но я не умею
wlesavo: немая сцена просто в конце
ashelkov: )) прикол
S0L0: так тут задача только на эвристиках и есть , оптимального алгоритма нет как я понял (или не нашел)
MelnikovIgor: ashelkov как борешься с тем что твой оптимальный путь может закрыть другой союзный под?
Uljahn: убирать союзника с дороги?
ashelkov: в оценке пути клеки которые входят в роуты союзников считаются как ноль
Uljahn: а коллизии между своими как избежать?
ashelkov: пасфайндер учитывает blockers - свои - 1клетка и чужие опасные - 2
BorisZ: забавную ошибку нашел - не удалял из возможных точек вкусняху, которую враг съел, а я этого не видел)
BorisZ: так она и жила на карте пока не добегу до нее
ilgiocatore: собирал фантомные вкусняхи
BorisZ: и не увижу своими глазами что правда съели
ashelkov: я эту штуку позавчера сделал))
AntonT: а как определить, что её съели, пока не увидишь, что её нет?
BorisZ: Super-pellets are so bright that they can be seen from everywhere!
BorisZ: вкусняхи всегда дают в видимых точках, неважно видишь их на самом деле или нет
AntonT: аа, вы про супер-пеллеты
wlesavo: BorisZ ......... я даже не подумал об этом
wlesavo: тоже удаляю только когда посмотрю
NightLuna: а вы трекаете соперника?
BorisZ: я ничего не трекаю, бесконца поиск путей переписываю (
tutubalin: раньше просто стеной считал
tutubalin: сейчас вот трекинг дописываю
tutubalin: пока что получилось что-то неясное )
BorisZ: я думал это про невидимых соперников
tutubalin: так и есть
NightLuna: BorisZ, та же проблема, у меня он только ходит и то как-то криво. Надо двигаться дальше, я считаю)
NightLuna: Хотя бы предсказывать, что противник в начале пойдет кушать ближайшую вкусняху и уменьшать вероятность еды там.
wlesavo: у меня трекер в духе противник не дурак и не идет обратно а двигается только в перед, и там где он мог быть вероятность найти еду меньше
wlesavo: но идеального трекинга нет даже близка
wlesavo: близко
NightLuna: а когда ты его увидел, ты как-то учитываешь то, что раньше насчитал?
NightLuna: в смысле пересчитываешь
wlesavo: сначала было так что ближайшую шел есть, потом переписал на то чтобы любую, не знаю что лучше
wlesavo: не, обратного распространения нет никакого, это я уже считаю идеальным)
Uljahn: как в оос траектории отсекать?
NightLuna: в оос мне больше трекать нравилось
wlesavo: ну как обсуждали в общем чатике, трекать куда мог дойти и куда не мог и возможные траектории чтобы он здесь на этом ходу оказался
wlesavo: и по этим тректориям еду убирать
wlesavo: в ooc там понятно было что такое идеальный трекинг, здесь как то не очень, слишком много вариантов
NightLuna: ага
Uljahn: да и времени там побольше было на контест
NightLuna: что за возможные траектории?
wlesavo: я ща прикручу атаку из тени, отсекание корридоров и проверку убийств в корридорах, и если это все ничего не даст то забью пожалуй
wlesavo: NightLuna ну в каждую точки ведет несколько разных траекторий, иногда одинаковой иногда разной длины, их все можно посчитать впринципе
vrabosh: я походу нашел алгоритм как находить лучшую для себя 10ку
wlesavo: и если ты увидел соперника и знаешь сколько времени прошло это отсекает большую часть траекторий, но все равно останется чаще всего несколько возможных
NightLuna: типа увидел соперника и убрал всю еду по путям, по которым он мог до этой точки дойти с последней вашей встречи?
vrabosh: опять через тогоже вороного..
wlesavo: ну не всю, но уменьшил вес в зависимости от количества вариантов по которым он мог пройти
NightLuna: ну да, понятно
wlesavo: и там где точно прошел точно убираешь
vrabosh: я так в одной парнии акарачудра выграл засчет того, что прально на десяти походил.. ну унего круто поинты собирает
wlesavo: потому что общая часть траектории всегда будет
NightLuna: ага, спасибо
NightLuna: а еще, ни у кого нет проблем с тем, что, когда скорость 2, пак проскакиевает через поворот, смекает, что выбрал не то направление и возвращается
vrabosh: NightLuna, уже как второй день хочу прикрутить, чтобы убирал точки где противник точно прошелся или пройдется. т.е. если в ветку пошел то с 90% он ее всю пройдет, не вернется обратно на пол пути
Uljahn: так может он думал, что за поворотом еда, зашёл, увидел, передумал)
Uljahn: veni, vidi, Automaton2000
Automaton2000: а у меня в общаке смайлы не показывает
NightLuna: да, думал, что есть, а ее нет у меня оч часто такое, надеюсь с трекингом уменьшится
vrabosh: еще можно сделать , если он видеть за углом нет поинта, понижать ветвь этого угла в приоритете
NightLuna: просто у меня была мысль на поворотах снижать скорость, но кажется, что это бред какой-то
NightLuna: ну да, можно понижать приоритет углов
NightLuna: ладно, пойду попробую трекинг сделать, может что выйдет
vrabosh: зачем, ты забежал, нечего нет.. можешь смело отсекать всю ветвь
vrabosh: что пойти вперед на скорости, что в поворот разницы нет. что там, что там может нечего не быть
BorisZ: вперед то видно есть или нет
Uljahn: так если кордор длинный и пустой, то придётся возвращаться, т.е. один шаг теряешь
vrabosh: да, лучше пускай поверяет..
Uljahn: так и с перекрёстка можно проверить, не обязательно углубляться
vrabosh: он боговым зрением не видит координаты есть или нет?
Uljahn: нет
vrabosh: если я на перекресток стал, то он все углы покажет?
Uljahn: да
vrabosh: тогда выгодно становиться на перекрестки
Uljahn: тут видимо от длины коридора зависит и потенциальной награды
NightLuna: о, легенда появилась
NightLuna: ахах, нет, это я не тот контест случайно открыла XD
Uljahn: фух
NightLuna: :grinning:
Uljahn: а то я ещё не выбрал, за кого болеть буду)
vrabosh: тут надо было карту строить подругому чуть
vrabosh: по двушкам сразу..
Uljahn: прикольно будет, если жс боссом выберут))
vrabosh: чтобы любой ход был точно на перекрестке
vrabosh: тогда и перебор бы лушче зашел.
BorisZ: Uljahn это по божески, лишь бы PHP не выбрали )
vrabosh: реально тактика включать спид на четных клетках и ходить по двушкам угловым несколько проблем решает..
vrabosh: и вероятность наткнуться на противника уменшается. т.е. в одному случае..
Hamibar: что-то не открывают легенду (
Uljahn: открыли же
Akarachudra: Открыли, вангую, что в этот раз в легенде будет много людей. Высокий рандом.
Hamibar: ну я же писал 2 минуты назад)
Hamibar: все резко начали сабмитить)
Uljahn: внезапно начал вместо pacs писать pods, крыша едет :relieved:
MadKnight: гоночки зовут
gybson_samara: я постоянно pack пишу вместо pac
Uljahn: это тоже
wlesavo: ну что Hamibar думаешь запушат ща?
Hamibar: вот сижу смотрю
Hamibar: уже оч близко
Hamibar: а вот и запушили
wlesavo: поздравляю)
wlesavo: джоли запушил
Hamibar: Ага. Хотя в иде ему проигрываю чаще по ощущениям.
wlesavo: он не только тебя запушил, вообще похоже босса просадил хорошо
Hamibar: он даже не столько меня запушил, он боса сильно опутил
Hamibar: фух. Еще думал ресабмитить или нет.
wlesavo: хм, толи эти маленькие улучшения сработали, то ли то что легенда открылась но лучший сабмит за долгое время
wlesavo: есть надежда на легенду таки
Akarachudra: если кому интересно. посещать тупики с "низким приоритетом" даёт прирост в винрейте примерно 3%.
Hamibar: Но на самом деле это плохо, что запушили. Если бы так и остался в голде, то пошел бы кодить, а сейчас даже не знаю.
Hamibar: интересно. Интуитивно кажется что не должно. Но с процентами не поспоришь)
wlesavo: Akarachudra ну еще зависит от того с кем играешь наверное, ты по топам статистику брал?
Akarachudra: ну и это для моего бота, соответственно
Akarachudra: думаю, если грамотно рассчитать веса, то и все 5-6 можно выжать.
wlesavo: просто на лоу рангах может большле давать а может и меньше или вредить
wlesavo: но да, по крайней мере есть параметр за который дергать
gybson_samara: если это дает вин, то почему не поднять приоритет?
wlesavo: хм, засабмитился на 30е, появляется вера в легенду потихонечку
Hamibar: давай в легенду. Она резиновая)
gybson_samara: 20 игр - 2 луза, похоже хороший сабмит
gybson_samara: правда в бронзе =)
Uljahn: без меня в серебро собрался? :crying_cat_face:
gybson_samara: кстати, мне нужен твой совет
gybson_samara: как найти все точки вектора от определенной пока не встречу -100
gybson_samara: и обработать их по условию
gybson_samara: ифами тоже не долго, но скоро каждая микросекунда будет на счету
wlesavo: у меня вижн на цикле обычном, это разовая операция, не особо че ест
gybson_samara: ну так-то да
gybson_samara: 91% - 2
gybson_samara: держите кулачки
wlesavo: изи
wlesavo: должен пройти
Uljahn: хз как нумпайно это сделать, в инете не нашёл, делаю через поиск индекса, потом слайс генерю
gybson_samara: даже если сейчас не пройду, то скорее всего через час-другой затащит
Uljahn: да, дофига сабмитов
gybson_samara: ну пока на 7 завис
gybson_samara: в принципе у меня набралось несколько волшебных чисел, которые просчитать бы в симуляции
gybson_samara: 7 ходов максимум считаю, а надо иногда и 8 =)
gybson_samara: который сейчас 2, он либо считает глубже, либо тупо на скорости летит к большой точке
gybson_samara: я, кстати, поставил в веса количество свободных ячеек рядом, но не уверен, что сильно повлияло
WhiteCrow: А я в него верил! https://www.codingame.com/replay/464676089
gybson_samara: ору =)
gybson_samara: мне кажется ему было проще твоего последнего сожрать для выигрыша
gybson_samara: посто толпой пропылесосить и убить
gybson_samara: а у меня вон как красиво большие подъедает https://www.codingame.com/share-replay/464715060
OVERbe: Народ подтолкните в нужном направлении, бронзу не могу пройти нахрапом))))
gybson_samara: такое ощущение, чт осейчас в бронзе конкуренция выше, чем в леге
gybson_samara: def find_pellet(self, pac): http://chat.codingame.com/pastebin/9fcbf0af-7e61-436b-b7d3-890bcd28b3eb
gybson_samara: вот такую функцию делаешь и какие координаты вернула, туда и ходишь
gybson_samara: аа, бронзу, прочитал "в бронзу"
gybson_samara: нахрапом не пройдешь скорее всего
OVERbe: Спасибо, пошел применять
Uljahn: неделю не сабмитил в бронзе, кодил-улучшал, и ресабмитнулся почти на то же место :smiley:
Uljahn: Automaton2000: да пошло оно всё :)
Automaton2000: эйлер что-то про глубину 4 говорил
Hamibar: это стабильность
wlesavo: Uljahn ресабмитни еще пару раз
wlesavo: у меня один и тот же код сабмитится то на 40е то на 200е
wlesavo: а в бронзе там же миллион людей вообще
ashelkov: пока я тут пил пиво - в леге уже аж 40 людей
Uljahn: основных фич всё равно ещё нету, я больше с нумпи развлекался
gybson_samara: баги все смешнее и смешнее
735487: Uljahn: меня протолкнуло в серебро правильный подбор больших на старте, учет скорости врага когда смотрит дистанцию не надо ли свитчнуться и скорость включать только если не видишь врага
gybson_samara: "правильный подбор больших на старте" - вот вот
gybson_samara: меня именно это в первой двадцатке держит
735487: в моем варианте это было так. сначала я искал ближайшего для первого потом для второго и так далее. в итоге могли идти совсем не так как ближе. стал искать ближнего более правильно перебором всех на всех
gybson_samara: победа со счетом 114-114, забавно
zuko3d: уверенная победа =)
735487: ничья же должна
gybson_samara: оба первые, но мой ник сверху
ashelkov: но чейто должен быть свеху)
gybson_samara: ну сабмитну нафиг
ashelkov: не стремно? )
gybson_samara: а то чет медленно с 19 до 12 дополз
OVERbe: Вот это дерзкая победа)) встретились два спеуиалиста))) https://www.codingame.com/share-replay/464734955
OVERbe: Вот это дерзкая победа)) встретились два специалиста))) https://www.codingame.com/share-replay/464734955
gybson_samara: Знатный охотник №1, примерно 30 ход https://www.codingame.com/replay/464710330
gybson_samara: знатный охотник №2 https://www.codingame.com/replay/464737798
Uljahn: тоже сабмитну, добавил одну важную строчку - назначение цели :joy:
gybson_samara: OVERbe вот тебе и идея для стартапа - SWITCH
ashelkov: обожаю пересматривать проигрыши и искать где твой пак не так повернул и как это можно улучшить)
wlesavo: Uljahn ща сразу промоут будет))
wlesavo: я наконец убедил себя захардкодить убийства
wlesavo: раз уж всеравно тупики нахожу все
A2CHisPerfect: ashelkov можно ли фильтровать last battles что бы увидеть где ты проиграл?
ashelkov: я не знаю можно ли/ я то их из LastBattlesTB смотрю
gybson_samara: я весь вечер мотаюсь в топ-50 и это да, челлендж!
Uljahn: так вроде если твоя ава справа - то проиграл
gybson_samara: или ничья
Uljahn: ну, там номер места ещё на аве пишут
Uljahn: в last battles-то
Uljahn: 1-й или 2-й, если оба первых, то ничья, очевидно, если 2-й, то проиграл)
A2CHisPerfect: спс
gybson_samara: https://img.gazeta.ru/files3/821/11840821/upload-3-pic668-668x444-44449.jpg
gybson_samara: 98% - 2
gybson_samara: психологически готов к облому
gybson_samara: обломался =)
gybson_samara: но и идея возникла, в довесок к просчитанному пути считать, сколько там еще по прямой вкусняшек
Dmitry_Mandzyuk: у кого таймауты в коде выскакивают непойми почему?
gybson_samara: Спанч Боб сквейр пэнтс?
gybson_samara: у меня такое было просто после замены типа данных в массиве нампи
Dmitry_Mandzyuk: нампи это что?
gybson_samara: библиотека в питоне
Dmitry_Mandzyuk: понятно, не знаю питона)
gybson_samara: его походу никто не знает
Dmitry_Mandzyuk: Uljahn вроде знает
zuko3d: ну питон+нампи я вроде неплохо знаю... если будут вопросы - можно задавать =)
gybson_samara: ну как надоедает третьим сидеть, будем теребить мэджик намберс
gybson_samara: о, второй
Hamibar: капец в леге боев. 500 за 5 часов.
gybson_samara: устают сильно
Dmitry_Mandzyuk: хз про легу, но в этом челлендже я не представляю что надо написать чтобы даже в серебро пройти
Hamibar: нужно написать хороший сбор. Чтобы не сталкивались не ходили паравозиком. ДУмаю будет достаточно
gybson_samara: пару дней назад пошло бы
Dmitry_Mandzyuk: ну паровозиком не ходят, а сталкивание не могу победить
gybson_samara: ну вот я и в серебре
Dmitry_Mandzyuk: а сейчас вообще таймауты которых раньше не было
Hamibar: gybson_samara го теперь в золото
gybson_samara: Hamibar на это и расчет был =)
Hamibar: день на золото, день на легу и в последний день топ 1) изи план
gybson_samara: а главное реальный
Akarachudra: Just do it! Let's your dreams come true!
Ivan_Legion: чтобы не сталкивались нужно резевировать клетки
ilgiocatore: лол, серебряный босс проиграл по таймауту
zuko3d: или водить их по разным частям карты
ashelkov: в топ6 4 венгрии/ все друзья кови чтоли?
tutubalin: кови это кто?
ashelkov: kovi. чувак в топе постоянно/ и на корабликах тоже был
tutubalin: венгрии в топ6 нет, есть франция
ashelkov: франция топ1 потом три венгра
ashelkov: 4 даже уже
tutubalin: пардон, не туда смотрел )
ashelkov: да ничо)
tutubalin: я по другому сайту знаю kov из венгрии. тоже крутой программер, но фотка другая
tutubalin: а может побрился )
ashelkov: навреное))
ashelkov: или отрастил
BorisZ: т1024 в райках постоянно участвует, он из снг
BorisZ: русскоговорящий наверное правильно будет сказать
gybson_samara: прикольно подниматься в новой лиге просто потому, что другие фейлят свои алгоритмы
gybson_samara: какие злые ребята в серебре
zazaka: а тут можно глянуть что накодили другие ?
gybson_samara: нет
zazaka: ясно ( интересно было что топ понаписывал
gybson_samara: херню они понаписали, а мы должны это доказать
wlesavo: zazaka потом почитаешь в пмах
wlesavo: легенда к утрк будет больше чем в ooc
wlesavo: в ooc после за ночь не было ни одного промоута помню
wlesavo: +- стабильно сабмичусь в районе 30го но че то не хватает немного
wlesavo: даже не знаю чего
ilgiocatore: а я пытаюсь на костылях въехать хотя бы в голду. всегда так обидно заканчивать контест до отведенного срока из-за других неотложных дел
ilgiocatore: всегда кажется, что вот было бы еще пару свободных дней, то точно бы в топ-10 влетел (нет)
gybson_samara: ну нет, я пишу империю для следующего контенста
BorisZ: у меня 4 сабмита подряд места примерно с 220 по 80, один и тот же бот, сейчас наверх закинуло, стабильности нет
BorisZ: метагейм видимо какой-то разный совсем в разных частях таблицы
BorisZ: может все сожрать врага пытаются в серединке а вверху шарахаются
BorisZ: но все равно до босса далеко, без улучшений не доползти
BorisZ: нужен гол
wlesavo: BorisZ какие идеи ближайшие?
wlesavo: у меня остались только сник килы
wlesavo: но я не думаю что они до легенды помогут
wlesavo: хотел в легенде тестить уже если пройду
wlesavo: по логике трекер нужен получше
BorisZ: планирую переписать поиск путей - перестать их генерить наобум, выбирать осмысленно
wlesavo: а у тебя нет этого?
wlesavo: у меня это с вуда еще
ashelkov: )) я до голды пробился простым выбором таргетов без путей - то есть тупо указывал координаты
BorisZ: есть так то, я не просто случайные генерю, но надо еще меньше генерить
ashelkov: ну не совсе тупо если честно
wlesavo: я первое что сделал скопировал генератор путей из оос
wlesavo: ну я генерю такие чтобы не возвращаться и не пересекаться
ashelkov: Boris запрети возврат через шею при генерировании путей
wlesavo: ashelkov какие еще простые идеи есть на поверхности лежащие?
ashelkov: оставб только если нет других валидных
BorisZ: у меня и так не генерятся такие - только до точек по сути
ashelkov: wlesawo - да вот только нашел что некоторые моки паки бегут на чужие большие пеллеты в начале
ashelkov: надо найти чужие вначале и задекризить их велью
wlesavo: я это пытался убрать, но чето у меня зафейлилось
andrey-vinokurov: Ну значит можно садиться писать, раз так все просто :)
wlesavo: ну кстати я пытался захардкодить, можно реально просто уменьшить стоимость
ashelkov: ну ты ввел коефы? unseen and distance у меня
dbf: " надо найти чужие вначале и задекризить их велью " это легко сделать, но я пару раз попадал, что враг вел себя странно, но я не брал его десятку, потому что не по плану
wlesavo: да, тоже есть
ashelkov: хм щасс гляну что там еще
wlesavo: у меня такое ощущение что я чтото очевидное упускаю
BorisZ: ashelkov ты имеешь ввиду на первом ходу раскидать на свои и чужие а потом чужие не замать?
wlesavo: BorisZ да
BorisZ: пока позиции известны
wlesavo: я пыталдся вообще захардкодить поведение
wlesavo: но определить свои-чужие проще
wlesavo: там есть неочевидные места когда один пак должен взять две
ashelkov: а меняешь unseen коэф от количества оставшихся пеллеток
wlesavo: нет
wlesavo: пытался но у меня чето плохо вышло
ashelkov: очень разные результаты дает этот коефициент/ вначале должен быть высоким чтоб паки разведывали
wlesavo: ща попробую
ashelkov: и заходили за углы
BorisZ: точно со счетом можно еще поработать, что-нибудь да удастся выцыганить всяко если подумать
ashelkov: а потом собсно сосредоточились на видимых ранее
wlesavo: ashelkov спасибо, выглядит просто, ща попробую прикрутить
ashelkov: в таких играх надо по максимуму собирать производную инфу из инпутов а потом уже думать как ее применять
ashelkov: я по факту сегодня коефициенты тюнил только
gybson_samara: +1, сижу тюню коэффициэнты
wlesavo: я наоборот прямо много чего прикрутил сегодня
OVERbe: я думаю важно, хранить историю прошлых ходов. Хотя бы пару, по каждому своему паку.
wlesavo: проверку убийств, тупики, мелкие баги пофиксил
ashelkov: у меня у каждого пака полная история пути но по факту юзаются только последние пару
ashelkov: для детекта коллизий
wlesavo: OVERbe у меня вроде паки без причины не возвращаются, только застрявших на углах детекчу, и то не делаю ничего с этой инфой
ashelkov: у врагов есть seenAgo - сколько тернов назад видел и где
wlesavo: ну это тоже есть
ashelkov: но по идее плвавющий и правильно настроенный unseen. coef должен дать хороший буст
wlesavo: ashelkov у тебя есть убийства изза угла? то есть если твоего пака точно не видят не пытаешься им убить чужого которого точно видишь?
ashelkov: вообще не парюсь с этим
ashelkov: все убийства случанйы
ashelkov: гляаное COLLECT
ashelkov: идея то хорошая я думал про расчет убийств изза угла
Akarachudra: могу совет дать как по-простому "угадать" где был противник. у меня был такой подход на самом старте. я просто в конце хода зеркалил свою карту открытых точек и уменьшал вес зеркальным точкам. и это работало. но делалось это до определенного хода.
wlesavo: я проверяю своих паков на видимый/невидимый
wlesavo: но пока ничего с этим не делаю
ashelkov: кстати/ да я думал свой пасфайндер применить к чужим пакам и задекризить велью пройденных клеток
wlesavo: Akarachudra спс, тоже думал об этом но почему то так и не сделал
Akarachudra: Width - x - 1. Это очень просто.
wlesavo: ну да зеркалить проще всего
BorisZ: до вкуснях то практически надежно можно уменьшить вес сильно
ashelkov: ))щас такой закодю видс -1 и в топ ))
Akarachudra: BorisZ всё верно. До вкуснях железно, а дальше - уже осторожно.
ashelkov: все в путь ! надо покодить хоть
wlesavo: cjukfcty
wlesavo: cjukfcty
wlesavo: да блин
wlesavo: )
ashelkov: ))
wlesavo: согласен
wlesavo: пойду тоже
gybson_samara: в середине серебра устаканюсь и ладно
gybson_samara: завтра все
gybson_samara: точнол все
wlesavo: спасибо за идеи, завтра потюню, так вроде все работает
tutubalin: сломанный трекинг противника даёт результаты лучше, чем тот же трекинг с фиксом