Pull to refresh

Необычные поздравления с днем программиста

Abnormal programming *
Статья должна была быть приурочена к дню программиста, но задержалась из-за моего стремления сделать ее как можно более содержательной. В конце концов, это не последний профессиональный праздник в нашей жизни ;-)


— А ведь и правда день программиста, — спохватилась я за два часа до его наступления (в основном благодаря этому топику). Потом представила себе завтрашние поздравления — «С праздничком», «С днем программиста», «Поздравляю, коллеги»… Скучно. И душа запросила чего-нибудь эдакого, профессионального, с огоньком!

В этой статье я хочу предложить несколько способов представить любое банальное поздравление в необычном виде в полном соответствии с нашей профессией и названием блога. Большинство языков работают только с латиницей, так что будем либо желать «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. Декоративный



Наконец, существует масса способов оформить поздравление в виде картинки — вот лишь два из них.

qrcode
Happy Programmers' Day в виде QR-кода

Brainloller
Happy Programmers' Day на Brainloller

А какие интересные и необычные способы записи короткого текста знаете вы?
Tags:
Hubs:
Total votes 61: ↑53 and ↓8 +45
Views 49K
Comments Comments 18