Chat:Ru/2020-10-13

From CG community
Jump to navigation Jump to search

wlesavo: magaiti неплохо, это у тебя бимсерч?

magaiti: кривой бимсерч

magaiti: из N лучших потомков беру одного, того у кого потомки лучше

magaiti: а по определению бимсерча надо брать N лучших потомков со всех N предков

magaiti: как я понял

magaiti: так попробую тоже, первый вариант проще запрогать было

magaiti: из N предков беру одного то есть

magaiti: таймит щас, а ночью не было такого

amurushkin: а я не так понимаю бимсерч

amurushkin: мы из всего пула делаем все возможные ходы. а потом из всей этой кучи берем N

magaiti: ну да

magaiti: это второй вариант что я озвучил

amurushkin: у меня тоже таймит постоянно на сабмитах. в иде нет

magaiti: ночью четко было все

magaiti: это загрузка сервера похоже

amurushkin: это ты типа на 2 хода делаешь итерацию и потом выбираешь одного?

magaiti: да

amurushkin: это больше на best first search наверное похоже

magaiti: лень было все ходы запоминать

magaiti: да

amurushkin: капец а я никак не придумаю как хранить ходы чтобы их можно было много вывести. вот думаю сделать наверное массив а у ноды в него ссылку держать

amurushkin: у меня сейчас 2 варианта. либо на лимите в 600 хороший счет и еще очень играбельная позиция но ходов маловато около 20к. или ходов больше но играет в разы хуже

magaiti: так в ноде хранить 7 последних, и ссылку на ноду из предыдущего шага. ноды хранить, их по всего по N на шаг

magaiti: вообще без шансов что-то засабмитить сейчас

amurushkin: а ты цепочку стейтов по 7 ходов выводишь?

amurushkin: это тогда у тебя как у wlesavo наверное

magaiti: пока да, потом думаю потестить разную глубину

amurushkin: а у меня не так

magaiti: даже с отсечкой 40 таймит

amurushkin: с 30 даже таймит

magaiti: но я запускаю то же решение что и ночью, так что это сервер

magaiti: ночью с 45 запускал

amurushkin: у меня в ноде список первых ходов которые я буду ходить. и я их тащу от родителя к детям. и добавляю туда. и потом у лучшего их вывожу

magaiti: у лучшего кого?

amurushkin: ну стейт которых в конце самом лучший

amurushkin: похоже у меня концепция не верная

magaiti: в одном поколении 1 ход ?

amurushkin: нет смотри. в начальных поколенияих будет сначала 1 ход. потом у потомка еще +1 ход и так далее. только я храню не все а N первых ходов которые и вывожу потом

magaiti: а, просто хранить не умеешь

amurushkin: ага

amurushkin: вот думаю может сделать двумерный массив глобальный и в него писать. а у ноды держать индекс

magaiti: да, вариант

magaiti: вектор массивов

amurushkin: ну если память не экономить можно и двумерный. просто будет лимит на глубину

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

magaiti: нужно достаточно чтоб секунду продержаться

amurushkin: а у меня секунда не так делается ))

amurushkin: я 20 раз серч запускаю

magaiti: ye nj;t yjhv

magaiti: норм

wlesavo: amurushkin не я же не так делаю, цепочку не вывожу, по одному ходу нахожу и добавляю в пул

amurushkin: wlesavo: ну так он тоже просто по 7 штук

amurushkin: если я правильно понял то он нашел лучшую цепочку из 7. породил новый стейт. из него тоже цепочку из 7. и потом собирает в одну

wlesavo: у меня следующая идея что-то похожее делать

wlesavo: я быстро проигрываю достаточно когда набираю 65к, даже с брутфорсом на глубину 10 проверял локально, принципиально не отличается от глубины 6-7

wlesavo: там уже видимо нужна заметно больше глубина

magaiti: я брутфорсю на 7, беру 32 лучших , из каждого брутфорсю на 7, беру пачку с лучшим фитнесом, у нее соотв. один предок

magaiti: и 7 мумов уже можно выводить

magaiti: пробую нормальный бим серч, чет в районе 30, не лучше

magaiti: счет 30 лямо в смысле

magaiti: похоже, чем меньше глубина брутфорса, тем больше шанс проиграть

amurushkin: а в плюсах не придумали как подобную запись сделать короче? cerr << "next_storage_index=" << next_storage_index << endl;

