(автор статьи не несет ответственности ни за что, что в ней написано и не призывает ни к чему, читайте эту статью на свой страх и риск!!!)
Теория
Многие жители славной базы ФСБ слышали про игру "Пузыри вконтакте" (возможно даже играли в нее четно пытаясь занять 1 место в рейтинге). Суть её в том чтобы набрать как можно больше очков лопая шарики разноцветные шарики до тех пор, пока их не останется на поле вовсе, или хотя бы не будет возможностей дальнейших "лопаней". Шарики лопать можно лишь в связке не менее 2 штук одного цвета, причем чем больше цепочка, тем больше дают очков! Смотрите ниже количество очков в зависимости от количества шариков.
- 2 шарика - 10 очков
- 3 шарика - 30 очков
- 4 шарика - 60 очков
- 5 шарика - 100 очков
- 6 шарика - 150 очков
Убивалка времени
О боже! Смотрите! Это чудо, проступает лик формулы! (КОЛИЧЕСТВО*5)*(КОЛИЧЕСТВО-1)
Легко подсчитать что для того чтобы набрать максимальное количество очков нужно что сделать? Кто сказал взломать? (хотя мысль правильная) Нужно выстроить максимально длинную цепочку из шариков одного цвета. Давайте немного по "математим". Эх люблю знаете, заперевшись в комнате, пока никто не видит часами "математить" что нибудь! Дак вот, размер игрового поля 11x19 шариков, что в совокупности получается 209! Не мало, правда? Забыл упомянуть что в игре 5 разновидностей шариков. Вам для того чтобы набрать хотя бы 20000 очков следует составить цепочку минимум из 57 шариков (15960 очков) , при условии, что на остальных цветах вы наберете недостающие 4040 очков. Кажется что это пустяк, ведь у нас вон как мнооого шариков, а не спешите. У нас ведь 5 разновидностей шариков, 209 их в сумме, еще немного математим и у нас выходит в среднем 41.8 шариков каждого цвета. Но компутер не жадный, он генерирует их в разных количествах, но процент того что у нас выпадут хотя бы 57 шариков одного цвета, очень невысок.(это мы еще не берем во внимание то что вы их можете не выстроить в ровные соприкасающиеся колонны). Кому хочется тратить время на "воду" (это я придумал такой сленг для шариков, чтобы круче звучало "вода"-без перспективный раунд), хочется же набрать как можно больше очков, и как можно быстрее, а сидеть считать вручную все эти шарики и прикидывать свои шансы как то не Айс. И тут появляюсь Я, как суппер герой, весь в плаще и маске, я сохраню ваше время!
Такие нынче супер герои
От теории к практике!
Что нам понадобиться:
- Голова!!!
- Матлаб (или умение на чем либо кодить)
- HTTPAnalyzer (или другой снифер трафика)
Для начала пишем маленькую программку на чем угодно, я выбрал матлаб ибо проще и быстрее писать! Суть программки проста, получает сплошную строку, парсит ее и выводит количество встречаемых в ней символов (а точнее циферок 1,2,3,4,5 каждая из которых отвечает за цвет шарика). У меня получилась что то вроде этого:
i=1;
[j,i]=size(s);
while (i)
switch s(i)
case '1'
kras=kras+1;
case '2'
siniy=siniy+1;
case '3'
zholt=zholt+1;
case '4'
fiol=fiol+1;
case '5'
zelen=zelen+1;
end
i=i-1;
end
Следующим этапом нам надо поймать ответ от сервера с расположением шариков. Запускаем программку HTTPAnalyzer (или любую другую) и смотрим весь получаемый трафик (я указал фильтры чтобы мне выдавался только тот трафик который мне нужен), в поле response-content мы и получаем нашу заветную строку. Сразу говорю, что бессмысленно просто сидеть и ждать пока строка не упадет, она сама и не прибежит пока вы не начнете новый раунд, ну или пока не обновите страничку, как это делаю я =)
Так мы ловим наши строчки...
Остается подставить строчку в нашу программку и смотреть стоит ли продолжать играть этот раунд, а если и стоит то из каких шаров строить цепочку, а какими жертвовать в первую очередь! =) На каждый раунд у меня уходило секунд 20 но после их я мог с уверенностью сказать сколько максимум я могу поиметь очков с этих раундов.
Можно конечно еще по математить и вывести алгоритм оптимальной игры. Или же напиать программку для перебора всех вариантов. Но это уже совсем другая статья...
Всех прошу в комментарии, так сказать Велкоме! А я пойду спать!!! =)
Это не для средних умов. К сожалению.
ОтветитьУдалитьМаринка.