Chat:Ru/2020-11-15
tutubalin: моего бота иногда вглючивает - он начинает тупо учить все спеллы подряд, пока книжка не кончится, а потом начинает делать дела
tutubalin: вот тут ему противник дал достаточно времени, чтобы спокойно почитать книжку до корки https://www.codingame.com/share-replay/502144458
BorisZ: у топов редко дольше 40 раундов длится игра
BorisZ: https://www.codingame.com/replay/502011970
BorisZ: вобще за 30
tutubalin: ну у меня идея та же - быстрый раш
tutubalin: но где-то что-то пошло не так )
wlesavo: у inoryy неплохой шанс стать боссом сейчас
wlesavo: да, сабмиты сегодня будут по несколько часов похоже
Sprattus: Подскажите, пожалуйста (C++):
Хочу вывести int со структуры и сразу же заменить его на строку. Ну, скажем, 1 заменить на "Январь". Можно это как-то красиво организовать на уровне структуры или каких-то других особенностей языка?
735487: сделай метод toString
735487: смотря что тебе надо. если просто вывод то можно оператор << переопределить
Bezukh: Можно переопределить оператор для конкретного поля структуры или нужно для всей целиком? Например, поле day при выводе мне хочется оставить в целочисленном виде.
Bezukh: Пока что, действительно, создать отдельную функцию кажется самым логичным решением. Мне просто было интересно, может есть какие-то макросы (или что-то в этом роде) для автоматической подмены одного на другое.
735487: оператор насколько я понимаю для всей структуры надо делать и выводить сразу там все поля как надо
tutubalin: ты можешь определить класс Месяц и у него уже переопределить оператор <<
tutubalin: либо в самой структуре в той функции/операторе, который её выводит, делать преобразование из числа в название месяца
wlesavo: короче предсказание противника хотя бы примитивное решает для эндгейма
wlesavo: ну и правильный конец симы тоже
Bezukh: Если кому-то вдруг интересно, сделал так: http://chat.codingame.com/pastebin/1c908e40-80ae-4c9d-8156-db74f8515be7
BorisZ: Bezukh нормально, простые решения лучше сложных)
BorisZ: параметр int по значению передать лучше и массив объявить как static но это мелочи
BorisZ: сабмиты и правда жутко долгие стали
MadKnight: чё, кто-нить запилил более интересный выбор новых заклинаний?
NightLuna: такая скорость обычно в последний день ><
BorisZ: более интересный чем что?
MadKnight: ну или в воскресенье
MadKnight: отличный день чтобы поспамить сабмитами
MadKnight: тем более 3к людей
BorisZ: я запилил ГА но получилось очень хреново - буду переделвывать
MadKnight: более интересный чем просто if(not bad)
MadKnight: ГА же только для физики
MadKnight: и то не очень надёжный
MadKnight: и вообще 2016
MadKnight: как ты собрался скрещивать солюшены, когда изменение хода в середине полностью меняет исход от всех последующих ходов?
BorisZ: без скрещивания - мутации и свапы генов
MadKnight: а чё за свапы генов?
BorisZ: хреново получилось я ж говорю
MadKnight: как ты собрался свапать гены, когда изменение хода в середине полностью меняет исход от всех последующих ходов?
BorisZ: ну вместо смены рандомного гена - меняю местами 2 рандомных гена
NightLuna: а что модно в 2020?
MadKnight: всякие MCTS и смитси
BorisZ: если б задачка легко ложилась на какой-то известный поиск то все бы уже его запилили
NightLuna: чет совсем не двигается =(
BorisZ: тут надо рожать что-то свое или сильно затачивать
BorisZ: перезагрузите компьютер
Xanrum: я пока взял 61 место на десятке ифов, особо не симулируя и не смотря на статус противника. Я думаю еще не пришли достаточно серьезные противники
Xanrum: а под топ 10 точить - это такое
BorisZ: Xanrum у тебя бот пишет brute forse )
BorisZ: про 10 ифоф не пишет )
Xanrum: Ж
NightLuna: :grinning:
Xanrum: : D ага пишет когда не придумал по обычным ифам что сделать
tutubalin: BorisZ бот специально вводит в заблуждение. не признаётся про ноу-хау
MadKnight: NightLuna если не двигается долго - перезаливай
MadKnight: либо это сервер жутко тупит
NightLuna: у всех не двигается
MadKnight: он мог затупить у всех и не продолжить старые сабмиты когда раступил
MadKnight: а не
MadKnight: не в этот раз
MadKnight: в общаке пишут что сервак лёг
NightLuna: похоже ему стало лучше, у меня 11 и 12 игры прошли
MadKnight: oo
MadKnight: в общаке написали что пофиксили
Jokero: А spell на выходе всегда содержит один компонент?
Uljahn: это как?
Uljahn: есть разные спеллы
Uljahn: в рефери описаны все 42 возможных + 4 стартовых
Uljahn: (-4, 0, 1, 1) - т2 и т3 за 4 т0
Uljahn: типа такого?
Jokero: ага, спасиб. я про рефери и забыл)
kreo: Что такое рефери?)
BorisZ: kreo программа которая управляет одним матчем - запускает код соперников, дает им инпуты, забирает аутпуты, ведет счет, считает веремя
Uljahn: в правилах есть линк на гитхаб
BorisZ: ссылка на гитхаб в описании где-то
kreo: А, не знал
kreo: Если все спеллы захардкожены заранее, это вообще другая игра получается
Uljahn: заказы тоже захардкожены
Uljahn: случаен только порядок перемешивания, да и то он привязан к сиду
BorisZ: почему - захрардкожен только пул спеллов, в игру то они влезают случайно - от сида
BorisZ: с другим сидом будет другой набор
Uljahn: в смысле сами спеллы не случайны по параметрам
Uljahn: 42+4 спелла, 36 заказов
BorisZ: бот не знает сида и не знает какой спелл в книге или рецепт появится следующим
Uljahn: точно не знает, но может предположить с некоторой вероятностью
BorisZ: можно делать какие-то вероятностные предположения, но сейчас об этом рано думать )
Uljahn: точно известны уже вышедшие заклы и заказы
BorisZ: Uljahn в топ100 6 ботов на питоне - вот оно как
BorisZ: видимо они наш чат не читают
Uljahn: ну, значит последний числодробильный контест теперь не XR
BorisZ: мы тут питон похоронили, а пацаны то не знают
Uljahn: а что в нашем чате писали про это?
Xanrum: а что плохого в числодроблении?
Uljahn: ну, в общаке уже давно никто не воспринимает питон как рациональный выбор
Uljahn: в данном контесте
BorisZ: я с пеной у рта доказывал что на КГ не будет больше таких контестов
BorisZ: отпугивают казуалов
BorisZ: а они за массовость борются
zuko3d: казуалам поф на легу, а в остальным лигах питон ок
Xanrum: смотря как отрежут легу
Uljahn: как обычно - 10-15 сразу
Uljahn: остальные страдают
BorisZ: хреново отрежут (
BorisZ: последние разы брали 10-20 бота в качестве босса
Uljahn: в подлодках вроде босс голды на питоне был (wlesavo) или память подводит?
wlesavo: да
BorisZ: потом за выходные в районе сотни еще закатывалось но это нервотрепка
wlesavo: с 10го места взяли в корабликах тогда
wlesavo: запилил примитивное предсказание оппонента, не знаю даст чето или нет
Uljahn: сомневаюсь, что у них будет такой выбор в этот раз
kreo: А на КГ дают футболочки за контесты?
Uljahn: за топ-20
kreo: Чё так жабисто :(
Uljahn: но на питоне в топ-20 не войти в этот раз
kreo: Да это понятно
Uljahn: раньше за топ-50 давали и призы за первые три места
Uljahn: у них стартап небольшой же, не мылору
Uljahn: да и контесты раньше чаще были, 4-5 в год
kreo: Ну железа у КГ как будто побольше, чем у мыла
kreo: Намного больше боёв в единицу времени
kreo: И графоний получше :)
Uljahn: там какие-то убитые инстансы на амазоне или типа того
Uljahn: постоянные таймауты
Uljahn: да и встаёт всё как сейчас
wlesavo: вовремя я успел футболку отжать, жалко ачивку за первое место в языке чутка не получилось, теперь на плюсах без шансов конечно на такое
kreo: Бери Rust - перф такой же, конкуренция за ачивку меньше :)
Uljahn: плюс можно затруднить игры в IDE
kreo: Кстати я только сейчас об этом подумал
kreo: Что страдаю не только я, но и оппоненты
ilgiocatore: я до сих пор вспоминаю своё 22е место в марафоне LoCM на котлине, и тогда умудрился не взять ачивку за первое место в языке, кто-то из топ-20 был на котлине тоже
ilgiocatore: так близко футболка была
Xanrum: а я в прошлый раз взял ачивку за первый в языке, первый раз участвуя
Uljahn: а мне дали футболку за FB (там рандомом из топ-200 выбирали), а она не дошла))
Uljahn: да и пофиг, читерская футболка не нужна :)
kreo: Скажите, если я попадаю в лигу, то меня в предыдущую уже не задаунгрейдят? Или как тут лиги работают
ilgiocatore: обратно вниз не кидает
wlesavo: ilgiocatore вот да, у меня было 19-ое, большую часть контеста держал, а под конец обошли на 2 места
NightLuna: чувак на первом месте сейчас на расте, а вы говорите конкуренция небольшая)
ilgiocatore: я вот понять не могу, у него какой-то бот странный или это баг CG - если его бота ставить в ide, то он всем проигрывает - перестает варить зелья и начинает бесконечно учить заклинания
tomatoes: это раст на цг так сделан
ilgiocatore: я для сравнения еще посмотрел другой бот на расте, который в районе 20го места - у него такого нет
Hoggins: вероятно иде можно задетектить на расте и почему бы это не сделать ))
NightLuna: был же какой-то прикол, что можно читерить.. типа в ide запускается в релизе, а в арене в дебаге и можно иф написать
ilgiocatore: аа, понятно
NightLuna: удобно, можно прятать бота, не теряя место
ilgiocatore: ну все равно можно посмотреть его катки в сабмите, особо смысла в этом нет
NightLuna: ну тренироваться играть против него сложнее становится
kreo: Это так раст на КГ сделан - в ide он запускается в дебаге, а на арене в релизе
kreo: Мой бот в IDE таймаутится моментально тоже
kreo: Разница между дебаг и релиз сборкой по скорости драматическая
NightLuna: а почему раст в релизе, а плюсы в дебаге?
kreo: В плюсах ты можешь себе релиз прагмой поставить, в Расте нет
kreo: Если правильно помню, по дефолту в плюсах дебаг, чтобы ресурсы экономить. Типа 90% пользователей это не легенда и им релиз не нужен, а прошаренные сами поставят прагму)
AlexisMolestos: у меня 624 место, как думаете попаду в следующую лигу?
NightLuna: kreo, для экономии ресурсов, логично
NightLuna: AlexisMolestos, не понятно, но уже скоро узнаем
tutubalin: на VB надо писать. конкуренции почти нет
tutubalin: о! а лучше всего на D
Xanrum: тогда уж на баше?
tutubalin: быстродействие от сей мало отличается, зато синтаксический сахар и 4 конкурента, лучший их которых на 783м
zuko3d: kreo а какую прагму написать чтобы был релиз?
NightLuna: #pragma GCC optimize "Ofast,unroll-loops,omit-frame-pointer,inline"
- pragma GCC option("arch=native", "tune=native", "no-zero-upper")
- pragma GCC target("rdrnd", "popcnt", "avx", "bmi2")
MelnikovIgor: У всех прогон висит?)
ilgiocatore: висит, да
NightLuna: раньше же вроде было, что наводишь на лигу и показывает, когда другие откроются
NightLuna: а, надо нажать
Zhmyh: А прагмы надо вручную включать, или когда сабмитишь, они сами включаются?
NightLuna: вручную
zuko3d: чёт у меня прагмы не дали ничего
Zhmyh: У меня -2 мс на ход
zuko3d: что с ними, что без них - примерно одинаковая производительность. их просто в начало вписать же надо?
Zhmyh: Да, в начало
NightLuna: https://www.codingame.com/forum/t/c-and-the-o3-compilation-flag/1670
NightLuna: вот тут магус пишет. что прагма не то же самое, что флаг компиляции, почему тогда раст в релизе? все же говорят, что он такой же быстрый
tomatoes: раст в дебаге оч медленный
tomatoes: в среднем где-то в 20 раз медленнее получается. судя по текущему контесту и крестикам
kreo: Просто у них дебильная архитектура сервиса емнип, код компилируется каждый раз заново в каждой игре - вместо того, чтобы компилить его 1 раз
kreo: Поэтому они начинают страдать фигнёй типа отключения оптимизаций, чтобы время компиляции снизить
Uljahn: именно так, самописная архитектура из 2014-го или даже раньше, когда тот же докер только зарождался
Zero0: Кто знает, если говорить, что после, оно подвешивает или так кажется?
Zero0: в смысле, в игре после команды?
tomatoes: подвешивает и переключается на противника
Uljahn: вроде бы, процессу твоего бота назначается минимальный приоритет, пока выполняется код противника и наоборот, подробностями админы редко делятся, по крохам инфу собираем
Uljahn: кстати, можно ли как-то при игре против своего бота определить, что оба процесса исполняюся на одном физическом ядре, или хотя бы имеют общий кэш?
Zero0: Интересно, конечно, можно было раньше /proc читать, вроде, скорей всего можно это как-то вынуть, например пробовать /proc/pid - пид/stat , или /proc/ pid /task/ -tid/status там поле processor , шестое с конца, не ? но они же не работают постоянно, могут спать, потом включаться на другом ядре, не?
Uljahn: спасибо за наводку, а то я proc читаю, чтобы частоту и размер кэша определять
Uljahn: не шарю в линуксах :(
BookSaver: Uljahn, а почему твой бот учит все заклы??? Он же ничего больше не успевает делать?
Uljahn: это для тестов
Uljahn: я против себя играю
BorisZ: если на разных процах соперники играют то это как-то несправедливо, должны быть на одном
Uljahn: не на разных процах, это точно, но вот на разных ли ядрах, или приоритетом разруливается всё
Uljahn: потому что если кэш общий, то возможно влияние ботов друг на друга
BorisZ: ну это какие-то совсем сложности, проще считать что не влияют
Uljahn: да я в плане изучения технологий интересуюсь
Hoggins: ваш разговор натолкнул на мысль попробовать использовать время между ходами для сборки мусора :)
Uljahn: кто-то пробовал, вроде. если правильно помню, 2-3мс можно выгадать
BorisZ: если можно его отключить и стартовать вручную, то можно это делать в начале хода - будет хоть понятно сколько времени осталось
Uljahn: тут пики по 10-15 мс случаются на ровном месте, не понятно, куда копать
Uljahn: в питоне особо не пособираешь, import gc; gc.collect() как-то не влияет, либо я не туда смотрю
BorisZ: но вобще можно соптимизировать чтоб он не дергался - создать на первом ходу все что нужно а потом самому выделять
BorisZ: в крестиках кто-то воевал с джавой тут, не помню чем кончилось
Hoggins: так сложнее писать. В этом контесте я пока не дошел до проблем с гц, пока только с мозгами
Xanrum: тут два варианта, или много думать, или много перебирать - забуферизировав все что буферизируется
Xanrum: я вот все думаю - как лучше - выделить пул массивов заранее, или мучаться выделяя их на стэке?
Zero0: тут, проверил "ps -axo psr,pid,cmd" запускается без проблем, "psr" - процсесор на котором процесс. правда только на арене не пробовал пока
Zero0: т.е. можно запустит это команду, я запускал по полному пути "/bin/ps" и считать stadartoutput
Uljahn: спс, записал себе, буду тестить
Uljahn: теперь хоть понятно, куда гуглить
Hoggins: два дня мучений с МС по совету wlesavo и наконец отрыв от дна до 170ого места. Спасибо.
Uljahn: рандомный поиск на фиксированную глубину?
Hoggins: Xanrum, в эти масивы же еще что то складывать нужно. Обычно в этих обьектах проблема. Если складывать структуры, то скорее всё просто упорится...
Xanrum: с чего б - упорится?
Hoggins: Uljahn, в итоге сработала фиксированная грубина. Глубже 15 оценка сходила с ума, собственно на это и ушло два дня
Hoggins: Xanrum, если маленькие из значимых типов, то не упорится. А в других случаях мне кажется просто нужно супер внимательно писать, что бы не потерять выигранное у гц время на свои операции
Xanrum: складывать конечно или ссылки на переиспользуемые объекты, или вали типы
Xanrum: *валуи типы
Uljahn: а, вы оба на шарпе, интересно
Hoggins: я проверил перед тем как отвечать :)
Xanrum: там на арене чтото точно не так, который раз жму "SEND GAME PARAMERERS TO IDE" и наблюдаю противоположный исход
Uljahn: противник по таймингам работает, недетерминированно
Uljahn: *по таймлимитам
Xanrum: самое обидное бывает - когда варишь 6 зелье, и с ним у тебя очков больше - а враг выигрывает по доп очкам за оставшиеся ингридиенты
Vitaliy_Kamalin: Выиграл чела с первого места, а место всё равно второе )
Uljahn: надо несколько раз выиграть, чтобы на рейтинг повлияло, и не проигрывать особо
Hoggins: я боюсь тех людей кто учел это и варит зелье по проще что бы ты не успел...
Uljahn: там уже и на два зелья собирают, чтобы киллермув зафигачить под конец
Vitaliy_Kamalin: 2 вина один луз против него, не понимаю )
Uljahn: это в какой лиге?
Uljahn: смотри, почему проиграл, фикси и заливай на арену новую версию. если до босса меньше 0.5 единиц рейтинга, то имеет смысл подождать, может кто подтолкнёт
Xanrum: тут же пока босс только на выходе из деревянной, там вполне можно дописать не ожидая толчка
Uljahn: ну это да, из дерева вообще на рандоме можно выйти, только валидные экшоны отфильтровать и сэмплировать из них
Vitaliy_Kamalin: Это дерево 1, я ток начал вникать в касты
Uljahn: лучше в бронзе вникать, тут полные правила, а то переписывать ещё придётся, что в дереве насочинял
Xanrum: я до сих пор катаю идеи заложенные на выходе из дерева. Чтото интересное к концу недели если только
Vitaliy_Kamalin: Ничего серьезного, до этого он варил последние ингридиенты и сидел в топ500
Xanrum: все пытаюсь реализовать идею "делать GC пока ходит опоненент" - это вообще возможно?
Uljahn: сомневаюсь, иначе многие бы пользовались
Uljahn: а инфа имеет тенденцию просачиваться)
Vitaliy_Kamalin: о наконец-то бронза )
Uljahn: :thumbsup:
aropan: > о наконец-то бронза ) Лучше поздно, чем никогда.
Vitaliy_Kamalin: Завтра серебро открывается?
Uljahn: должны к вечеру открыть
Xanrum: раньше мне казалось что программировать бота - это придумываешь интересные не обычные алгоритмы. Но сейчас складывается ощущение что все сводится к реализовать перебор, и тюнить его, а подходы как тюнить одинаковые вне зависимости от того о чем игра
Uljahn: а тюнинг заключается в оптимизации кода и применении того или иного алгоритма, уменьшающего пространство поиска по сравнению с брутфорсом
Uljahn: алгоритмы могут различаться в зависимости от игры, но суть остаётся - выдать субоптимальный результат за отведённое время
wlesavo: Hoggins хехе, да мс прошлый век у топов явно хороший поиск, я еще прикрутил на 1к роллаутов поиск для соперника, не уверен что это что-то дало но вроде работает
Uljahn: wlesavo: а на питоне у тебя что было?
Xanrum: а топ - это какие позиции?
andrey-vinokurov: как вы пишите на своих питонах :) циркулярные импорты вынесли весь мосх :)
wlesavo: Uljahn был брутфорс на глубину 2, и пара оценок, но тот код уже в субботу отлетел из топ 100
wlesavo: сегодня он бы уже где-то в районе 400 был бы
wlesavo: мне еще баги надо найти где-то, очень странные таймауты иногда
Uljahn: я чё-т увлёкся сегодня, понаписал всякого на numpy, но из бронзы не выйду, наверное :)
Vitaliy_Kamalin: Рейтинг в бронзе скачет 1000-1500 вы че там понаписали )
Xanrum: у меня перебор с остановкой в 40мс - на 100 месте на одинаковых условиях 10 раз запуская повторить - и 50 на 50 победа
Xanrum: там похоже все перебирают по времени, и победа зависит от фазы луны где там steal у процессора будет
Uljahn: если уже в бронзе перебирают, то в леге AVX будут юзать
Xanrum: да я уже почти
Xanrum: я уже перебираю в две стороны, перебираю врага, и учитываю в переборе себя самый лучший вариант ходов для него
Xanrum: типа - ага, вот он это может сварить через 4 хода такой комбинацией, я не могу быстрее чем за 4 - значит не буду даже пытаться если вдруг смогу за 5
Uljahn: минимакс, практически
Zero0: у меня максимум получается перебирать на три хода, больше не хватает время, работает хуже чем на эвристике, наверное я то-то не так делаю
MadKnight: может ты питон юзаешь?
MadKnight: покажи код
MadKnight: а сколько у тебя спеллов?
Uljahn: заметил, что топы выбирают сварить более дешевое зелье, когда могут сварить несколько, чтобы ингредиентов побольше осталось, видимо
Zero0: https://pastebin.com/ve6624KV
Xanrum: у меня только проблемы были от попыток сварить побыстрее. Часто бывало - враг сварил 3, я сварил 6 - игре конец, те 3 + руны в кармане были дороже чем мои 6
Xanrum: когда варишь 6 побыстрому - руны в кармане врага внезапно начинают мешаться
Zero0: зря я наверное сюда весь запостил (
Uljahn: да уж, лучше не пали код, контест всё-таки
Uljahn: в pm бы скинул
Uljahn: за такое в леге дисквалифицируют
Uljahn: до леги пофиг, там и стримеры палят код
NightLuna: у тебя там комменты есть, ничего себе
Zero0: я для себя их пишу, это все равно надо все переделывать, я по инрции ступил, сюда это кинуть
NightLuna: помню, как в одном контесте нашли код чувака на гитхабе и потом человека 3 дисквалифицировали с этим кодом
Xanrum: ого как много кода
NightLuna: почему много, 800 строк всего
Zero0: ну, да, по мне тоже 800 строчек это не много
Xanrum: да больше 300 - уже путаться можно и думаешь как бы ужать
Xanrum: Zero0 я у себя инвентарь описывал как стрктура с A B C D полями, так заметно быстрее вышло
Xanrum: и у кастов и и у зелий использовал эту структуру, их можно складывать и вычитать при переборе
Xanrum: сколько у кого сейчас строк кода? у меня 500
Uljahn: тоже около 500
KeepCaIm: 424
Hoggins: 599
Zero0: должен быть алгоритм правильный, и идея хорошая, ничего умного, тут в голову не приходит мне. строчек много, это ниочем , у меня можно ужать и ~1.3 выкинуть.
TheCrucial: 100
aropan: > сколько у кого сейчас строк кода? у меня 500 885, но у меня размашистый почерк. )
aropan: + я в разных файлах пишу, а потом собираю в один файл.
Uljahn: Магус в дискорде про своего бота рассказывает, MCTS запилил
Zhmyh: 1300
Zero0: А чат сохраняется полностью b yfdctulf?
tutubalin: вообще хранится только 30 последних сообщений (или около того) но есть сервис, который сохраняет всё в #world, #ru и ещё на некоторых каналах
tomatoes: https://cg.spdns.eu/wiki/Main_Page
Zero0: За год, только прошлые года, пропадают?
tomatoes: а даже не знаю
tomatoes: в дискорде ещё кто-то скидывал дамп логов за несколько лет
Zero0: в дискорде интересно, я туда даже вроде раньше не заходил, или заходил и забыл, всмысле на cg