magaiti: ytn? pfxtv&

magaiti: нет, зачем

magaiti: это плюсы, а не руби

magaiti: можешь макрос сделать, но это такое

amurushkin: чтобы быстрее код для дебага писать

magaiti: нормальные люди пользуются отладчиком

magaiti: это мы в цг извращаемся

amurushkin: я после php почти забыл что это такое )))

wlesavo: ну я локально отладчиком пользуюсь все равно, слишком уж тяжко когда тебе просто говорят таймаут и иди ищи что не так

wlesavo: даже асерты не особо помогают

wlesavo: в питоне еще как то терпимо в местной иде отлаживать

amurushkin: а примерно 70 на 30 наверное. все чаще прямо в браузере пишу

amurushkin: я придумал как у себя удлинить решение

amurushkin: запускать на 1 раз на 45 мс а 3 раза по 15 ))

amurushkin: в иде на тесте сразу за миллион перевалило

amurushkin: только таймаутов мама дорогая ))

amurushkin: набираю 30 лямов теперь но таймауты все портят

Uljahn: олигархи :(

magaiti: че, как на питоне играется?

Uljahn: симу пишу

Uljahn: нумпай вспоминаю

Uljahn: может, чё подскажете по симе? битборды какие-нибудь?

magaiti: мы на плюсах

input.txt: Это вы про какую игру?

Uljahn: 2048

Uljahn: оптимизация

wlesavo: Uljahn на самом деле возможно на питоне не так уж и плохо будет, думаю лямов на 10-15 можно выйти

wlesavo: учитывая что я набирал 4 ляма оценивая борд по одному тайлу

Uljahn: сколько там примерно офлайновый топчик был?

wlesavo: 17

wlesavo: хотя я так и не понял в чем у него проблема была

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

amurushkin: Uljahn: я про битборды вчера встречал. один чел предлагал в 4 бита закодить ячейку тогда вся доска в 64 бита влезает. но у него бот не мог собирать больше чем 32к в ячейке

magaiti: смысл

Uljahn: стейт хранить удобно

magaiti: тебе битов не хватает?

amurushkin: у меня вообще из рефери скопировано

magaiti: у тебя же бимсерч, нужно хранить всего (штрина *глубина) стейтов

magaiti: это немного

magaiti: смысла не вижу в битах и даже в байтах

magaiti: у меня инты

magaiti: если в байт кодить степерь двойки, то влезет все

magaiti: но я пробовал, не заметил пользы

magaiti: можете проверить

magaiti: фитнес чуть медленнее считать из-за сдвигов, хотя они быстрые должны быть

magaiti: у меня проблема до 600 дожить

amurushkin: очень нехватает в сабмитах чтобы показывало какой тест сколько набрал

amurushkin: до 600 не проблема если уменьшить глубину выводимых ходов ))

magaiti: ну ты можешь ронять на 599-м ходу

magaiti: и увидишь кто доходит

amurushkin: ну а смысл ронять? как потом посмотреть?

amurushkin: я же счет хочу узнать

magaiti: если упал значит дошел до 599

magaiti: а

amurushkin: а мне не это надо

amurushkin: я хочу видеть счет после сабмита раздельно по тестам

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

wlesavo: здесь не понятно как можно проверки векторизовать, в питоне все таки двойной цикл по нумпайному массиву слишком медленно, хотя и массив небольшой, но все равно больно

amurushkin: у того чела который в биты переводил было еще предрасчитаны все стейты что во что превращается

magaiti: все столбцы?

magaiti: хах

magaiti: не думаю что это даст ощутимую прибавку

wlesavo: а ну если так только, да

wlesavo: для питона может, для плюсов тоже не думаю

wlesavo: кстати, была еще в общаке идея считать две оценки, горизонтальную и вертикальную змейку

magaiti: вертикальную имеет смысл если 4 хода

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

amurushkin: у меня 1 тест 1.7 ляма набирает. потенциал на 50лямов есть. осталось засабмитить без таймаутов

magaiti: все то не наберут

amurushkin: wlesavo: тсс не пали контору ))

amurushkin: я так делаю

amurushkin: хотя надо попробовать одну убрать

amurushkin: magaiti: можешь подсказать

amurushkin:         for (int i = 0; i < first_moves_stored; ++i) {            MOVES[first_moves_storage_index][i] = MOVES[oldindex][i];        }

