Необычные поздравления с днем программиста
Статья должна была быть приурочена к дню программиста, но задержалась из-за моего стремления сделать ее как можно более содержательной. В конце концов, это не последний профессиональный праздник в нашей жизни ;-)
— А ведь и правда день программиста, — спохватилась я за два часа до его наступления (в основном благодаря этому топику). Потом представила себе завтрашние поздравления — «С праздничком», «С днем программиста», «Поздравляю, коллеги»… Скучно. И душа запросила чего-нибудь эдакого, профессионального, с огоньком!
В этой статье я хочу предложить несколько способов представить любое банальное поздравление в необычном виде в полном соответствии с нашей профессией и названием блога. Большинство языков работают только с латиницей, так что будем либо желать «Happy Programmers' Day!», либо (для самых неудобоваримых языков) просто говорить «congrats».
Способ 1. Классический
Когда речь заходит о ненормальном программировании, первое, что приходит в голову — бессмертный Brainf*ck. Язык удобен сразу по нескольким причинам:
— сравнительная известность среди прочих эзотерических языков;
— изобилие интерпретаторов языка, включая онлайновые — многие из эзотерических языков имеют один-два интерпретатора, требующих отдельных усилий по их установке, компиляции и запуску;
— простота и многовариантность кодирования текстовых сообщений;
— игнорирование любых символов исходного кода программы, не являющихся командами, что позволяет форматировать код как угодно, маскировать его под ASCII-art или рамочки вокруг другого текста и т.д.
Итак, самый простой «Happy Programmers' Day!» (без циклов) на Brainf*ck выглядит вот так:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++.
+++++++++++++++..
+++++++++.
>++++++++++++++++++++++++++++++++.
<-----------------------------------------.
++++++++++++++++++++++++++++++++++.
---.
--------.
+++++++++++.
-----------------.
++++++++++++..
--------.
+++++++++++++.
+.
>>+++++++++++++++++++++++++++++++++++++++.
<.
<-----------------------------------------------.
+++++++++++++++++++++++++++++.
++++++++++++++++++++++++.
>>------.
В таком виде это неинтересно, так что можно поиграться с построением из этого кода ASCII-арта. Например, вот так:
+++ +++ +++ +++++++++ +++++++++ +++ +++ +++ +++ +++++++++ +++++++++
+++ +++ +++ +++ +++ .++ +++ +++ +++ +++ +++ +++ +++ ++. +++ +++ +++ +++
+++ ..+ +++ +++ ++. >++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ .<- ---
---------- ----------- --------- -------.+ +++++++++++ ++++++++++ +++++++++++ +.---.--- -----.+++
++++++++.- ----------- -----.+++ +++++++++ ..--------. ++++++++++ +++.+.>>+++ +++++++++ +++++++++
+++ +++ +++ +++ +++ +++ .<. <-- --- --- --- --- --- --- --- --- --- ---
--- --- --- --- --- .++ +++ +++ +++ +++ +++ +++ +++ +++ +++ .++ +++ +++
+++ +++ +++ +++ ++++.>>-- --- -.- +++ +++ +++ +++ +++ +++ +++++++++ +++ +++
Кстати, на менее известном, но популярном среди знатоков и изобретателей эзотерических языков Befunge вывод текстового сообщения может делаться многими способами, но самый простой из них слишком очевиден, чтобы быть занятным: символы сообщения указаны в явном виде, просто в обратном порядке, и окружены служебными символами.
0"!yaD 'sremmargorP yppaH">,:#<_@
Способ 2. Драматический
Популярный в качестве поздравлялок художественные произведения разного формата: стихи, сказки, да на что времени и фантазии хватит :-)
Лучше всего для реализации этого способа подходит язык программирования Shakespeare, в котором программа представлена в виде пьесы, переменные — героев Шекспира, числовые константы — художественных описаний, а программист… ну, драматургом он может и не быть, но литературный английский знать обязан! Потому что чем обширнее и цветистее набор прилагательных при существительном, тем большее число оно обозначает, а действия оформляются как монологи героев-переменных. Вывод сообщения «congrats» на этом языке выглядит примерно так:
The Shakespeare-Style Congratulations
Ariel, the genie to store values of o,n,r,t,s
Kaliban, the ugly creature to store values of c, g, a
Prospero, the hero to operate on them
Act I.
Scene I.
[Enter Prospero and Ariel]
Prospero:
You peaceful mighty proud handsome white-winged overwieght overpraised overnamed angel!
You are as good as the difference between you and an ill naughty crying ungerage child!
[Exit Ariel]
[Enter Kaliban]
Prospero:
You are as ugly as the difference between Ariel and sum of his white fluffy wings and his bored smile!
Speak your mind!
[Exit Kaliban]
[Enter Ariel]
Prospero:
Speak your mind.
You are as worried as the sum of you and a spider!
Speak your mind!
[Exit Ariel]
[Enter Kaliban]
Prospero:
You are as disgusting as the sum of you and a drunken vomiting idiot.
Speak your mind!
[Exit Kaliban]
[Enter Ariel]
Prospero:
You as as sweet as the sum of you and reddest royal roses.
Speak your mind.
[Exit Ariel]
[Enter Kaliban]
Prospero:
You are as silent as the difference between you and the sum of your dirty feet and your unkept greasy hair.
Speak your mind!
[Exit Kaliban]
[Enter Ariel]
Prospero:
You are as prominent as the sum of you and a sparkling diamond.
Speak your mind.
You are as lovely as the sum of you and a guinnea-pig.
Speak your mind!
[Exit Ariel]
Prospero:
What the hell is wrong about these guys walking here and there in silence?
[Exit Prospero]
Способ 3. Магический
Если вы хотите удивить коллегу, покажите ему профессиональный фокус, например, такой. Запустите shell (например, Bash) и наберите следующую команду:
echo 1774767685848640863781394195195183398747095833456108183818P | dc
Неожиданный результат, правда? Это так называемая dc-магия, несложная, но тем не менее не очевидная. dc — это Desktop Calculator, инструмент, позволяющий работать с числами произвольной точности. В данном случае команда P (последний символ перед |) выводит на печать предшествующее ему число, но (внимание, сам фокус) как строку. Для этого число переводится в шестнадцатеричный формат:
0x48617070792050726F6772616D6D6572732720446179210A
разбивается на пары цифр, и вместо каждой пары цифр на печать выводится символ с соответствующим ASCII-кодом.
Способ 4. Шпионский
Для людей, у которых нет принтера, тоже есть свой язык программирования — Whitespace. Примечателен тем, что пустой листок бумаги, полученный от программиста на Whitespace, может означать все что угодно — от признания в любви до вызова на дуэль. На этом чудном языке смысл имеют не видимые символы, а промежутки между ними — невидимые символы пробел, табуляция и перенос строки. Таким образом, программа без комментариев выглядит как пустой документ, а на печати — как чистый лист.
Ниже приведена программа вывода «congrats» на печать, в которой (во избежание проблем с парсером) пробелы заменены на S, а табуляции — на T. Фигурные скобки означают начало и конец числа (для читабельности), последняя точка указывает на три перевода строки в конце кода.
SS{STTSSSTT}
T
SSSS{STTSTTTT}
T
SSSS{STTSTTTS}
T
SSSS{STTSSTTT}
T
SSSS{STTTSSTS}
T
SSSS{STTSSSST}
T
SSSS{STTTSTSS}
T
SSSS{STTTSSTT}
T
SSSS{STSTS}
T
SS
.
Способ 5. Декоративный
Наконец, существует масса способов оформить поздравление в виде картинки — вот лишь два из них.
Happy Programmers' Day в виде QR-кода
Happy Programmers' Day на Brainloller
А какие интересные и необычные способы записи короткого текста знаете вы?
|