Софтина для подбора сборки из артефактов
- Изменено
Gagutuun В идеале я бы хотел учитывать экономический фактор, но к сожалению пока не придумал как.
если говорить о более низком качестве можно к API сталкрафта обратится. Возможно будут хоть и не самые объективные, но хоть какие-то близкие цены брать с данных аукциона.
Как и говорил, хочу подробнее рассказать о том, как реализована программа на данный момент, чтобы можно было оценить насколько удачно я придумал сам алгоритм. Постараюсь максимально подробно, с картинками, чтобы было наглядно.
Ну чтож, поехали!
1| Все начинается с загрузки файла, содержащего параметры артефактов. Эту условную “БД” я поместил в json файл, поскольку понятная структура, объектов не так много, удобно хранить и обрабатывать. Ниже пример структуры:
Как можно понять, взял я точку отсчета артефакты с редкостью “обычные”, качеством 100% и потенциалом 0, думаю в этом моменте вопросов возникнуть не должно. Данные из этого файлика будут подгружаться в основную программу.
2| Далее происходит инициализация входных данных в виде контейнера (его вместительности и защиты) и желаемых баффов в понятной форме: “Название баффа”: “Значение”. Этих баффов может быть сколько угодно, хоть все сразу.
Важный момент : желаемое значение конкретного баффа может быть любым путем использования знака “*”, что говорит программе о том, что данный бафф просто должен присутствовать в итоговой сборке, но его значение не имеет границ.
Буду предоставлять выдержки из окна среды разработки для лучшей наглядности.
3| После входим в основной цикл в котором первым делом мы формируем список артов, которые содержат нужные нам баффы. Лучше для начала показать на примере: возьмем входные параметры из скрина сверху и посмотрим какой список подходящих артефактов программа нам предлагает.
Красный - сам артефакт
Зеленый - показывает, что у арта 2 баффа из вводимых пользователем
Желтый - 1 бафф из вводимых пользователем.
Таким образом на этом этапе подбираются подходящие арты и сортируются сначала по кол-ву желаемых баффов, а затем по их величине. Все это нужно, что передать на следующий этап - перебора.
4| Перебор комбинаций осуществляется следующим образом:
- сначала определяем на сколько слотов мы подбираем сборку. Я задал следующее условие: если защита конта ниже 85, то ищем сборку на n-1 артефактов, где n - количество слотов в контейнере. Такое решение принято в связи с тем, что в берлоге крайне тяжело подобрать адекватную сборку на 6 слотов без контрартефакта, а также в целях оптимизации, поскольку перебор на 6 слотов займет гораздо больше времени чем на 5.
- на вход возможных артефактов подается ранее отобранный и отсортированный список, поэтому сам процесс перебора начинается с наиболее подходящих под требования пользователя артефактов. В ходе этого подбора осуществляется выбор комбинации артефактов, а затем перебор их параметров. На скрине более наглядно.
Как можно заметить, то параметры подбираются таким образом: сначала повышается качество всех артов до 106%, затем все арты повышаются до +15 потенциала, а после идут на повышение качества вплоть до 150%. Хочу объяснить почему сделал так: на мой взгляд нет смысла перебирать артефакты ниже 100%, поскольку это действительно рофло сборки и они не смогут дать более менее внятных баффов (поправьте, если не прав). Повышение сначала до 106% обусловлено тем, что вряд ли кто-то захочет использовать артефакты данной редкости на меньшем качестве, чаще всего их просто перероливают. Последующее повышение потенциала обусловлено тем, что даже необычные сборки точат до +15 и это нормально. Все эти условия были взяты сугубо из моего опыта игры и действительно могут быть не оптимальны, но я посчитал, что так лучше.
Еще одно очень важное замечание: для оптимизации времени перебора использовал функцию combinations_with_replacement из библиотеки itertools, которая создает сочетания с учетом повторений объектов, но без повторения самих комбинаций, т.е. если была проверена комбинация 1-2-3, то комбинация 3-2-1 откинется. Вспоминаем формулу
. Понимаю, что это очевидно, потому что все понимают, что порядок артов в сборке не играет роли, но решил уточнить.
каждая такая комбинация проверяется на соответствие заданным параметрам в рамках погрешности -3%…+3%.., поскольку точное значение нам не нужно и получить его крайне малая вероятность.
Перебрав и проверив все комбинации составляется список валидных сборок, которые ВНИМАНИЕ сортируются по суммарному среднему качеству таким образом, что в начале оказываются сборки с наименьшим суммарным качеством. Именно это решение и определяет, что в начале списка будут самые бюджетные из возможных комбинаций, которые дают нужны баффы. Далее все комбинации ждет следующий этап - проверка на допустимость их дебаффов.
если дебаффа сборки с учетом защиты контейнера не превышают лимитов, то сборка заносится в список допустимых. Если нет, то для нее ищется контрартефакт и подбираются параметры по уже знакомой нам схеме - он должен погасить дебаффы так, чтобы войти в лимиты организма персонажа. Если контрартефакт найден, то он добавляется в контейнер и сборка считается допустимой, иначе - недопустима.
тут изображены итерации поиска контрартов для найденых комбинаций.если сборка не проходит по допустимым дебаффам и не имеет свободных слотов, то осуществляется перебор уже для N-1 артефактов так, чтобы свободное место для контрартефакта появилось.
по итогу прохождения всех
кругом адаитераций на выход подается список допустимым комбинаций с подобранными контрартами (или допустимым дебаффами), из которых выбирается 5 уникальных сборок (то есть комбинации артов не будут повторяться) с наименьшим суммарным качеством:
часть вывода
Вроде все рассказал. С радостью поясню какие-то моменты, учту предложения, поскольку действительно мог чего-то не учесть.
Прикольный концепт, но для того, чтобы стало работоспособным придется прикручивать невероятное количество вещей.
Цены скорее всего придется обновлять вручную
YTdestroyerYT чтобы стало работоспособным придется прикручивать невероятное количество вещей.
Можешь уточнить, пожалуйста, что имеешь в виду?
залупа только потому что убивает нахуй мозг юзера позволяя ему вообще не шевелить мозгами а тупо вбивать нужные статы в прогу чтоб она ему сама всё собрала
и так заебали аболтусы которые спрашивают че им в три зип берлогу4 собрать в альбатрос говночист
Gagutuun а как определяется минимально допустимое качество артефакта?
Gagutuun ебашь проверку цен аука, распред, точка , совместимость и будет збс
quantumWebX
1)Ну т.е как у тебя преобразование происходит % артефакта в фактическую характеристику?
2)Судя по подбору комбинаций у тебя меняются статы сразу всех артефактов в сборке одновременно, разве не может получиться так, что сборка пройдет при например 105 _ 104 _ 104 _ 104 _ 104 или такие условия не рассматриваются в угоду ускорения поиска?
3)Так же я возможно чего-то не понимаю, но не логичнее ли при подборе потенциала и качества было использовать бин. поиск?
quantumWebX 1) для этого отдельная функция написана, которая осуществляет подсчет характеристики, высчитывая их в зависимости от процента качества и потенциала, если я правильно понял вопрос)
2) Если посмотреть на этот скрин, то видно, что проценты качества у артов не всегда одинаковые
я уже видимо догадываюсь в чем дело и это просто кривой лог, а я этому не придал значения. Но сама идея действительно заключается в ускорении поиска.
3) На счёт использования бинарного поиска почему-то возникли небольшие сомнения, связанные в первую очередь с тем, что поиск может осуществляться единовременно только для одного артефакта, а не для всей сборки, а узнать оптимальные параметры рассматривая артефакты по очереди невозможно, поскольку нас изначально интересует вся совокупность.
- Изменено
А какой пул из артефактов у тебя используется? Самые используемые или вообще все с игры?
2)А да, увидел
3)Действительно. Я подумал, что в случае одинаковых статов это будет работать ок, но хотелось-то у каждого по отдельность подобрать, поэтому да
1)Почему спрашиваю, в АПИ СК там у каждого процента свое число передается и его перевод в проценты - не самое очевидное действие, я когда расписывал, мб пригодится для более точных подсчетов или если вдруг в апи полезешь
Единственное, учитывай квалити просто еще там
Chezviex около близко к правде
- Изменено
quantumWebX О, крайне благодарю, надо изучить))
Вообще вот мои изыскания, которые я описывал товарищу.
Если брать арт со 100%, то
повышение качества на 1% равно увелчению баффов на 1 процент
Повышение потенциала на 1 уровень равно увеличению баффов на 2 процента
Дебаф арта возрастает с 1 по 10 уровень в рамках одной редкости и на нулевом уровне следующей редкости приводится к стандартному значению и не зависит от потенциала и качества исследования. Базовое значение дебаффа зависит только от редкости арта. Допустим обычный Осколок имеет дабафф био -2.5 на обычной редкости и 100%, но на необычной редкости и последующих редкостях при качестве 1×0 дебафф уменьшится на 10% и будет составлять 2.25 и с каждым процентом потенциала в рамках этой редкости будет повышаться на 1% до 2.5
Увеличение редкости арта на одну ступень равно увлечению баффов на 10 процентов.
При понижении качества меньше 100% за каждый процент качества баффы уменьшаются на 0,5 процента.
Не забывай учитывать и вещественные числа в процентах для более точного результата.
309 Справедливости ради конечно нужно и я это понимаю, но даже учитывая как минимум десятые части у каждого артефакта это уже в 10 раз больше вариантов, а самое главное, что даже если программа выдаст человеку какую-то сборку с такими подробными процентами, то вот шанс, что он наролит ее именно такую крайне низкий, поэтому возникает вопрос о целесообразности, на мой взгляд
Всем снова добрый вечер. Делюсь кое-какими результатами:
- Доработал GUI (думаю для первой версии пойдет).
- Добавил новый параметр - мин. процент сборки. Он нужен, чтобы определить нижнюю границу подбираемой сборки, допустим если нужны арты не меньше синих, фиолетовых и т.д.
- Добавил лимит “холостых” итераций подбора. Под “холостыми” итерациями я подразумеваю итерации подбора между найденными подходящими сборками. Если их количество превысит определенное число, то поиск закончится и в массив подходящих сборок попадут уже найденные. (нужно это для того, чтобы не перебирать все комбинации из артов, имеющих нужные баффы, поскольку список подходящих артов изначально сортируется по их “полезности”, поэтому до конца списка чаще всего нет смысла идти)
- Добавил обработку знаков “>” и “*”, которые обозначают “не меньше чем…” и “любое” соответственно. Использование этих знаков позволит более гибко настроить нужные параметры.
Вроде все, может что-то упустил, но сам алгоритм принципиально не менял.
Хочу еще привести примеры того, что выдает это софтина.
На этом скрине подбираю сборку на скорость, восстановление выносливости и вес.
На этом скрине на жир.
Вот более подробные результаты
На скорость
Сборка 1: ———————————–
Количество слотов: 6
Защита: 60%Артефакты:
Янтарник (Качество: 108%, Потенциал: 15)
Спираль (Качество: 108%, Потенциал: 15)
Гелий (Качество: 108%, Потенциал: 15)
Гелий (Качество: 107%, Потенциал: 15)
Браслет (Качество: 107%, Потенциал: 15)
Атом (Качество: 107%, Потенциал: 13)Общие баффы:
ВосстановВыносливости: 30.04
ПереносимыйВес: 39.31
СкоростьПередвижения: 15.24
ЭффективЛечения: 8.7
Регенерация: 6.43
Выносливость: 22.53
СопротивлениеРадиации: 31.14
СопротивлениеБио: 31.14
СопротивлениеТемпературе: 31.14
СопротивлениеПси: 31.14
Радиация: -2.16
БиоЗаражение: -3.64
Пси-излучение: -6.61
Температура: -2.16Общие дебаффы:
Радиация: 0.02
Пси-излучение: 0.29
БиоЗаражение: 0.5Сборка 2: ——————————————-
Количество слотов: 6
Защита: 60%Артефакты:
Янтарник (Качество: 109%, Потенциал: 15)
Золотистый грави (Качество: 109%, Потенциал: 15)
Гелий (Качество: 109%, Потенциал: 15)
Гелий (Качество: 109%, Потенциал: 15)
Браслет (Качество: 109%, Потенциал: 15)
Атом (Качество: 107%, Потенциал: 15)Общие баффы:
ВосстановВыносливости: 30.47
ПереносимыйВес: 49.88
СкоростьПередвижения: 15.02
Выносливость: 41.38
Регенерация: 6.52
СопротивлениеРадиации: 32.13
СопротивлениеБио: 32.13
СопротивлениеТемпературе: 32.13
СопротивлениеПси: 32.13
Радиация: -3.76
БиоЗаражение: -3.76
Пси-излучение: -6.82
Температура: -2.23Общие дебаффы:
Пси-излучение: 0.25
БиоЗаражение: 0.48Сборка 3: —————————————-
Количество слотов: 6
Защита: 60%Артефакты:
Янтарник (Качество: 111%, Потенциал: 15)
Янтарник (Качество: 111%, Потенциал: 15)
Гелий (Качество: 111%, Потенциал: 15)
Браслет (Качество: 111%, Потенциал: 15)
Снежинка (Качество: 111%, Потенциал: 15)
Атом (Качество: 107%, Потенциал: 10)Общие баффы:
ВосстановВыносливости: 32.76
ПереносимыйВес: 53.68
СкоростьПередвижения: 15.01
Регенерация: 3.32
Выносливость: 38.38
СопротивлениеРадиации: 29.66
СопротивлениеБио: 29.66
СопротивлениеТемпературе: 29.66
СопротивлениеПси: 29.66
Радиация: -2.05
БиоЗаражение: -3.47
Пси-излучение: -6.29
Температура: -2.05Общие дебаффы:
Радиация: 0.09
Пси-излучение: 1.12
БиоЗаражение: 0.07Сборка 4: —————————————-
Количество слотов: 6
Защита: 60%Артефакты:
Янтарник (Качество: 106%, Потенциал: 15)
Остов (Качество: 106%, Потенциал: 15)
Браслет (Качество: 106%, Потенциал: 15)
Браслет (Качество: 106%, Потенциал: 15)
Браслет (Качество: 106%, Потенциал: 15)
Трансформатор (Качество: 142%, Потенциал: 15)Общие баффы:
ВосстановВыносливости: 31.56
ПереносимыйВес: 48.27
СкоростьПередвижения: 15.3
БиоЗаражение: -5.16
Радиация: -2.2
Выносливость: 66.97
СопротивлениеПси: 39.87
Пси-излучение: -13.11Общие дебаффы:
Пси-излучение: 1.49Сборка 5: ————————————
Количество слотов: 6
Защита: 60%Артефакты:
Янтарник (Качество: 114%, Потенциал: 15)
Янтарник (Качество: 113%, Потенциал: 15)
Гелий (Качество: 113%, Потенциал: 15)
Гелий (Качество: 113%, Потенциал: 15)
Браслет (Качество: 113%, Потенциал: 15)
Атом (Качество: 107%, Потенциал: 10)Общие баффы:
ВосстановВыносливости: 37.96
ПереносимыйВес: 54.89
СкоростьПередвижения: 15.0
Регенерация: 6.76
Выносливость: 23.8
СопротивлениеРадиации: 29.66
СопротивлениеБио: 29.66
СопротивлениеТемпературе: 29.66
СопротивлениеПси: 29.66
Радиация: -2.05
БиоЗаражение: -3.47
Пси-излучение: -6.29
Температура: -2.05Общие дебаффы:
Радиация: 0.11
Пси-излучение: 1.22
БиоЗаражение: 0.48
На жир
Сборка 1:
Количество слотов: 6
Защита: 60%Артефакты:
Мамины бусы (Качество: 123%, Потенциал: 15)
Осколок (Качество: 123%, Потенциал: 15)
Солнце (Качество: 123%, Потенциал: 15)
Призма (Качество: 123%, Потенциал: 15)
Иней (Качество: 122%, Потенциал: 15)
Атом (Качество: 100%, Потенциал: 0)Общие баффы:
Живучесть: 11.51
ЭффективЛечения: 60.34
Выносливость: 25.9
Регенерация: 3.68
РеакцияНаОжог: 5.44
Кровотечение: -1.44
ВосстановВыносливости: 10.87
Пулестойкость: 30.22
ЗащитаВзрыв: 17.27
ЗащитаРазрыв: 19.67
Температура: -2.55
СопротивлениеРадиации: 23.1
СопротивлениеБио: 23.1
СопротивлениеТемпературе: 23.1
СопротивлениеПси: 23.1
Радиация: -1.6
БиоЗаражение: -1.6
Пси-излучение: -2.6Общие дебаффы:
Радиация: 0.29
БиоЗаражение: 0.29
Пси-излучение: 0.82
Холод: 0.46Сборка 2: ———————————————
Количество слотов: 6
Защита: 60%Артефакты:
Мамины бусы (Качество: 123%, Потенциал: 15)
Осколок (Качество: 123%, Потенциал: 15)
Солнце (Качество: 123%, Потенциал: 15)
Каблук (Качество: 123%, Потенциал: 15)
Призма (Качество: 123%, Потенциал: 15)
Атом (Качество: 100%, Потенциал: 0)Общие баффы:
Живучесть: 11.51
ЭффективЛечения: 83.15
Выносливость: 25.9
Регенерация: 3.68
РеакцияНаОжог: 5.44
Кровотечение: -1.44
ВосстановВыносливости: 10.87
РеакцияНаРазрыв: 7.04
Температура: -4.16
Пулестойкость: 30.22
ЗащитаВзрыв: 17.27
СопротивлениеРадиации: 23.1
СопротивлениеБио: 23.1
СопротивлениеТемпературе: 23.1
СопротивлениеПси: 23.1
Радиация: -1.6
БиоЗаражение: -1.6
Пси-излучение: -2.6Общие дебаффы:
Радиация: 0.29
БиоЗаражение: 0.29
Пси-излучение: 0.82
Холод: 0.93Сборка 3: ———————————————-
Количество слотов: 6
Защита: 60%Артефакты:
Мамины бусы (Качество: 123%, Потенциал: 15)
Мамины бусы (Качество: 123%, Потенциал: 15)
Осколок (Качество: 123%, Потенциал: 15)
Призма (Качество: 123%, Потенциал: 15)
Куриный бог (Качество: 122%, Потенциал: 15)
Атом (Качество: 107%, Потенциал: 15)Общие баффы:
Живучесть: 10.55
ЭффективЛечения: 77.39
Выносливость: 51.81
Регенерация: 3.68
Пулестойкость: 30.22
ЗащитаВзрыв: 17.27
ВосстановВыносливости: 10.36
РеакцияНаЭлек: 7.45
РеакцияНаОжог: 7.45
РеакцияНаХим: 7.45
РеакцияНаРазрыв: 3.49
Температура: -3.97
СопротивлениеРадиации: 32.13
СопротивлениеБио: 32.13
СопротивлениеТемпературе: 32.13
СопротивлениеПси: 32.13
Радиация: -3.76
БиоЗаражение: -3.76
Пси-излучение: -6.82Общие дебаффы:
Радиация: 0.36
Холод: 0.46Сборка 4: —————————————————
Количество слотов: 6
Защита: 60%Артефакты:
Мамины бусы (Качество: 123%, Потенциал: 15)
Мамины бусы (Качество: 123%, Потенциал: 15)
Осколок (Качество: 123%, Потенциал: 15)
Призма (Качество: 123%, Потенциал: 15)
Вихрь (Качество: 122%, Потенциал: 15)
Атом (Качество: 107%, Потенциал: 15)Общие баффы:
Живучесть: 10.55
ЭффективЛечения: 77.39
Выносливость: 51.81
Регенерация: 3.68
Пулестойкость: 30.22
ЗащитаВзрыв: 17.27
ВосстановВыносливости: 5.76
СкоростьПередвижения: 4.76
РеакцияНаОжог: 5.39
Температура: -4.76
СопротивлениеРадиации: 32.13
СопротивлениеБио: 32.13
СопротивлениеТемпературе: 32.13
СопротивлениеПси: 32.13
Радиация: -3.76
БиоЗаражение: -3.76
Пси-излучение: -6.82Общие дебаффы:
Радиация: 0.36
Холод: 0.46Сборка 5: ——————————————–
Количество слотов: 6
Защита: 60%Артефакты:
Мамины бусы (Качество: 123%, Потенциал: 15)
Мамины бусы (Качество: 123%, Потенциал: 15)
Солнце (Качество: 123%, Потенциал: 15)
Призма (Качество: 123%, Потенциал: 15)
Гелий (Качество: 122%, Потенциал: 15)
Атом (Качество: 107%, Потенциал: 15)Общие баффы:
Живучесть: 10.55
ЭффективЛечения: 58.84
Выносливость: 51.81
РеакцияНаОжог: 5.44
Кровотечение: -1.44
ВосстановВыносливости: 20.71
Пулестойкость: 30.22
ЗащитаВзрыв: 17.27
СкоростьПередвижения: 3.17
Регенерация: 3.65
СопротивлениеРадиации: 32.13
СопротивлениеБио: 32.13
СопротивлениеТемпературе: 32.13
СопротивлениеПси: 32.13
Радиация: -3.76
БиоЗаражение: -3.76
Пси-излучение: -6.82
Температура: -2.23Общие дебаффы:
Радиация: 0.36
Температура: 0.04
Нашел даже себе одну сборочку, почти собрал, вполне доволен)
Если кому-то интересно протестить и дать фидбэк, буду рад
Доброе предновогоднее утро (день) всем!
Давно в этой ветке не было сообщений, но все же некоторая работа над софтиной велась, поэтому решил поделиться последней ее версией и дать возможность попользоваться тем, кто захочет, заодно, в идеале, собрать некоторый фидбэк.
За это время было сделано следующее:
- Добавлено ключевое слово “max” для желаемого баффа, которое позволяет максимизировать данный параметр в сборке
- Добавлена возможность задавать не только нижнюю границу качества сборки, но также и верхнюю, чтобы артефакты в сборке не превышали и не были меньше выбранных процентов качества
- Добавлена возможность задавать дополнительные лимиты дебаффов персонажа, будь то доп.характеристики контейнера или какие-либо расходники типо водки (если хочется попробовать собрать сборку под водкой или чем-либо еще)
- Добавлена возможность использовать собственные артефакты, которые будут учитываться при подборе сборок. Для этого нужно выбрать свой артефакт, задать его качество и потенциал, выбрать доп.характеристики. Также указать является ли артефакт контрартефактом (в случае Атома, Трансформатора и т.д.), чтобы он корректно учитывался. Пользовательские артефакты помещаются в создаваемый файл “user_artifacts.json” и подгружаются автоматически при открытии программы.
- Добавлена доп стадия - подбор наиболее близкой сборки по параметрам, заданным пользователем, в том случае, если не было найдено ни одной сборки, которая строго удовлетворяла бы заданным параметрам.
- Пересмотрел этап подбора контрартефакта, постарался добиться, чтобы этот этап был как можно быстрее
Таким образом сейчас выглядит GUI
Алгоритм использования:
- Открыть программу
- Выбрать файл, содержащий артефакты (arifacts.json). В нем старые названия артов, не стал править
- Выбрать желаемые баффы. Для более корректной работы ключевое слово “max” стоит применять только к одному, максимум двум параметрам. Также есть ключевые слова “*” - данный параметр должен присутствовать в сборке и “> [число]” - данный параметр не может быть меньше заданного числа
- Задать параметры контейнера и границы качества сборки
- Опционально - добавить свои артефакты
- Нажать кнопку старт и подождать.
Ну и собственно сама ссылка для скачивания. Залил на свой yandex.disk
https://disk.yandex.ru/d/haa2LytdC5NozA
На данный момент залил в формате скомпилированного .exe поскольку, уж если честно, исходным кодом пока не хочется делиться он ужасен, но естественно, после доработок хотел бы это сделать.
Прикрепляю ссылку на VirusTotal для тех, кто видит во всем этом подвох: https://www.virustotal.com/gui/file/9f86d13a0b7deb2a0887c0f6d7797ffa158543c5deb1ff36ad751adfe4b1808f/detection
P.S. У меня нет цели поделиться вредоносным ПО или провернуть подобную авантюру. Мне действительно хочется получить обратную связь от комьюнити, поэтому лучшим вариантом посчитал дать возможность попользоваться прогой лично каждому. Надеюсь, что ни у кого не возникнет мысли, что автор - скамер.
Всем хороших праздников и с наступающим, дорогие!
Gagutuun исходным кодом пока не хочется делиться он ужасен,
Сомнительная причина.
Могу кстати его вытащить и за тебя выложить, хо-хо.
Я конечно пока не чекал, что ты там навалил, но как мне кажется лучше обучить нейронку или по типу фич для глубокого обучения из разных библеотек, а не писать алгоритм по решению задачи трёх тел самостоятельно, и тем более для таких задач уже есть алгоритмы.
Я вообще боюсь представить, как это можно перебирать без чётких формул и ебейших алгоритмов, т.к доп элемент это +1 к n(O).
StepaPro2009 Ну потести, потом выразишь мнение)