amurushkin: вот такой цикл на copy можно переписать? а то чет у меня не получилось

amurushkin: быстро скопировать строку массива в другую строку

magaiti: memcpy(MOVES[fmsi], MOVES[old], sizeof(MOVES[0]))

magaiti: если first_movesStored одинаковый

magaiti: иначе sizeof(MOVES[0][0]) * first_moves_stored

gsomix: Ну вот, говорили, что на плюсах пишете, а у самих memcpy. :)

magaiti: std::memcpy

magaiti: не надо тут

amurushkin: я пробовал через std::copy записать подобное у меня оно падало почему то

magaiti: неправильно параметры наверное задавал

magaiti: copy (InputIterator first, InputIterator last, OutputIterator result);

magaiti: смысл только, быстрее цикла не будет

amurushkin: а memcpy гарантированно быстрее будет?

amurushkin: есть смысл размер выравнивать в кеш линию чтобы он копировал быстрее?

magaiti: что значит выравнивать в кеш

MadKnight: да, я тоже не понял

MadKnight: и кстати оптимизатор же сам вызывает memcpy

magaiti: думаешь

MadKnight: у меня вызывал

magaiti: где?

amurushkin: ну будет наверное разница если ему надо копировать 1000 или 1024 элемента

MadKnight: нее

MadKnight: https://godbolt.org/z/eM1esn

MadKnight: magaiti amurushkin

MadKnight: зацените чё он делает

       rep movsq

magaiti: ye lf

magaiti: ну да , цепочечный примитив

magaiti: кувордами копирует, если длина на 8 делится

magaiti: а хотя нет

magaiti: байтами похоже,

magaiti: не, там прикол. он запхивает длину в байтах а потом ее сдвигает на 3, то есть пачками по 8 байт копирует. но нсли дляна некратна 8 то там остаток где-то надо отдельно докопировать

magaiti: mov rax, QWORD PTR [rsi+1016]

       mov     QWORD PTR [rcx+1016], rax

YurkovAS: помню, похожее, разраб из clickhouse-а рассказывал, как они ускорили memcpy у себя. стали массивы делать немного больше, кратные 8 байтам (вроде)

magaiti: тут код не отличается, кратно или нет

magaiti: тупо копирует последний куворд отдельно

magaiti: надо самому memcpy писать тогда

amurushkin: я тоже смотрел они там кратно 64 стали циклы делать

MadKnight: так 1000 кратно 8

MadKnight: кто стали кратно 64 делать ?

MadKnight: он грузит 64 байта в кэш

amurushkin: ну из яндекса чел показывал как они копировали несколько гиг. когда переписали циклы под размер кешлинии проца то ускорилось кажется в 8 раз

magaiti: но у тебя то не 4 гиг

amurushkin: а они матрицы кажется огромные умножали или что то такое

MadKnight: да, но в чём причина ускорения?

magaiti: магия

amurushkin: в том что данные в кеш проца попадают и меньше миссов

MadKnight: так а что именно они копировали для умножения?

amurushkin: матрицы какие то на кучу гигов

MadKnight: теперь мне кажется что ты чё-то не так понял

MadKnight: дай мне ссыль

amurushkin: если надо я видео найду

MadKnight: го

amurushkin: https://www.youtube.com/watch?v=QY6aLjvKRNM

Uljahn: https://en.wikipedia.org/wiki/Data_structure_alignment

MadKnight: да ты лол

MadKnight: там говорится о переменном использовании больших пачек данных

MadKnight: т.е. когда 64 байта используются разными вещами

amurushkin: ну молодец что ты не лол

MadKnight: когда у тебя код использует сразу 2 массива

MadKnight: например a[i] += b[i]

MadKnight: и он копирует поочерёдно сначала 64 байта из a, потом - из b

MadKnight: на каждой итерации

MadKnight: а они оптимизируют в блоки из 64, чтобы всё что нужно было в одном блоке

MadKnight: берут часть a и часть b

MadKnight: этот чел не очень public speaker кнш

MadKnight: не прикольно его слушать

MadKnight: amurushkin короче к обычному memcpy это всё не относится

MadKnight: там речь о случаях, когда хоть где-то есть рандомное обращение к памяти

MadKnight: как в матрицах

