|
|
  |
Упростить скрипт |
|
|
DarkMaster |
11.8.2013, 17:56
|
          
Модератор UOPilot
Сообщений: 9.752
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29836
Пользователь №: 11.279

|
перечитал скрипт. За однобуквенные переменные и 0 комментариев хочется дать немного в лоб) я сначала не так понял всю логику скрипта. При твоем подходе %field можно вообще не генерировать. Можно сразу пачку массивов создать разных. У меня была мысль пойти по такому пути, но мне показалось решение с полноценным воссозданием поля более перспективным и полноценным. Я бы искал пары прямо в %field, а потом прогонял возможные варианты при которых картинка "соберется". Тут внезапно подвел indexOf, который оказался не в состоянии искать в границах Х координаты в массиве. Из-за этого я уже не уверен в правильности варианта - быстродействие может подвести. На самом деле я сегодня весь день в голове фоном прокручиваю алгоритмы поиска, пытаясь найти красивое решение. Самое шикарное по быстродействию и красивое боюсь не потянуть, там математика больно хитрая, но вариантов решения действительно много. Кстати схема поиска вправо и вниз при некоторых реализациях может пропускать варианты сборки. В целом: работает - не трогай). У меня пока мысли крутятся еще. Может не поленюсь.
По диагонали собирать надо или нет?
Сообщение отредактировал DarkMaster - 11.8.2013, 17:57
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
veiron |
11.8.2013, 18:34
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(DarkMaster @ 11.8.2013, 17:56)  перечитал скрипт. За однобуквенные переменные и 0 комментариев хочется дать немного в лоб)
Постараюсь исправиться. Цитата Кстати схема поиска вправо и вниз при некоторых реализациях может пропускать варианты сборки. В целом: работает - не трогай). Мне супер скорость и не надо, а вот что ходы будет пропускать это плохо. Цитата У меня пока мысли крутятся еще. Может не поленюсь. Было бы не плохо. Цитата По диагонали собирать надо или нет? (IMG: http://s2.ipicture.ru/uploads/20130811/F1WUVWsI.jpg) Да надо. На картинке, белым цветом выделены те которые я нашел. А желтым, это которые можно подвинуть что бы составить линию из трех шаров. Мне надо с начало найти 2 вместе, а потом проверить 6 этих точек. И еще надо их распознать так, что левых 3 шара подводятся с левой сторон, а правые справа.
|
|
|
|
DarkMaster |
11.8.2013, 20:37
|
          
Модератор UOPilot
Сообщений: 9.752
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29836
Пользователь №: 11.279

|
Вообще план изначально был таков: 1) indexOf до первого найденного элемента в %field 2) indexOf в области от х до х+1 и от у до у+1 относительно найденного элемента. Определяем существует ли пара, автоматически получаем ее координаты(или их). 3) расчет области и indexOf не менее 3 элементов около найденного. Таким образом мы бы исключили сразу зону, если в ней недостаточно элементов одного типа. Причем это было бы скорее всего очень мало затратно по ресурсам. Правда возможно будет быстрее просто ифами, если найдено по диагонали, надо тестить сколько жрет поиск и сколько ифы. 4) Просчет позиции. Возможно ли собрать из получившегося линию. 5) indexOf со следующей ячейки до первой найденной. Для просчета возможности линии можно попробовать использовать математику. Тут может помочь присвоение степеней двойки для каждой из клеток. Получить тем самым битовую маску, потом сделать побитовое сравнение, возможно сравнение текста. Вот только не помню регекспы есть уже или нет. Фактически можно создать что-то вроде сигнатур, а потом их использовать для сравнения. Из-за indexOf пункты 2, 3, 5 придется заменить обычными ифами и форами. Это по идее должно быть существенно медленнее. Цитата моим 0 познанием в програмированнии. 98% моего познания в программировании - это пилот) Но вроде шибко не мешает. Хотя иногда охота научиться новым трюкам. Сообщение отредактировал DarkMaster - 11.8.2013, 20:38
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
veiron |
11.8.2013, 20:59
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(DarkMaster @ 11.8.2013, 20:37)  Для просчета возможности линии можно попробовать использовать математику. Тут может помочь присвоение степеней двойки для каждой из клеток. Получить тем самым битовую маску, потом сделать побитовое сравнение, возможно сравнение текста. Вот только не помню регекспы есть уже или нет. Фактически можно создать что-то вроде сигнатур, а потом их использовать для сравнения.
Даже не представляю как это сделать в пилоте. Если надумаете объяснить как это делается, то не надо, мой мозг к такому еще не готов)) Цитата 98% моего познания в программировании - это пилот) Но вроде шибко не мешает. Хотя иногда охота научиться новым трюкам. У меня 100% познаний это пилот. Я когда тут на форуме увидел скрипты, быстренько закрыл форум и написал в пилоте скрипт с одними left и wait. Потом этого оказалось мало, стал больше вникать, благодоря вам и Zeleax дело потихоньку сдвинулось с мертвой точки. P.S Скорее всего буду 2 искать indexOf, потом ифом проверять остальные 6 клеток. Только теперь опять проблема, как перевести назад цифры с файла в координаты поля.
|
|
|
|
veiron |
11.8.2013, 21:54
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(DarkMaster @ 11.8.2013, 21:37)  А не получится при таком синтаксисе. Он вам будет искать в диапазоне У-У+1, а вот X будет от 1 и до конца массива. В этом и беда.
Вроде работает. Правдо фор много при этом работает. Я делаю как если в фале есть запись 11 значит это левая верхняя клетка, значит по горизантали спрова от нее в фале должно быть 12. Я тупо делаю +1 и в фале ищу строчку с цифрой 12. Вроде получается довольно быстро. Сейчас еще вроде способ придумал, В файл записываются не только цифры цвета, но и сами координаты. Вот сейчас пробую по координатам найти рядом 2 и сразу 3. Может что получится, по неумению, может и повезет) Цитата я бы от файлов избавлялся. Это реальный тормоз, дерганье винта. Не кошерно это. Тут либо по полю все это обрабатывать, либо поле вообще не делать, а сразу же делать кучу массивов. Там по сути к этому все готово и модификации совсем небольшие должны быть. А как из этого вашего скрипта, напрямую записать разных 5 массивов?
|
|
|
|
veiron |
11.8.2013, 23:27
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(DarkMaster @ 11.8.2013, 22:56)  Учитывая, что трехмерных массивов не бывает, то я вижу всего два способа: 1) развернуть for и просто подставить 5 разных массивов. Т.е. рабочая часть будет в 5 раз длиннее. Ну можно что-то в подпрограммы выкинуть, если сильно не хочется удлинять скрипт.
Попробовал так и сделать. Работает. Все равно это намного будет быстрее ,чем у меня было на ифах. Такой скрипт уже есть на форуме, только там все так замудрено, что я день над ним отсидел, так и ни чего и не понял. Цитата 2) Попробовать на*бать природу. Есть такой забавный момент: Можно попробовать подсунуть подобным образом массив в паре с оператором eval. Но у меня не получилось. Может zeleax или кнайт осилят. Было бы неплохо, еслиб помогли.
|
|
|
|
|
  |
58 чел. читают эту тему (гостей: 58, скрытых пользователей: 0)
Пользователей: 0
|
|