Pull to refresh

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

Reading time3 min
Views8K
Я хочу продолжить традицию, начатую год назад вот этой статьей (кстати, мне очень приятно, что ее еще помнят), и рассказать о еще нескольких способах сделать свое поздравление необычным и профессиональным. На этот раз я вывожу просто «congrats» — условно-нетрудоемкие способы закончились еще в том году.

Способ 1. Магический


В этой номинации традиционно выступают профессиональные фокусы на совершенно нормальных языках, которыми мы пользуемся каждый день, в данном случае — С++ (можно и просто C).

#include <stdio.h>
int main()
{   int A = 10, B = A^1937006968, C = B^337251857;
    printf((char *)&C);
} 


Disclaimer. Этот фокус использует низкоуровневые манипуляции с памятью; результаты могут варьироваться в зависимости от архитектуры компьютера и используемого компилятора.

Подробно этот способ я разбирала в статье Числовые подписи; он основан на создании чисел, содержащих наборы байтов нужной строки, и выводе их как строк. Для лучшей обфускации нужные числа можно вычислять как результат операций над другими числами — в таком случае никакие числа не будут выглядеть осмысленными строками в других режимах просмотра.

Способ 2. Шпионский


В прошлом году в этой номинации был представлен код на Whitespace. Очевидный выбор, когда нужно написать что-то невидимое, но не единственный. В этом году для получения почти такого же эффекта я использую Ruby.

print "
                                                                                                  
                                                                                                              
                                                                                                             
                                                                                                      
                                                                                                                 
                                                                                                
                                                                                                                   
                                                                                                                  
            
          
".map{|z| z.size.chr}


Конечно, не так впечатляюще; мешают команды, обрамляющие это буйство пробелов. Зато программа пишется не в пример проще: каждая строка в кавычках преобразуется в один символ с ASCII-кодом, равным длине строки. Содержимое строк совершенно не важно: можно, например, вписать туда явный текст или ASCII-арт, и так далее:

print "
                                                                                                  
                                                                                                              
 ##  ##   ####   #####   #####    ####   ##  ##   ####   #####   #####                                       
 ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##                               
 ######  ######  #####   #####   ######  ######  ######  #####   #####                                           
 ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##                         
 ##  ##  ##  ##  #####   ##  ##  ##  ##  ##  ##  ##  ##  #####   ##  ##                                            
                                                                                                                  
            
          
".map{|z| z.size.chr}


Способ 3. Драматический


Это не столько самостоятельный способ, сколько поправка к способу, изложенному в прошлом году. Мне все-таки удалось запустить интерпретатор Shakespeare, и к моему стыду, поздравление в нем не запустилось. Прежде всего, язык распознает только известных автору интерпретатора персонажей Шекспира; ни Ариэль, ни Просперо, ни Калибан в их число не входят. То же самое относится к лексике: никаких морских свинок и пьяных болванов, только одобренный автором словарный запас (довольно скудный). Наконец, прилагательные должны соответствовать существительному по эмоциональной окраске. Соблюдение всех этих правил накладывает строгие ограничения на текст и лишает его большей части его очарования.

Способ 4. Классический


В прошлом году я совершенно незаслуженно очернила замечательный язык Befunge — на нем великолепно пишутся замаскированные поздравления, стоит только проявить немного изобретательности. Например, вот так:

v  >  AA  vBBB  >RRR   AA  v  >  AA  vBBB  >:#,   _ @ I
"  " A  A "   B "   R A  A "  " A  A "   B "   R  I I I
SHHT AAAA ABBB  RRRR  AAAA GHHN AAAA OBBB  CRRR   I I I 
"  " A  A "   B " R   A  A "  " A  A "   B " R   
>  ^ A  A >BBB  ^  RR A  A >  ^ A  A >BBB  ^  RR  o o o


Если присмотреться к надписи, видно, что символы v, > и ^ направляют указатель инструкций вдоль некоторых линий букв. Между поворотами курсора встроены команды добавления символов на стек в виде «символ» — в Befunge двойная кавычка переключает режим с интерпретации команд на ввод символов на стек. «Лишние» символы, попадающиеся указателю инструкций по пути, просто игнорируются. Заканчивается программа в последнем символе R и двух первых восклицательных знаках циклом, который выводит символы со стека (в порядке, обратном их попаданию на стек).

Способ 5. Декоративный


В этом разделе я предлагаю программу на Piet — этот язык оставляет больше простора для креативности, чем прошлогодний Brainloller.

image

ASCII-коды букв закодированы в размерах блоков, а цвета задают последовательность действий «добавить размер прошлого блока в стек — вывести символ на вершине стека — повторить».

И наконец,

Способ 6. Бонусный


Я очень люблю разные конкурсы и искренне верю, что лучшее поздравление с днем программиста — это профессиональный конкурс. Levsha и его команда верят в то же самое, и мы объединили усилия для создания такого конкурса. К сожалению, мы не успели собственно к празднику, но в октябре мы обязательно его запустим! А пока что можно зарегистрироваться на бета-тест на сайте будущего конкурса coder2011.ru и проголосовать за свою любимую тему здесь.
Tags:
Hubs:
Total votes 86: ↑78 and ↓8+70
Comments16

Articles