MadKnight: там суть в том, что пока он дойдёт до 2го значения в кэше из 64 байт, эти 64 байта уже вытеснятся из кэша остальными данными матрицы

MadKnight: потому что он умножает 10 000 строк на 10 000 столбцов

MadKnight: а это - дофига пачек по 64 байта

MadKnight: amurushkin ты понял?

MadKnight: YurkovAS а ты прочитал?)

YurkovAS: что прочитал?

MadKnight: ну я посмотрел видос откуда amurushkin подумал что memcpy в блоках по 64 будет быстрее

MadKnight: а оказалось - к memcpy это не относится, и я тут пишу почему вот ты прочитал, почему? YurkovAS

magaiti: Мэд, ты че такой дерзкий

YurkovAS: да, там не про memcpy, а про кеш больше про memcpy слушал у Миловидова из clickhouse-а, давненько, всех деталей не помню, это надо гуглить и переслушивать

MadKnight: YurkovAS нененен

MadKnight: не то чтобы там не про memcpy

MadKnight: а то, что memcpy вообще не подходит под тему

MadKnight: его так не оптимизировать

MadKnight: magaiti подвыпил

MadKnight: amurushkin и к тому же там используют кэш из min(dataLeft, 64)

MadKnight: всм блоки из

magaiti: там перемножение матриц, для каждого элемента надо строку на столбец перемножить, выгоднее делать пачками по 64 строки, а числа в столбце наверное все равно в памяти разнесены

magaiti: .8по 64 эл-та в строке

magaiti: *

MadKnight: ну так о том и речь

MadKnight: и вот как amurushkin из этого сделал вывод, что memcpy оптизируется с помощью блоков по 64 ?

magaiti: магическое мышление

MadKnight: ну короче amurushkin просто недопонял

MadKnight: ну бывает

MadKnight: magaiti а ты чё делаешь?

magaiti: ем

magaiti: а вообще работаю

MadKnight: а чё за работа у тебя?

magaiti: автомейшен кьюэй

MadKnight: хмммм это чё

magaiti: пишу тесты

magaiti: запускаю, нахожу дефекты, дальше все как у обычных QA

magaiti: самое веселое что у нас тесты на с++ пишут

MadKnight: а почему это самое весёлое?)

Uljahn: потому что обычно на питоне пишут?

magaiti: да, и потому что я люблю с++

amurushkin: magaiti: а почему ты в QA пошел? я в свое время пошел в QA потому что умел только в Delphi. потом фирма решила что надо меня обучить Java и сделать разработчиком

magaiti: пошел в QA когда слабо умел программировать

magaiti: а потом оказалось что автотестировщик с опытом компаниям нужен больше, чем программист без

magaiti: говорят хороших автотестров не найти, тошо все хотят в кодеры уходить

magaiti: а на моей работе как раз совпало, что нужен автотестер неа с++

magaiti: исторически сложилось что фреймворк на с++ написан был когд-то

amurushkin: меня тоже автотестирование привлекало. но в компании эта ниша не была еще разработана. и туда пыталс втиснуться другой чел который кореш директора. короче я даже не пытался ))

magaiti: я вот насчет 2048 думаю

magaiti: есть алгоритмы бим-поиска с возвратом

magaiti: можно как-то это использовать

magaiti: на первом ходу нагенерить запас по глубине

magaiti: а выводит ьне все

magaiti: и там в глубине отползать назад, если луз схватил

magaiti: но я пока не пытался реализовывать

amurushkin: у меня если луз хватает то не добавляется просто в пул

magaiti: луз это когда пул пустой

amurushkin: у меня в этом случае прекращает поиск и берет с прошлой итерации лучший. но у меня всегда выводит часть первых ходов а не все

magaiti: а если прошлая итерация уже в аутпуте

amurushkin: прошлая итерация у меня это по сути шаг назад

magaiti: а если на прошлой итерации какая же фигня? насколько глубоко ты можешь откатиться

amurushkin: нет на прошлой у меня не может быть такой же фигни иначе бы она не случилась

amurushkin: у меня как только пул пустой то поиск прекращается

amurushkin: выводит результат и идет следующий тик

amurushkin: вот как раз идея возникла. надо наверное то что собрался выводить засимить и от этого места дальше еще считать

amurushkin: хотя в моем случае смысла нет все равно я выводить буду только начало последовательности

magaiti: ты можешь выводить не все, хранить в буфере

