- PVSM.RU - https://www.pvsm.ru -

Результаты конкурса

Результаты конкурсаИтак, вот они результаты нашего последнего конкурса [1]. Спасибо всем, кто принял участие.
В принципе, задачка была совсем не сложной (она такой и планировалась) и целых 56 человек с ней справились. Вот имена людей, которые сделали это первыми:

Под катом можно найти решение задачи и ссылки по теме.

Итак, задача в картинке [7]. Скачиваем картинку и рассматриваем. Зумим. К стати, говоря, имеет значение, чем именно зумить. Например, Paint зумит эту картинку верно, а вот Irfan View и стандартный вьювер из пакета Microsoft Office начинают «фантазировать» и их «виденье» данной картинки могло очень затруднить определение того, что, собственно говоря, мы тут видим.

Результаты конкурса

Присмотревшись к увеличенному в Paint варианту мы видим какие-то смутно знакомые фигурки из точек. Что же это, где же я это видел? Ну конечно же! На картинке выше — классический «глайдер» (или «планер») из игры «Жизнь» [8] — не менее классического примера клеточного автомата.

Результаты конкурса

Еще одним намеком на игру «Жизнь» было размещение топика в хабе «Game Development» — ну не из-за типа призов же он там находился. Соответственно, вся картинка в целом, наверное, представляет собой состояние популяции в какой-то момент времени. Самым логичным в этом месте рассуждений было бы перенести её с картинки в какую-нибудь программу, позволяющую запустить процесс генерации следующих поколений и понаблюдать за происходящим. Истинные джедаи в этом месте могли написать собственный парсер png-файлов и свою реализацию «Жизни». Чуть более практичные люди — преобразовали бы png в bmp (его уж всяко легче парсить), прочитали его и получили бы массив, который можно скормить в какую-нибудь из существующих реализаций игры. А совсем уж лентяи (в хорошем понимании этого слова) могли предположить, что, наверное, уже есть реализации, способные открывать графические файлы с популяциями и запускать их. И такие программы действительно есть. Одна из лучших — Golly [9]. Она спокойно открывает предложенную картинку и вот что мы видим при запуске генерации следующих поколений:

И вот он текст — "HI TO @INFOPULSE_UKR [10] FROM #HABR!"

Теперь пару пояснений к происходящему на экране. Мы уже знаем, что такое «глайдер» (см. выше). Именно из глайдеров и состоит текст, перемещение которого мы видим на экране.

Однако как же получился текст? Опять таки, давненько было придумано «глайдерное ружье» — фигура, способная генерировать бесконечное количество глайдеров, выстреливая их в пространство. Первые ружья просто генерировали поток глайдеров.

Результаты конкурса

То, что мы видим в данном случае — это модификация стандартного ружья, именуемая «Golly-gun» (по крайней мере мне данная фигура впервые встретилась под таким названием). Она позволяет генерировать поток глайдеров с пропусками, которые определяются количеством и положением глайдеров в «магазине» — начальном состоянии ружья. Фактически, мы имеем бинарный код. На сайте ранее упоминаемой программы Golly в шапке можно увидеть пример такого ружья.

Результаты конкурса

Но как же написать произвольный текст? Вручную создавать такое ружье весьма долго. К счастью, это и не нужно. Во-первых, существует готовый шаблон [11] ружья с «полным магазином». Вы можете взять его и просто удалить лишние глайдеры, получив пропуски в генерируемых потоках. Во-вторых, можно не делать и этого — существует Ruby-скрипт [12], позволяющий сгенерировать ружье для определенного текста. Именно он и был использован для подготовки данной задачи. Всё просто, правда?

Поздравляю победителей — для согласования получения призов свяжитесь со мной (через личку Хабра или почту tangrofromhabr\gmail.com (\ = @) ).

Спасибо всем заинтересовавшимся — надеюсь, задача вам понравилась.

Автор: tangro


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/game-development/5267

Ссылки в тексте:

[1] последнего конкурса: http://habrahabr.ru/company/infopulse/blog/141639/

[2] @sefus_ru: https://twitter.com/#!/sefus_ru

[3] sefus: http://habrahabr.ru/users/sefus/

[4] @AbsolutePlus: https://twitter.com/#!/AbsolutePlus

[5] MrLoki: http://habrahabr.ru/users/mrloki/

[6] @mp_Inside: https://twitter.com/#!/mp_Inside

[7] картинке: http://img13.imageshost.ru/img/2012/04/07/image_4f7f570600687.png

[8] «Жизнь»: http://ru.wikipedia.org/wiki/%D0%96%D0%B8%D0%B7%D0%BD%D1%8C_%28%D0%B8%D0%B3%D1%80%D0%B0%29

[9] Golly: http://golly.sourceforge.net/

[10] @INFOPULSE_UKR: https://twitter.com/#!/Infopulse_ukr

[11] готовый шаблон: https://sites.google.com/site/binarydigits10/articles/conwaysgameoflife

[12] Ruby-скрипт: http://tlrobinson.net/blog/2009/02/game-of-life-generator/