Chat:Ru/2020-11-15

From CG community
Jump to navigation Jump to search

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"

  1. pragma GCC option("arch=native", "tune=native", "no-zero-upper")
  2. 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-го или даже раньше, когда тот же докер только зарождался

Default avatar.png Zero0: Кто знает, если говорить, что после, оно подвешивает или так кажется?

Default avatar.png Zero0: в смысле, в игре после команды?

tomatoes: подвешивает и переключается на противника

Default avatar.png Zero0: ясно, спасибо

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

Uljahn: кстати, можно ли как-то при игре против своего бота определить, что оба процесса исполняюся на одном физическом ядре, или хотя бы имеют общий кэш?

Default avatar.png 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: я вот все думаю - как лучше - выделить пул массивов заранее, или мучаться выделяя их на стэке?

Default avatar.png Zero0: тут, проверил "ps -axo psr,pid,cmd" запускается без проблем, "psr" - процсесор на котором процесс. правда только на арене не пробовал пока

Default avatar.png 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: минимакс, практически

Default avatar.png Zero0: у меня максимум получается перебирать на три хода, больше не хватает время, работает хуже чем на эвристике, наверное я то-то не так делаю


MadKnight: может ты питон юзаешь?

Default avatar.png Zero0: не я шарпы

MadKnight: покажи код

MadKnight: а сколько у тебя спеллов?

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

Default avatar.png Zero0: https://pastebin.com/ve6624KV

Xanrum: у меня только проблемы были от попыток сварить побыстрее. Часто бывало - враг сварил 3, я сварил 6 - игре конец, те 3 + руны в кармане были дороже чем мои 6

Xanrum: когда варишь 6 побыстрому - руны в кармане врага внезапно начинают мешаться

Default avatar.png Zero0: зря я наверное сюда весь запостил (

Default avatar.png Zero0: код запостил

Uljahn: да уж, лучше не пали код, контест всё-таки

Uljahn: в pm бы скинул

Uljahn: за такое в леге дисквалифицируют

Uljahn: до леги пофиг, там и стримеры палят код

NightLuna: у тебя там комменты есть, ничего себе

Default avatar.png Zero0: я для себя их пишу, это все равно надо все переделывать, я по инрции ступил, сюда это кинуть

NightLuna: помню, как в одном контесте нашли код чувака на гитхабе и потом человека 3 дисквалифицировали с этим кодом

Xanrum: ого как много кода

NightLuna: почему много, 800 строк всего

Default avatar.png Zero0: ну, да, по мне тоже 800 строчек это не много

Xanrum: да больше 300 - уже путаться можно и думаешь как бы ужать

Xanrum: Zero0 я у себя инвентарь описывал как стрктура с A B C D полями, так заметно быстрее вышло

Xanrum: и у кастов и и у зелий использовал эту структуру, их можно складывать и вычитать при переборе

Xanrum: сколько у кого сейчас строк кода? у меня 500

Uljahn: тоже около 500

KeepCaIm: 424

Hoggins: 599

Default avatar.png Zero0: должен быть алгоритм правильный, и идея хорошая, ничего умного, тут в голову не приходит мне. строчек много, это ниочем , у меня можно ужать и ~1.3 выкинуть.

TheCrucial: 100

aropan: > сколько у кого сейчас строк кода? у меня 500 885, но у меня размашистый почерк. )

aropan: + я в разных файлах пишу, а потом собираю в один файл.

Uljahn: Магус в дискорде про своего бота рассказывает, MCTS запилил

Zhmyh: 1300

Default avatar.png Zero0: А чат сохраняется полностью b yfdctulf?

Default avatar.png Zero0: и навсегда?

tutubalin: вообще хранится только 30 последних сообщений (или около того) но есть сервис, который сохраняет всё в #world, #ru и ещё на некоторых каналах

Default avatar.png Zero0: а что за сервис?

tomatoes: https://cg.spdns.eu/wiki/Main_Page

Default avatar.png Zero0: За год, только прошлые года, пропадают?

tomatoes: а даже не знаю

tomatoes: в дискорде ещё кто-то скидывал дамп логов за несколько лет

Default avatar.png Zero0: Спасибо, за инфу

Default avatar.png Zero0: в дискорде интересно, я туда даже вроде раньше не заходил, или заходил и забыл, всмысле на cg