amurushkin: еще бы сабмитнуться на 100%

amurushkin: я итак не все вывожу. я просто храню начало последовательности и а не на всю глубину куда он дойдет

magaiti: ну у меня как-то насчитал больше 10к символов за первый ход, уронил рефери

amurushkin: я глубину не замерял куда он может.

amurushkin: у меня если зашел дальше чем то количество что я храню то просто в список не добавляет

magaiti: я храню все, на 10 ходов отступаю перед выводом

magaiti: но от лузв не спасает особо

amurushkin: блин а реально. не от 10к ли падают у мен

wlesavo: ну я проверял опытным путем что при 10к падают, на выводе теперь ограничение чтобы слуайно 10 к не вывести

amurushkin: хотя не вроде теоретический максимум сколько я вывожу в 1 ход это 2500

magaiti: вот блин, не дают без фейлов засабмитить, а с фейлами 38 набрал уже, должен свой рекорд побить по идее

magaiti: 3 раза дали и опять жди

MadKnight: почему не дают

MadKnight: amurushkin ты что, оскорбился и не хочешь отвечать?

magaiti: нельзя часто сабмитить, харя треснет

MadKnight: возможно, я забыл что тут некоторым больше 20 лет

MadKnight: magaiti а чё ты так часто сабмитишь?

MadKnight: ааа, 2048

magaiti: так падают тесты по таймауту рандомно, а надо чтоб все прошли

MadKnight: не пробовал с конца искать?)

magaiti: не пробовал в гоночках в другую сторону ездить?

amurushkin: magaiti: у меня с фейлами 39 и я никак не сабмитну на 100

MadKnight: > на первом ходу нагенерить запас по глубине / а выводит ьне все / и там в глубине отползать назад, если луз схватил

не пробовал заставить бота играть так же, как человек?

amurushkin: человек явно проигрывает боту как мне кажется

MadKnight: и всё же человек доходит до офигенных результатов

MadKnight: строя змейкой

MadKnight: а бот может, как предложил magaiti, откатываться назад

MadKnight: это как раз то чего не хватает человеку - он не может предугадать будущее и иногда ему не везёт, что он не может сохранять структуру змейки

MadKnight: amurushkin ну хоть скажи, понял ли ты почему для malloc размерность в 64 бесполезна

magaiti: еще не факт что на 100% будет 39

MadKnight: а каковы условия фейла?

magaiti: я вот на 41 с фейлами намухлевал щас

magaiti: твой код не понравился верховному шаману

MadKnight: Automaton2000, почему не принимаешь коды людей?

YurkovAS: amurushkin попробуй выводимые ходы сначала в string записать, а потом ее уже в cout

Automaton2000: ну у меня и у кубера

Uljahn: в общаке как альтернативу бимсёрчу как-то обсуждали chokudai search (бимсёрч с переменной шириной луча) - самопальный алгоритм одного японца по типу смитсимакса, никто не пробовал осилить?

magaiti: че куда серч? :)

Uljahn: это имя создателя :)

Uljahn: или ник

magaiti: дан

magaiti: ну переменная ширина это известная тема

magaiti: вопрос как ее менять

MadKnight: magaiti да как там вообще можно не взять 100% ? в каком случае будет Fail ?

magaiti: придется откатываться

magaiti: фейл если таймат

magaiti: таймаут

magaiti: или невалидный аутпут

MadKnight: а зачем ты таймаутишься

magaiti: это не я

magaiti: это сервер цасы переводит

MadKnight: всмысле

magaiti: хз, потоки у него заплетаются

MadKnight: Allotted response time to output is ≤ 50 ms for the later turns.

MadKnight: а ты сколько юзаешь?

magaiti: ну да, у меня отсечка на 45 мс

MadKnight: так попробуй 42

Uljahn: сервера сегодня тупят, даже в пазлах чё-то долго тесты выполняются

magaiti: тогда решение хуже будет

magaiti: просто день сегодня

MadKnight: а, сегодня так

Uljahn: 13-е

magaiti: простое число

MadKnight: magaiti а типа вчера не таймаутился?

magaiti: ночью не таймаутило

magaiti: а сейчас день

magaiti: ну да, надо что-то с возможностью глубокого бэктрекинга делать

gsomix: MadKnight, а ты сам-то не дед разве?

magaiti: уговорил, 44 попробую

