Chat:Ru/2021-03-21

From CG community
Jump to navigation Jump to search

Uljahn: а кто оценивать будет? если ты сам, то будешь всегда выигрывать

MadKnight: так по результатам же

MadKnight: со временем научишься определять, что с планами может пойти не так

Uljahn: придумать можно такое, что снять нереально, либо бюджет на порядок увеличивать

MadKnight: да, но суть-то не в этом

Default avatar.png WT_Games: Подскажите, почему часто вылезает ошибка "local variable may not have been initialized Java", при объявленной переменной? например, int id = x; if (param == id) {...} в if() переменная id будет ошибкой

MadKnight: а покажи более конкретный пример

Uljahn: чтобы было понятно - что такое x, что такое param

MadKnight: не, нам не это интересно

Default avatar.png WT_Games: бот code of ktulhu, самое начало, первым entity передается наш персонаж, но id его не всегда = 0. поэтому сперва сохраняю свой id, и в if если за мной охота хочу уйти в сторону и он подчеркивает id в param2 (цель охотников)

Default avatar.png WT_Games: http://chat.codingame.com/pastebin/c61ccdf1-3119-4362-85c8-2fea2135550c

MadKnight: так у тебя инициализация в условии значит

Default avatar.png WT_Games: http://chat.codingame.com/pastebin/be097789-b573-43be-bd7f-e8702c9afbc5

MadKnight: а чему будет равен myid если первый иф не пройдёт?

Default avatar.png WT_Games: инициализация в начале, или я что-то не так делаю?

MadKnight:

       int myid;

MadKnight: это не инициализация

MadKnight: это объявление

Default avatar.png WT_Games: как первый if может не пройти, если в первом же круге i = 0?

MadKnight: джава этого не учитывает

MadKnight: не настолько сильно анализирует код

Default avatar.png WT_Games: окей, будем изучать

Default avatar.png WT_Games: спасибо

MadKnight: WT_Games а ты собираешься все игры пройти?)

Default avatar.png WT_Games: хочу хотя бы попробовать все) в самолетиках запнулся на 3 бронзе)

MadKnight: чё там запинаться-то?) вычти вектор скорости из чека, и порвёшь свех

MadKnight: всех

Default avatar.png WT_Games: не смог сообразить как заставить его тормозить, когда он в скольжении мимо чека пролетает =\

MadKnight: так надо не тормозить его заставлять

MadKnight: а вектор скольжения контрить

MadKnight: а для этого надо вектор движения вычитать из точки target

Default avatar.png 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, т.е. одна лишняя при объединении длин сторон

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

  1. pragma GCC option("arch=native","tune=native","no-zeroupper") //Enable AVX
  2. 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: если лень с ней разбираться (хотя она простая и логичная), то можно использовать такой критерий: самая большая подгруппа должна быть как можно меньше