Chat:Ru/2021-03-21
Uljahn: а кто оценивать будет? если ты сам, то будешь всегда выигрывать
MadKnight: так по результатам же
MadKnight: со временем научишься определять, что с планами может пойти не так
Uljahn: придумать можно такое, что снять нереально, либо бюджет на порядок увеличивать
MadKnight: да, но суть-то не в этом
WT_Games: Подскажите, почему часто вылезает ошибка "local variable may not have been initialized Java", при объявленной переменной? например, int id = x; if (param == id) {...} в if() переменная id будет ошибкой
MadKnight: а покажи более конкретный пример
Uljahn: чтобы было понятно - что такое x, что такое param
MadKnight: не, нам не это интересно
WT_Games: бот code of ktulhu, самое начало, первым entity передается наш персонаж, но id его не всегда = 0. поэтому сперва сохраняю свой id, и в if если за мной охота хочу уйти в сторону и он подчеркивает id в param2 (цель охотников)
WT_Games: http://chat.codingame.com/pastebin/c61ccdf1-3119-4362-85c8-2fea2135550c
MadKnight: так у тебя инициализация в условии значит
WT_Games: http://chat.codingame.com/pastebin/be097789-b573-43be-bd7f-e8702c9afbc5
MadKnight: а чему будет равен myid если первый иф не пройдёт?
WT_Games: инициализация в начале, или я что-то не так делаю?
MadKnight:
int myid;
MadKnight: это не инициализация
MadKnight: это объявление
WT_Games: как первый if может не пройти, если в первом же круге i = 0?
MadKnight: джава этого не учитывает
MadKnight: не настолько сильно анализирует код
MadKnight: WT_Games а ты собираешься все игры пройти?)
WT_Games: хочу хотя бы попробовать все) в самолетиках запнулся на 3 бронзе)
MadKnight: чё там запинаться-то?) вычти вектор скорости из чека, и порвёшь свех
MadKnight: всех
WT_Games: не смог сообразить как заставить его тормозить, когда он в скольжении мимо чека пролетает =\
MadKnight: так надо не тормозить его заставлять
MadKnight: а вектор скольжения контрить
MadKnight: а для этого надо вектор движения вычитать из точки target
WT_Games: ооо, спс. ща посмотрим
MadKnight: знаешь как вектор движения получить?
KanaMonogatari: Здравствуйте, в этой задаче https://www.codingame.com/ide/puzzle/rectangle-partition Я получил все возможные стороны квадратов, но одна из них повторяется 2 раза, например по оси X в примере у меня вышло: 8,3,5,3,2,5,10, здесь 3 одна лишняя, если смотреть по составным, то у меня выходило 8,3,3,5, т.е. одна лишняя при объединении длин сторон
WT_Games: по конечным координатам? теоретически можно сохранить мои прошлые коорд и построить вектор
MadKnight: ага, именно так
MadKnight: KanaMonogatari это что за числа? что они значат?
KanaMonogatari: Длины сторон по оси x в прямоугольнике из примера
MadKnight: так тебе надо стороны генерить по i=0..n, j=i+1..n
MadKnight: т.е. каждую перебираешь со всеми идущими справа
KanaMonogatari: Можно поподробнее?
MadKnight: но лучше кнш не так
MadKnight: генеришь key-value массив
MadKnight: а стоп, это полюбому следующий шаг
MadKnight: лучше расскажи как именно ты генеришь все возможные стороны
MadKnight: KanaMonogatari ?
KanaMonogatari: http://chat.codingame.com/pastebin/fb2a20a8-ef86-4a45-b8a0-d0b912b44dba
MadKnight: проще делается
KanaMonogatari: ?
MadKnight: добавляешь отрезки на границы главного прямоугольника
MadKnight: ну т.е. 0 и w
MadKnight: дальше проходишься по всем отрезкам
MadKnight: внутри цикла проходишься по всем отрезкам, которые идут справа
MadKnight: и добавляешь x_a - x_b
KanaMonogatari: Хорошо, попробую, спасибо
MadKnight: тогда у тебя будет 0..2 0..5 0..10; 2..5 2..10; 5..10
KanaMonogatari: Понял
KanaMonogatari: Огромное спасибо, я прошел все тесты
tutubalin: такая война за задачку Christmas Tree развернулась :) 3 аппрува, 2 реджекта и стопицот комментов.
tutubalin: интересно. общее число комбинаций на минидоске в крестиках ноликах = 3^9 = 19683
tutubalin: не все из них реально достижимы. посчитал количество реально достижимых в UTTT (то есть когда один игрок может пропускать свои ходы в минидоске). получилось 19368
tutubalin: в первую секунду показалось, что это то же самое число
vrabosh: за сколько шагов решаете 10длину в быках и коровах?
tutubalin: который в тестах - вроде за 10
vrabosh: чтото у меня 334 очков набирает, это рандом или мало? сколько у тебя в среднем очков?
vrabosh: у меня за 12 шагов десятку берет. а девятку за 9 шагов.
Uljahn: чтобы оценить рандом, надо статистически значимое количество сабмитов заслать
vrabosh: я скорей всего на 9 шагах гдето 10 очков теряю, в таймауты она не влазии обычным спосоом, приходится как десятку считать.
wlesavo: vrabosh просто с выбором случайного числа из пула у меня тоже в районе 330 было
vrabosh: как бы вы сдеали в си for '1' in arr?
vrabosh: ой if '1' in arr
vrabosh: http://chat.codingame.com/pastebin/40790139-908d-4aa4-9312-db48cbe7ccbb
wlesavo: я бы так не делал в с
vrabosh: как это оптимизировать?
vrabosh: как делал?
wlesavo: число хранить можно по-другому например
vrabosh: у вас получилсь без таймаутов легко сделать?
tutubalin: у меня сперва с некоторой вероятностью (около 25%) таймаутилось на N=8
tutubalin: уменьшил лимит времени с 45мс до 30мс - таймауты прекратились
tutubalin: ты оптимизацию O3 включил?
vrabosh: у меня 9 таймаутится, 8 оч редко.. на 10 у меня алгоритм без проверки cows, приходится и 9 туда перекидывать
vrabosh: я вообще таймаут не проверяю
vrabosh: #pragma GCC optimize("O3","unroll-loops","omit-frame-pointer","inline") //Optimization flags
- pragma GCC option("arch=native","tune=native","no-zeroupper") //Enable AVX
- pragma GCC target("avx") //Enable AVX
vrabosh: вот что включил
wlesavo: я сначала сто лет оптимизировал, нифига не работало, потом дооптимизировался что 10 начал проходитьт, а потом понял что прагмы не включил и запас был в 4 раза по времени
tutubalin: а, ну норм
wlesavo: >на 10 у меня алгоритм без проверки cows, приходится и 9 туда перекидывать
без прагм тоже так делал
vrabosh: из за того что в 9 не проверяю cows мне кажется, что я теряю гдето 20 очков.. на тесте 4 очка теряю. но тест у меня без таймаута проходит
wlesavo: а так сделал хранение как tutubalin сказал и это дало раза в 3 ускорение
wlesavo: ато у меня были проверки на битсетах
vrabosh: а что за хранение?
vrabosh: у меня в одномерном масиве сразу все варианты
tutubalin: комбинация 1234 у тебя как хранится?
vrabosh: 1234 1243 так вроде
tutubalin: я плохой пример взял :) комбинация 9876 как хранится?
tutubalin: просто как строка? или как число? или как массив?
vrabosh: как строка
wlesavo: там хранение в массиве позиций в числе для каждой цифры, тогда проверки все сильно упрощаются
tutubalin: у тебя получается индекс - это позиция, элемент - это цифра
vrabosh: char
tutubalin: у меня наоборот: индекс - это цифра, элемент - это позиция цифры
vrabosh: char allper[36288000]; и я его сразу весь заполняю всеми вариантами
tutubalin: грубо говоря для 9876: http://chat.codingame.com/pastebin/13753a27-136a-4d62-b8c9-c0d0180f851d
tutubalin: грубо говоря для 9876: a[9] = 4 a[8] = 3
wlesavo: да вот про это я говорил
vrabosh: что int что char в си же безразницы что проверять в условиях?
tutubalin: wlesavo кстати, мне это в голову пришло, когда отвечал на какой-то вопрос vrabosh :)
tutubalin: vrabosh разница не в типах, разница в семантике
tutubalin: вариант 1: зная позицию получить цифру в позиции вариант 2: зная цифру получить позицию этой цифры
vrabosh: угу.. не совсем понял, как ты сделал, но чтото уловил из твоих мыслей.. подумаю
wlesavo: tutubalin :slight_smile:
vrabosh: мне в си пока сложно делать разные манипуляции, код и так корявый, куча глобальных переменых.
vrabosh: это первая программа моя на си)
wlesavo: а я борюсь с расхождением в пол процента в тестовом задании на работе, нашел точно место но так и не могу понять почему так происходит. единственное объяснение что разная тригонометрия в питоне и плюсах, но вроде целевое изображение на плюсах тоже с питоновской оберткой сделана
Uljahn: а флоаты vs даблы может быть?
vrabosh: http://chat.codingame.com/pastebin/4a8710e6-88d6-42b5-96c8-c01157ebd11c
vrabosh: вот функция, может есть идеи как ее можно оптимизировать7
miklla: жесть, goto в 21 веке
tutubalin: bulls--;
tutubalin: я вот это не понял. зачем ты быков здесь уменьшаешь?
vrabosh: miklla я так от лишнего иф избавился, может типа поможет в оптимизации)
vrabosh: я вот получил по предыдущим цифрам bulls = 3 и если я нахожу такоеже число где bulls = 3 то в этой функции оно будет 0 и тогда это то число которое можно использовать
vrabosh: в питоне я сделал for ... else и не нужен goto може тут также можно?
tutubalin: у тебя очень медленный поиск коров
tutubalin: по сути O(N^2)
tutubalin: то есть для N=10 ты делаешь 100 итераций на КАЖДУЮ комбинацию
vrabosh: для н=10 коровы не нужны
vrabosh: а для н=9 желательны.
wlesavo: Uljahn проверял тоже, там с этим есть проблема что точно не понятно как целевой написан но разные комбинации флоатов и даблов не особо помогают
vrabosh: на остальных длинах справляется, иногда кнечно оч редко 8 не тянит
vrabosh: tutubalin впринципе можно попробовать еще 1 масив для коов сделать и по твоему способу проверять, тогда один for нужен будет.
tutubalin: этот ещё 1 массив можно использовать и для быков тоже
tutubalin: если позиция единички совпадает и не нулевая (или не отрицательная - смотря как хранишь), то это бык
vrabosh: блин ходы закончились проверить, что получилось..
vrabosh: как быстро сабмиты востанавливаются? хочу новый код протестить
Uljahn: 25 сабмитов в 5 часов
Uljahn: если курсор на сабмит навести, то должно время всплыть
Uljahn: это в results/history
vrabosh: Uljahn тоже решил присоедениться?
Uljahn: не, просто сабмитнул для массовки
wlesavo: чтобы побольше cp давали за игру =)
Uljahn: угу, поддерживаю как могу
vrabosh: tutubalin wlesavo у вас часто 320+ очков выпадает?
wlesavo: иногда выпадает да
vrabosh: давайте русские в топы залетим)
vrabosh: у меня часто, значит чтото не то..
vrabosh: wlesavo а ты 9 символов по алгоритму для 10 считаешь7
wlesavo: не, с коровами
wlesavo: у меня там примитивная оценка получаемой информации еще
wlesavo: но она как-то плоховато работает
Uljahn: за зафейленные тесты дают максимум? тогда можно фейлить специально все, кроме одного, который под вопросом
wlesavo: вообще сейчас бы я рефери по-другому писал
vrabosh: что такое рефери?
Uljahn: серверный код игры
Uljahn: который инпуты раздаёт, проверяет ответ и графику рисует
vrabosh: а под рефери можно подсстроиться?
vrabosh: в коровах? или он норм с читирить нельзя?
vrabosh: и вообще, то что много сабмитю, за это не наказывают?
Uljahn: что-то говорили, что секрет после первого угадывания генерируется, только я не понял этот момент
Uljahn: за много сабмитов сначала капча вылазить, потом кулдаун
vrabosh: я имею введу, типа админы не скажут, что так делать нельзя сабмитить 1000 раз за неделю одну игру)
Uljahn: не скажут
wlesavo: генерится весь секрет после первой попытки так чтобы в первой попытке было фиксированное для теста число быков и коров
Uljahn: т.е. всегда будешь получать одинаковый ответ на первую попытку?
vrabosh: т.е. 0 быков не бывает в первой попытке?
wlesavo: Uljahn там для разных тестов разные значения, их же штуки 4 на номер
Uljahn: ну, это можно отреверсить всё
wlesavo: +- можно да, но ты опираясь только на номер все равно не знаешь заранее сколько будетна номер
vrabosh: 1234 - всегда будет одно и тоже число?
wlesavo: в том смысле что восстановить это для теста можно но идентифицировать тест заранее нельзя
Uljahn: всё равно диапазон сужается
wlesavo: вообще все-равно рандом сильно решает конечно, нужно было делать динамическую генерацию, но поздно подсказали
Uljahn: vrabosh: там несколько тестов для одной длины, подсказки в них будут разными
vrabosh: ну они всегда буду одинаковы для первого одного и тогоже числа?
wlesavo: vrabosh нет число разное, сид не фиксированный у рефери
Uljahn: только подсказки будут одинаковыми, типа в тесте 12 на запрос 1234 ответ всегда 1 корова или типа того
Uljahn: секрет рандомный при этом
vrabosh: а понял. ну норм сделано.. может быть и 0 коров в каком нить тесте?
wlesavo: в первом
vrabosh: ой быков 0
vrabosh: кароче надо просто взять и все варианты у себя на компе програть и посмотреть на худшие и придумать как их улучшить.
tutubalin: vrabosh 320+ примерно в 70% сабмитов
vrabosh: wlesavo ты сдеал лутбоксы:) надо достать лучшую шмотку:)
vrabosh: прикиньте прикольно былобы, если можно делать дапустим в сутки сабмитов штук 20 допустим.. и заработанные очки обменивать:)
wlesavo: на кегле прикольно, там три сабмита в день и люди умудряются отреверсить по 500 результатов из открытой части теста
tutubalin: хмм... если там фиксированные первые ответы, то можно очень сильно сократить начальный набор комбинаций
tutubalin: не 3 миллиона, а меньше. и тогда может будет в питон их нормально впихнуть
wlesavo: ну тебе все-равно нужен проход по трем миллионам
tutubalin: а, ну да...
tutubalin: хотя можно отсечение сделать
tutubalin: нашёл, как ускорить примерно на 50-100%. теперь почти всегда меньше 320 даёт.
MadKnight: и как?)
tutubalin: да у меня раньше при каждой проверке кандидата строилось новое дерево. убрал это, теперь только в конце строится уже для лучшего кандидата
tutubalin: появились идейки, как ещё соптимизировать чуток, но там уже вряд ли большой выхлоп будет
tutubalin: раньше на втором ходу для N=10 успевало перебрать 5 кандидатов. теперь 10.
MadKnight: что значит перебрать?
MadKnight: как именно?
tutubalin: есть список доступных комбинаций
tutubalin: если он небольшой, то можно проверить все из них
tutubalin: берёшь первую, сравниваешь со всеми остальными. считаешь, сколько инфы она даст. берёшь вторую и то же самое
tutubalin: трудоёмность O(N^2)
tutubalin: если список большой (например, миллион комбинаций), то все комбинации оценить не получится, поэтому просто выбираю несколько рандомных кандидатов и их оцениваю
tutubalin: вот раньше если список был из миллиона, успевал оценить 6 кандидатов (то есть 6 миллионов сравнений). теперь успеваю 12.
MadKnight: а как считаешь сколько инфы даст?
tutubalin: я же уже рассказывал. по формуле Шеннона
tutubalin: если лень с ней разбираться (хотя она простая и логичная), то можно использовать такой критерий: самая большая подгруппа должна быть как можно меньше