MadKnight: Uljahn magaiti вы можете объяснить конкретно в чём лаги?

MadKnight: я передам адмену

MadKnight: gsomix ты контекст не знаешь

magaiti: да пофиг, это годами не могут пофиксить

amurushkin: YurkovAS: идея впринципе. типа coutы медленные.

magaiti: cinы быстрее?

MadKnight: magaiti так ты объясни конкретно

amurushkin: MadKnight: так попробуй 42, 30 даже не спасает

YurkovAS: amurushkin мне вроде бы это помогло с таймаутами, заметно уменьшились и потом даже время увеличил. стринг можно сразу большим сделать и потом реюзать всю игру

amurushkin: хз что там конкретно. факт в том что в иде тесты не таймят а при сабмитах рандомно хоть 1 тест да упадет

MadKnight: amurushkin c++ ?

MadKnight: magaiti c++ тоже ?

magaiti: думаешь только у сишников такое

MadKnight: нене

MadKnight: наоборот

amurushkin: да с++

MadKnight: так это не только в 2048?

amurushkin: да не только. в серч рейс такая же фигня. но там не так часто. быстрее 100% ловится. там помогает 35мс поставить. хотя при лимите 50мс это тоже странно

amurushkin: я думаю тут дело в кастомных мульти. там что то не то с рефери что он время меряет неправильно

amurushkin: YurkovAS: а там строку как обычно делать s+=move? или есть нюансы?

YurkovAS: += char

magaiti: s.push_back(char)

magaiti: s.append(char* moves, size);

YurkovAS: нюансы, хз, наверное как с vector-ом - будет ресайзиться, лучше сразу нужное кол-во памяти выделить

amurushkin: прикол со строкой набирает меньше ))))))

magaiti: а с += не будетресайзиться?

YurkovAS: мне кажется все 3 метода одинаковые

magaiti: аппенд быстрее если сразу много мувов запихивать

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

MadKnight: cout не то чтобы медленный

MadKnight: он просто делает flush() сразу же и ждёт когда в консоль попадёт

amurushkin: впринципе можно сразу и пачкой закидывать просто хранить ходы сразу в чарах

amurushkin: а массив чаров тоже можно через append? падает что то

MadKnight: Use std::cout << '\n' instead of std::endl. This avoids the flush after every line. std::endl will always flush, since that is its purpose. There's no option to disable that behavior. However, there's no requirement to use std::endl at all.

MadKnight: This works to an extent, but cout is buffered and will still flush on its own eventually when the buffer fills.

MadKnight: good news everyone

MadKnight: у cout есть встроенный строковый буфер

MadKnight: s+=move там встроено

MadKnight: так вы закиньте подробное описание в #bug-report, если завтра всё ещё будет

magaiti: о, забацал чтоб куча была не из элементов, а из указателей на них

amurushkin: быстрее стало?

magaiti: хз

magaiti: надо найти тест где 600 ходов и посмотрет ьсчет

magaiti: мож и не стало

magaiti: но копировать теперь надо меньше по идее

magaiti: у меня везде полтора ляма за 400 ходов и конец

magaiti: может отрезать побольше ходов, о 15 например

magaiti: 40 засабмитил

MadKnight: 40% ?

magaiti: 41.8м

magaiti: счет

amurushkin: сколько мс?

magaiti: 45 отсечка, 980 первый ход

magaiti: мне кажется просто код быстрее стал

magaiti: чаще время чекает

magaiti: но хз врать не буду

amurushkin: сабмитнул 25мс тупо на пробу. набирает мало но посмотреть таймауты будут или нет

magaiti: сделай почаще проверку времени

amurushkin: хм 25мс взяло

magaiti: а может просто сервера разгрузились уних

magaiti: конец рабочего дня

magaiti: пробуй больше

magaiti: потести, сколько у тебя задержка между проверкамитаймера

amurushkin: запустил все тесткейсы проходить

amurushkin: потенциально у меня должно быть больше чем у тебя вроде бы

magaiti: опять таймит

magaiti: немного поменял змейку

magaiti: неужели из-за нее

amurushkin: а что там может таймить?

magaiti: просто фитнесс дольше вычисляется

magaiti: да ерунда, сервер это

amurushkin: о я оптимизацию придумал только что :)

amurushkin: выяснил что у меня часть тестов берет 800 а часть 1.3-1.7

