Chat:Ru/2020-11-21
wlesavo: не мерил еще
MadKnight: ну посчитай
wlesavo: lf vyt ,s ljgbcfnm xnj-nj [jnz,s b ghjdthbnm pfgecnbncz djj,ot bkb ytn
wlesavo: ой
wlesavo: дописать бы до рабочего состояния, там уже посмотрим
MadKnight: чё на экран не смотришь когда печатаешь?)
Egrace: а что это за фетиш во все методы алгоритмов передавать итератор начала коллекции и конца коллекции?
Egrace: vector<Chromosome> chromosomes; sort(chromosomes.begin(), chromosomes.end());
Egrace: почему не сделать просто sort(chromosomes); ?
Egrace: вопрос про плюсы :)
TheCrucial: чтобы более универсально было. с++ не про краткость язык
Egrace: а что тут универсального? если я захочу отсортировать половину коллекции, я поделю коллекцию пополам, отсортирую нужную половину и на место старой половины вставлю новую
Egrace: но это нужно в одном случае из сотни
Xyze: это долго и медленно
Xyze: а тут как бы из коробки )
Egrace: зато в остальных 99 случаев мне приходится писать бесполезные iter->begin() и iter->end()
Egrace: могли бы перегрузить, это вообще не проблема
Egrace: но тут какой-то мазахизм сознательный
Xyze: наверное boost перегружает, возможно
TheCrucial: https://www.codingame.com/replay/507463956 найс финал
metahom: чат ожил?
metahom: когда обычно РАИК открывается? должен сегодня по идее, но во сколько?
YurkovAS: что-то поменялось: рекурс топ1, и чел. с растом из топ1-5 удалил аккаунт и сломал бота
YurkovAS: metahom раик когда-нибудь запускали на выходных? там же что-нибудь будет ломаться. что-то сомнительно...
metahom: бета -тест. ну сломается и сломается
metahom: https://russianaicup.ru/
metahom: YurkovAS, классный результат в контесте кстати. дожимай топ-20
YurkovAS: спасибо! пытаюсь
aropan: > что-то поменялось: рекурс топ1, и чел. с растом из топ1-5 удалил аккаунт и сломал бота Так-так, а есть подробности?
aropan: Хм, Emil это был? https://www.codingame.com/profile/d602fc65f0a3302a73c9221ef2b9bfc01477504 действительно удален.
YurkovAS: да да он. причем все время в топе был.
YurkovAS: хоть бы кодом с нами поделился, а потом уже удалялся :smile:
metahom: он хайдится может. или это и был рекурс
aropan: Да, обе теории хороши.
dbf: Рекурс так решил раст изучить :)
aropan: Но я все же буду больше верить в первое - reCurse же не прохожий с улицы и зачем ему этим заниматься.
YurkovAS: питон в леге :smile:
BorisZ: да точно круто блин
BorisZ: а я предал питон и бог меня наказывает
BorisZ: бог питона
dbf: главное, чтобы там не был c++ запакован внутрь
BorisZ: вряд ли - он часто высоко встает в контестах, то есть чел крутой, а упаковывать это гемор, почему бы просто на плюсах не писать
wlesavo: чокудай пришел, хех
wlesavo: короче рерайт на бимсерч уже лучше чем то что было, при этом всего 30к уникальных состояний
YurkovAS: :thumbsup:
wlesavo: и вообще еще не тюнил параметры коих легион
ilgiocatore: капец как я позорно долго думал о том, как узнать, сварил ли соперник зелье в прошлом ходу) о боже, к концу контеста мозг уже в печальном состоянии
Jokero: фига, в леге монополия плюсов))
aropan: > капец как я позорно долго думал о том, как узнать, сварил ли соперник зелье в прошлом ходу) о боже, к концу контеста мозг уже в печальном состоянии Я не писал это, но думал смотреть насколько изменился его vp (определяем купил ли что-то) и как изменился корзина камней (по ней просто узнать заказ).
aropan: Тебе надо подсобраться - контекст же только начинается, до этого был разогрев. )
ilgiocatore: я в эту сторону сначала думал и откладывал реализацию, а потом внезапно осознал, что достаточно посмотреть его количество рупий..
ilgiocatore: я только вчера написал симу. как всегда, она сначала значительно хуже, чем тупая эвристика
ilgiocatore: еще тоже долго думал, как запарно следить за urgency bonus в зельях, а потом внимательно описание прочитал и узнал, что эта инфа даётся в инпуте в параметрах tomeIndex и taxCount
aropan: > я в эту сторону сначала думал и откладывал реализацию, а потом внезапно осознал, что достаточно посмотреть его количество рупий.. Количество рупий не достаточно же, если заказы будут в одинаковую цену.
aropan: Хотя.
aropan: Да, можно на ингредиенты не смотреть - если детектить какой заказ сделал и какие заказы исчезли.
ilgiocatore: ну да, я забыл упомянуть, что мне это нужно было только для того, чтобы вести счёт сваренных зелий
ilgiocatore: чтобы в симуляции прекращать игру, когда один из игроков сварил шестое
YurkovAS: wlesavo поздравляю!
wlesavo: спасибо :slight_smile:
wlesavo: все-таки рерайт стоитл того
735487: так что все таки бимсерч надо было пилить? я вот сегодня только начал. решил начать с рандома. чет вообще плохо получилось
wlesavo: да, но у мне конечно опыт мс помог сильно, но бимсерч лучше заиграл
wlesavo: amurushkin там главное в симе вовремя заканчивать роллаут
wlesavo: и победу оценивать соответственно
BorisZ: wlesavo грац
735487: а у меня просто сима рандомом на определенную глубину и все потом оценка
BorisZ: быстро же ты переписал
wlesavo: BorisZ спс :slight_smile:
wlesavo: вчера вечер получается посидел, сегодня утром баги чистил и чуть параметры покрутил уже только
wlesavo: там явно еще сильно неоптимальная реализация, всего 30к состояний уникальных прохожу
YurkovAS: у меня вроде как все быстро работает, но этого мало. нужна хорошая евристика еще
wlesavo: у меня одна из хороших эвристик в мк была полный поток ингридиентов, то есть награждать немножко за полученные и потраченные ингридиенты
wlesavo: здесь вроде отключена, за может включу проверю
BorisZ: хитро )
wlesavo: идея в том что чем больше поток ингридиентов тем лучше
YurkovAS: томатос ссылку на статью скидывал и в телеге есть, там какие-то комбо и еще то-то. пока не осилил
735487: у меня сейчас оценка что сварил плюс инвентарь
735487: YurkovAS: теоретически эти комбы поиск сам должен находить
wlesavo: ну главное конечно оценивать победу/поражение
BorisZ: надо инвентарь не на конец всей цепочки а после варки непосредственно
BorisZ: там в конце ж будет хрень всякая ненужная
wlesavo: после варки не оч полезно как-то получалось, хот я в бимсерче там по другому и не получается
wlesavo: даже не самое дно легенды, ладно я доволен, может еще чуть потереблю параметры эвалов ближе к вечеру или прикручу че-нибудь
wlesavo: впринципе выглядит так что можно и за фтуболки побадаться
NightLuna: о, ты такими темпами еще и футболку получишь))
735487: а я похоже так и останусь в серебре :) буду ждать раика уже наверное
NightLuna: сегодня же вроде анонс, нет?
YurkovAS: wlesavo :thumbsup:
735487: NightLuna: да вроде сегодня уже старт беты должен быть
Egrace: а что за раик?
NightLuna: https://russianaicup.ru/
wlesavo: че это за херня, я пошевелил один параметр и в магазин пошел, какое топ 6
Egrace: :grinning:
NightLuna: неплохо
YurkovAS: явно улучшил, т.к. от 10 места заметно выше скоринг
wlesavo: я короче не знаю как это работает
wlesavo: стал оставлять в пуле больше изучений спелов
Uljahn: лол, найс
wlesavo: я вообще даже в легенду не собирался а тут такое, уф
Uljahn: го в топ-3 теперь :)
wlesavo: это тепереь дальше придется делать че-то, я собирался пива выпить и промоушн отпраздновать :smiley:
Uljahn: выпей пива и тереби константы
wlesavo: да чето как-то ресабмитить даже не хочется :smiley:
wlesavo: 6-9 почти одинаковый скор у всех
NightLuna: wlesavo ты не учишь во время игры, только в начале?
NightLuna: а, нет, увидела
NightLuna: учишь в середине
wlesavo: как раз эта константа на изучение дала буст какой-то аномальный
MadKnight: wlesavo запилил смитси?)
wlesavo: не, просто бим серч в рабочее состояние привел
Xyze: слушайте, кто подскажет, можно ли на плюсах bool массив из 30000 элементов заполнить false не через цикл
Xyze: точнее, быстрее чем через цикл
wlesavo: memset но лучше аккуртно его использовать
Xyze: что нить типо memcpy
Xyze: ага
wlesavo: с нулями вроде норм работает
Xyze: а с nullptr прокатит?
wlesavo: вот значения там уже сложно
Xyze: значения вообще не надо
Xyze: просто скинуть массив в исходный
Xyze: это либо 30000 false
Xyze: либо 30000 nullptr
wlesavo: ну можешь попробовать, но думаю получится чтото плохое
Xyze: ахах )
Xyze: спс, попробую
ilgiocatore: а почему с memset получится что-то плохое? он же байтами нормально нули положит и всё
Xyze: насколько я понял для false да
Xyze: а вот нулптр
Xyze: это же не нули вроде
ilgiocatore: nullptr это ноль тоже, если не ошибаюсь
ilgiocatore: у нуля в плюсах много имён )
ilgiocatore: можно проверить всегда
wlesavo: а к слову зачем тебе 30к false? :slight_smile:
Xyze: пытаюсь фильтровать одинаковые ветки
Xyze: сложная схема у меня ))
ilgiocatore: к слову bool массив можно и значением заполнить, потому что он один байт (по крайней мере на местном компиляторе)
wlesavo: мож че попроще придумать? :smiley:
Xyze: я пока смог в 2 раза срезать количество веток
Xyze: а unordered_set срезает в 4 раза
Xyze: значит надо думать дальше
Xyze: вот пытаюсь
Xyze: но этот сет при ветках > 50к штук сам меня таймаутит
wlesavo: а ачем тебе ветки > 50k
Xyze: так мне как раз и не надо
Xyze: там просто при симуляциях куча одинаковых состояний
Xyze: из-за этого я гоняю одни и те же ветки
ilgiocatore: Xyze ты как-то закодировал состояние в число до 30к?
NightLuna: 30к вообще неплохо
NightLuna: хеш какой-то?
Xyze: ага
NightLuna: его же считать надо.. это долго
NightLuna: ты же можешь создать массив интов 30к длиной
NightLuna: и в него запоминать был ты в ветке или нет, почему нужны именно bool
NightLuna: в вершине*
ilgiocatore: так для этого и нужен массив bool, зачем использовать int?
NightLuna: ну чтобы не очищать
mabu: bool bul
NightLuna: ну типа в значениях хранить номер шага... и тогда не надо очищать в начале
Hoggins: я местами что бы не очищать использую номер цикла. На следующем цикле если номер не совпадает для какого то действия, значит я его не делал
NightLuna: ну да, я про это же
MadKnight: всмысле - очищать?
MadKnight: от чего?
NightLuna: если выделить массив глобавльный, то перед каждым запуском поиска, например, нужно будет его очищать
aropan: > слушайте, кто подскажет, можно ли на плюсах bool массив из 30000 элементов заполнить false не через цикл Можно, но написать самому. Сделай массив на столько же элементов и переменную времени. Пусть будет upd[30000] = {0}, time = 0. Теперь, чтобы установить x в true нужно upd[x] = time, для проверки if (upd[x] == time), для сброса всех значение ++time.
Xyze: кажется я осилил бруфорс на глубину 6
Xyze: https://www.codingame.com/share-replay/508009104
Xyze: бот пишет - время этого хода / среднее время хода / пиковое время за игру
NightLuna: у тебя всегда глубина 6?
Xyze: справа я, но на глубине 5
Xyze: щас 100% всегда 6
Xyze: кроме пиков где отсечка на 40 мс
Xyze: это пару раз за игру
Xyze: ну как пару раз ))
BorisZ: Xyze если оба бота делают полный перебор то почему не ничья?
Xyze: это просто сид, где я всегда в таймауты бьюсь
BorisZ: ходы должны быть одинаковые
Xyze: BorisZ 6 vs 5 глубина
Xyze: при 5 1 к 1 игра
Xyze: надо бы оценку к этому чуду сделать
NightLuna: а у тебя уникальное состояние это инвентарь, усташие скилы и сделанные зелья?
Xyze: да, ну всё кроме учения спелов
BorisZ: но 6 хотов то ведь не хватит чтобы 2 зелья спланировать
BorisZ: как правило не хватит
NightLuna: я вот пытаюсь дооптимизировать, чтобы глубина была 8... чтобы успевать
Xyze: а что за алгоритм?
NightLuna: bfs
NightLuna: XD
Xyze: а ты вообще способна взять глубину 8?
NightLuna: сейчас? ну иногда
NightLuna: если не все отдохнувшие
NightLuna: но вообще в чате в тг писали, что глубина 8-10
Xyze: жоска, я такое вообще не потяну
Xyze: но я щас буду уходить от брутфорса если он не прокнет
wlesavo: NightLuna конвертируй в бимсерч, изи глубина 8-10
wlesavo: это проще чем с MC переписать даже
NightLuna: ага, тоже об этом думала, зачем оптимизировать, если можно на бимсерч переписать
NightLuna: но я его никогда не использовала в контестах... сложно сказать, что получится
Xyze: аналогично
NightLuna: у меня сейчас в самом начале с 10 изученными спелами получается 7 глубина
Xyze: я вытягиваю 50к состояний за 40 мс
Xyze: но у меня клон состояния делается
Xyze: то есть я помню вообще все пути к состоянию
Xyze: какой-нить монтекарло без памяти изи 150к сим сделает
wlesavo: я один раз только до этого делал в 2048
wlesavo: у меня было 15к сим на глубину 7-9 +-, но там больше и не надо
NightLuna: надо будет порешать потом 2048
NightLuna: я чет пропустила ее
wlesavo: 2048 мега интересная вышла
wlesavo: 150к сим в мс не знаю, чето заоблачные цифры какие-то
Xyze: ну блин, каждый раз делать клон объекта с 14 спелами, 5 банками и инвентарем
Xyze: по времени будет как 1 сима хода
NightLuna: зачем тебе так много в стейте
Xyze: ну +-
Xyze: потому что я мало думал какие части выделить в стейт
NightLuna: хватит инвентаря, маски уставших спелов, скора и сделанных заказов
wlesavo: а, 150к ходов это норм, у меня иногда достигало приерно такого
timqsh: >слушайте, кто подскажет, можно ли на плюсах bool массив из 30000 элементов заполнить false не через цикл точнее, быстрее чем через цикл
Может std::bitset использовать для этого?
timqsh: mybitset.set() - все true mybitset.reset() - все false
Xyze: хмхмхмхм
Xyze: надо обязательно глунять
Xyze: спс
timqsh: Он еще и хранить их оптимальнее по 1 биту на флаг, а не по байту)
BorisZ: чел на питоне в леге намекает как бы что количество сим и глубина - не главное )
wlesavo: но челы на плюсах тоже намекают :smiley:
ilgiocatore: timqsh ну и там memset под капотом как раз внутри reset функции
ilgiocatore: но хранит битами, да
ilgiocatore: словами размером unsigned long
timqsh: > словами размером unsigned long то есть он мне на bitset<6> 4 байта выделит? Я думал оптимизирует, чтобы 1 был.
ilgiocatore: ну я сейчас исходники глянул мельком, мб не всё увидел
timqsh: Тогда для небольшого количества флагов будет оптимальнее руками битмаску запилить)
Xyze: ща залью, посмотрю как это мне не поможет =)
Xyze: хотя вдруг
Xyze: и буду более полезные вещи пилить
aropan: >>слушайте, кто подскажет, можно ли на плюсах bool массив из 30000 элементов заполнить false не через цикл > точнее, быстрее чем через цикл > Может std::bitset использовать для этого? Чуть выше писал, что для этого нужно сделать. Оптимальнее только если нужно память сэкономить, а так там все операции за O(1).
Xyze: чат лагнул?
ArchStanton9: Поменял значения в структурке дельты с i32 на i8, и начал вместо 15к нод считать 35к
ArchStanton9: как раз на 7 ходов в глубину
ArchStanton9: надо было еще неделю назад так сделать)
BorisZ: некоторые в 2 байта запаковывают, по 4 бита как раз хватает от -5 до +10
Empted: почему производительность выше если работать с byte? только по памяти же выигрыш должен быть
Empted: наоборот же, если поля не выравнены под 32 или 64 бита то хуже, разве нет?
ArchStanton9: Возможно это как-то влияет на выравнивание в других структурах так что их становится проще копировать
BorisZ: это да, но есть еще другие факторы - больше влазит в кэш процессора может фиг знает
BorisZ: копирование может быстрее если в 2 раза меньше копировать надо
wlesavo: а можете подсказать пожалуйста, у меня есть хэш состояния в long long, и я проверяю дубликаты в unordered_set тоесть по хэшу нахожу входит ли он в сет или нет, есть что-то быстрее?
wlesavo: я понимаю впринципе что можно руками накостылить что-то быстрее, но наверное есть решения
wlesavo: мне нужно просто проверить есть ли такой хеш в сете и если нет добавить его
wlesavo: внезапно эта проверка жрет 90% моего времени, потому что он еще и лонг лонг преобразует в свой хэш и уже по нему ищет
wlesavo: и потом второй раз преобразует при инсерте
Xyze: я ж говорил что у меня unordered_set таймаутит код
Xyze: потому я и костылил
NightLuna: как-то мало 30к для хранения состояния...
Xyze: я ж добивался не полностью срезания веток как set умеет делать
Xyze: а приемлимое количество
Xyze: щас я из 10к делаю 4к, а сет делает 2,5к
Xyze: но сет слишком долго там всё считает
wlesavo: хм
Xyze: то есть я по факту пропускаю дубли, но мало
wlesavo: если придумаешь чето умное я послушаю с удовольствием
Hoggins: wlesavo, а почему бимсерч а не полноценный mcts?
wlesavo: малой кровью хотел обойтись и знал что на бимсерче люди проходили
wlesavo: в итоге и правда малой кровью
735487: о пока я ходил меня примерно с 14 места серебра в голду пропушили ))))
BorisZ: угу, надо больше ходить
BorisZ: у меня вот не получается предсказание противника - играет что с ним что без него одинаково
BorisZ: если бы хуже играло - было бы понятно, а то примерно в одну область пушится
BorisZ: может тут вобще не стоит предсказывать ничего
eXhaustedUA: привет, а кто-то на свифте пишет? может кто знает как померять время выполнения хода? а то мне стандартные функции показывают по 100 мс, хотя лимит вроде 50
BorisZ: eXhaustedUA проверь что таймер стартует после получения первой строки инпута
BorisZ: если до инпута - то ты и за себя и за врага меряешь или что-то среднее
eXhaustedUA: BorisZ после того как считываю actionCount типа?
BorisZ: угу
eXhaustedUA: хм, похоже на правду, спасибо
WhiteCrow: Чё там, меньше двух дней осталось?
WhiteCrow: Пора просыпаться?
WhiteCrow: Я слышал, что в этот раз тестирование очень долгое
BorisZ: с таймаутами проблем больше чем обычно - много народу
BorisZ: хотя и весной было не меньше
wlesavo: BorisZ у меня 1000 роллаутов на оппонента хвататет чтобы предсказать окгда он наберет 6 зелий и примерно очки его, больше можно не предсказывать ничего
BorisZ: попробую, спасибо, я пытался слудующее зелье врага предсказывать
BorisZ: и соответственно корректировать скор
wlesavo: у меня было что то такое реализовано, но вроде как без этого играло лучше
BorisZ: но получается хрень, видимо они гады что-то другое варят постоянно
wlesavo: ну ты просто слишком хорошо все равно не предскажешь, а цена ошибки очень велика
wlesavo: то есть ты себе будешь искать с плохим предсказанием
BorisZ: да, я вижу что он иногда правильно варит а иногда нет
Zhmyh: Написал генетический алгоритм для подбора параметров. На одно поколение из 10 челиков уходит целых 10 минут :tired_face:
Zhmyh: Лучше б сам с собой играл
wlesavo: а всегда так было что в легенде не 10 игр со старта а по одной
BorisZ: вроде по 10 было всегда
wlesavo: тут по одной запускается, непривычно так выглядит
wlesavo: может по тому что относительно небольшая пока легенда
BorisZ: крутить параметры - дорога в ад, надо фичи пилить
Zhmyh: Ну можно не параметры
Zhmyh: Мне немного изменить - и нейронка будет
wlesavo: о, все таки не по одной а три сразу
wlesavo: вместо 10
C2H5OH: Вот как так? В списке на арене я проиграл, нажимаю "загрузить в IDE" - а я там выиграл.
Zhmyh: Отсечение по времени
Zhmyh: А время разное
Zhmyh: Или рандом
BorisZ: не - либо у тебя либо у врага ГСЧ
BorisZ: про себя даже не всегда можно быть уверенным что все детерминированно
MadKnight: wlesavo может потому что в леге 4 человека?)
YurkovAS: wlesavo если использовать для уникальности только хешкод, то могут быть коллизии. Т.е. 2+ разных состояний будут иметь одинаковый хешкод и посчитаются как дубликаты
BorisZ: а зачем вобще проверять на уникальность в бимсерче - пусть будут одинаковые состояния
wlesavo: YurkovAS да я понимаю, но я готов этим пожертвовать
wlesavo: BorisZ это как ГА где вся популяция одинаковая
wlesavo: учет дубликатов для бимсерча похоже что одна из ключевых вещей
BorisZ: а типа если дубли будут с топовым скором то они всех выживут
wlesavo: да
wlesavo: и быстро расплодтся на всю ширину
BorisZ: memcmp - медленно?
BorisZ: перетасовать поля стейта чтоб все указатели на родителя были вначале а инвентарь и спеллы все вместе в конце, эту часть стравнивать
BorisZ: хотя надо будет много раз сравнивать (
wlesavo: ну да, хеш получается не медленно даже, просто хочется еще быстрее
YurkovAS: саму функцию можно ускорить
wlesavo: а можно подсказочку как? у меня я посмотрел и в 2048 изза этого сильно страдает код
wlesavo: там еле ширину 40-50 вытягивает
YurkovAS: например, было так: r = 31 * r + inv0; r = 31 * r + inv1; r = 31 * r + inv2;
YurkovAS: http://chat.codingame.com/pastebin/fc64e36e-bd39-467f-b49e-46546e3417bd
YurkovAS: избавляется от лишних умножений
wlesavo: а, ну сам хеш мой у меня быстро считается, тоже двигаю
wlesavo: но вот дубликаты ищутся долго
wlesavo: хеш от int64 еще внутренний какой-то считается, я думал перегрузить, но не уверен на что вообще
YurkovAS: ну это не знаю даже, юзаю unordered_set, глобальную переменную и каждый раз делаю clear
wlesavo: а примерно сколько уникальных посещений у тебя?
YurkovAS: это как?
YurkovAS: а, понял
YurkovAS: можно еще юзать фиксированный всегда отсорированный массив
YurkovAS: у меня так сделано. и тогда через бин поиск в нем искать место для вставки. хз, как оно по скорости. а в нем лежат указатели
YurkovAS: оно вроде бы быстрее, чем добавлять всегда в массив, потом его сортировать и отсекать лишние.
wlesavo: хм, ну ладно, короче простого решения нет, может сам подмаю потом
YurkovAS: уникальные посещения измерять после отсеивания дубликатов?
wlesavo: да
YurkovAS: у меня там еще отсеивание по скору есть, т.к. массивы отсорированы и мы точно знает кто не подходит
YurkovAS: может проще роллауты замерить...
YurkovAS: или забить
wlesavo: хм, ну да, я тоже пытаюсь по скору отсеивать, но чето это почти ничего не дает похоже, плохая оценка может
Xyze: ага
TTeaLL: да уже решил проблему)
wlesavo: я тут понял что мой хэш не работает, и можно просто убрать проверку уникальности
wlesavo: и в 10 раз увеличить ширину луча :grinning:
YurkovAS: у меня с больше 5к играет хуже
wlesavo: ну у меня чем больше ширина тем проблематичнее с роллаутами еще
wlesavo: с таймаутами всмысле
YurkovAS: прогонял еще раз ту лучшую версию? в топ5-10
YurkovAS: так и не нашел граалей
wlesavo: YurkovAS да, не поднимается туда, сейчас сабмиты очень странные, на дне сильные игроки и просто не дают подняться
wlesavo: видимо и правда удачный сабмит был, сейчас разве что в топ 15-16 поднимался когда дождался конца сабмита
wlesavo: думаю в районе топ 20 если сабмитнусь успокоюсь
wlesavo: а нет, работал все-таки хэш
wlesavo: иакое себе время тюнить параметры конечно, сабмиты вообще непонятные