Pull to refresh
0
Инфопульс Украина
Creating Value, Delivering Excellence

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

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



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


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



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



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



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

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

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



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



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

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

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

Articles

Change theme settings

Information

Website
www.infopulse.com
Registered
Founded
1992
Employees
1,001–5,000 employees
Location
Украина