magaiti: и как оптимизировать будешь?

magaiti: я 42.2 с фейлами намутил

amurushkin: а я фитнесс считал всегда. даже когда не сдвинулось ничего

amurushkin: теперь не буду

magaiti: а

magaiti: обнуляй его когда что-то меняешь

magaiti: а когда чекаешь, пересчитывае если ноль

amurushkin: не это хуже вроде чем у меня сейчас

magaiti: в моем варианте зато все автоматически

magaiti: вызвал fitness() она все прверила сама

magaiti: думать не надо

magaiti: mutable float fitness_;

magaiti: http://chat.codingame.com/pastebin/557a94bd-c6ae-4cce-974a-e90f56aae9ea

magaiti: вот жеж

magaiti: странно, у меня косяк с типами fitness - где-то float , где-то целое

magaiti: целое работает лучше

magaiti: тесты в иде набирают больше

magaiti: но валидаторы меньше

magaiti: как так

YurkovAS: там 3 разных проца

magaiti: надо еще на быстрый проц попасть?

magaiti: ну ваще

YurkovAS: да, что не часто бывает

magaiti: кстати, может на быстром то и таймит

magaiti: из-за того что слишком длинный аутпут, или массив переполняется какой-нить

magaiti: который на глазок выделял

magaiti: 2.6м на одном тесте намутил

magaiti: на всех бы так

amurushkin: я случайно один увидел сейчас что там 2 и лимит

amurushkin: тоже вот нельзя запустить все тесткейсы и пойти погулять и потом результаты увидеть

magaiti: почему нельзя

magaiti: кнопка есть

magaiti: play all testcaes

amurushkin: а результат потом как узнать?

amurushkin: остается только последний

magaiti: смотреть на каждый

amurushkin: я же хочу пойти погулять а не сидеть и смотреть

magaiti: так вернешься и посмотришь

magaiti: наведи курсор на тест и увидишь\

magaiti: последний результат

amurushkin: не знаю я как это сделать. он перезапускает тест у меня если я нажму на строку с тестом

magaiti: не нажимай, мышку наведи

magaiti: ты с пк ?

magaiti: там подсказка всплывает

magaiti: я хз мож у тебя браузер какой-нить неправильный

amurushkin: хром. вот серьезно вообще не вдупляю как. можешь скрин сделать

amurushkin: о все увидел. пипец интутивно

magaiti: гыг

amurushkin: на сабмите бы еще так

magaiti: на сабмите облом

amurushkin: он как то сильно долго у меня встплывает и чаще всего толкьо если на номер теста навести

magaiti: единственная инфа из сабмита - пасс или фейл

magaiti: секунду где-то всплывает

magaiti: может у тебя страница тормозит

magaiti: анимацию не отключаешь

magaiti: If you add a - to the output, you will disable the viewer (as it can get laggy for longer games).

amurushkin: отключаю

magaiti: ну тогда хз

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

amurushkin: запущу все тесты и вручную сложу ))

magaiti: да, не хватает кнопки сложить

YurkovAS: проще уже локально запускать бота в рефери со всеми валидаторами

amurushkin: можно скриптом попробовать выдрать и сложить

magaiti: индуса нанять

magaiti: да елки. 44м и 1 фейл

magaiti: отдыхаем

YurkovAS: там и jquery доступен - легко написать

amurushkin: пишу в консоли просто не удобно

amurushkin: var sum=0;$('.testcase').each(function() {

       sum += Number($(this).attr('title').split(':')[1].slice(0, -1)); 
   }); console.log(sum);

amurushkin: держите кому надо

amurushkin: 42 насчитало

magaiti: ах ты негодяй

magaiti: в затылок дашишь

YurkovAS: http://chat.codingame.com/pastebin/d955bc24-3e5b-43fd-9e47-73a714afa3a6

YurkovAS: упс, обрезало

amurushkin: YurkovAS: давай в одну строку ))

YurkovAS: нашел пример, только еще каждый тест воводит + всего. юзал для оптимизации без рефери публичного. проще всетаки локально запускать из рефери

amurushkin: ты будешь ржать. я тебя на децл обогнал ))

amurushkin: приняло наконец то

amurushkin: а не. блин там нолик у меня еще )))

amurushkin: думал совсем почти одинаково

amurushkin: показалось что у тебя 830 а у меня 831

amurushkin: Mad вот видишь код целый день не принимало без изменений приняло

magaiti: нолика в конце не хватило? :D

magaiti: не дают без фейлов. 46 было один раз

magaiti: ну так тоже сойдет

magaiti: догоняй

magaiti: завтра проснусь, а у тебя 700

magaiti: таймаутит рефери в иде

magaiti: либо я все-таки где-то вылетаю

Default avatar.png Mosha: Товарищи, всем привет! Поделитесь идеей, пожалусйта, как вы боретесь с тем, что дрон вокруг чекпоинта кружит

Default avatar.png Mosha: Я думал выкрутить ускорение на максимум, но этого не хватает, он просто спирально достигает чп, и всё равно достаточно долго(\

magaiti: ускорение выруби

magaiti: пока не развернешься в сторону чекпоинта

Default avatar.png Mosha: Просто, по идее, он тогда очень далеко отлетит... Но надо попробовать, спасибо! Слушайте, а тут чаты связаны с соревнованиями? Каждому соревнованию - свой?

magaiti: нет

Default avatar.png Mosha: А, окей, значит, меня затроило... Спасибо

amurushkin: у клешей есть свои чаты

wlesavo: бим серч чето не работает у меня совсем

wlesavo: ну не совсем но очень плохо

amurushkin: он сильно беспощаден к параметрам

wlesavo: просто не пойму баги искать или пытаться в параметры, у меня до 2к доигрывает максимум. вроде работает правильно, хз

amurushkin: 2к это маловато

YurkovAS: 2к это кол-во ходов найденных всего?

Uljahn: Automaton2000: вроде правильно, но плохо

Automaton2000: у меня в общаке смайлы не показывает

Uljahn: в бимсёрче на каждой следующей глубине берём топ-N (ширина луча) лучших потомков из всех возможных?

amurushkin: да

magaiti: N лучших

magaiti: лузших

gsomix: MadKnight, а какой контекст?

magaiti: LURULRRULULLULR

magaiti: какой-то морлокский язык

MadKnight: gsomix я не называл всех стариками, я назвал свою фразу слишком подростковой

Uljahn: у меня рандомом из "LULD" сэмплируется, подогнал сиды под тесты как Т1000 в TAC ))

Uljahn: Automaton2000: i luld

Automaton2000: ну я про это тебе и говорю, что ГА меньше думать заставляет

wlesavo: YurkovAS 2к это число максимальное до которого доходит

magaiti: что за число? счет, ширина луча, глубина луча?

gsomix: MadKnight, проехали. Я просто неудачно пошутил. :)

magaiti: фишка на доске максимум 2048,

magaiti: Automaton2048

magaiti: Automaton2000, почему ты не Automaton2048?

Automaton2000: вот и я о том же

MadKnight: Automaton2048 был бы противником или боссом в мультиплеере

amurushkin: 47 лямов с фейлом )) почти обогнал

amurushkin: 53120916 столько набрал в иде

magaiti: я тоже

magaiti: 53.8

magaiti: скоро за 2-е место будем драться

amurushkin: я только засабмитить не смог )))

magaiti: 57.2

magaiti: думаю народ поднапряжется, и через месяц тут сотни лямов будут

amurushkin: я туда нет. больше 70 не вытянут

MadKnight: вы пробовали искать через эвристику + откат если змейка сломана?

MadKnight: amurushkin magaiti

magaiti: откат не пробовал

magaiti: эвристика ну это змейка и есть

MadKnight: так а откат чего не попробовал?

magaiti: кодить надо

MadKnight: ты щас как эвристику юзаешь?

magaiti: набираю N решений с максимальной оценочной

magaiti: вот

MadKnight: заче

MadKnight: м

MadKnight: и какая глубина

MadKnight: реплей

MadKnight: дай

magaiti: бим серч так работает

magaiti: поиск в ширину, с ограниченной нириной

magaiti: ща реплейсделаю

magaiti: но как он тебе поможет

magaiti: https://www.codingame.com/replay/492880241

magaiti: 43к ходов, ты так сможешь?

YurkovAS: magaiti invalid action

magaiti: ходы кончились, давлю в пол

YurkovAS: интересно у тебя змейка реализована, сначала макс был справа, потом стал слева

magaiti: :)

magaiti: один раз 3.3 ляма за тест получил, но не могу поймат ьснова

magaiti: повезло с таймингом где-то