Pull to refresh

Happy Nerd New Year!

Abnormal programming *
Сегодня 11 ноября 2011 года; в формате DD.MM.YY получается исключительно красивая бинарная запись (последняя, кстати, за следующие 88 лет — до 1 января 2100). Это замечательный повод объявить этот день Nerd New Year, с каковым я вас и поздравляю.


Хотя стоп, поздравление с таким днем в plaintext — это нонсенс. Я уже писала о необычных поздравлениях с днем программиста (2010, 2011), но здесь нужно что-то особенное… Лично у меня термин nerd ассоциируется с чем-нибудь бинарным; как насчет поздравлений, основанных на 0 и 1?

Spoon


Начнем с классики. Brainfuck — язык на все случаи жизни; и бинарный диалект у него тоже есть. В Spoon команды BF заменяются на последовательности нулей и единиц, составляющие префиксно-свободный код, так что их даже не нужно разделять пробелами. Следующий код на BF, выводящий «Happy Nerd New Year!»,

++++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>+++++++++++
+>+++++++++++++<<<<<<<<<<<<<-]>>>>>>>>--------.>>---.>>--------..>---------.<<<<<<<<<--------.>>>>++
++++.>>>---------.>++.<-.<<<<<<<.>>>>.>>>+.>+++++.<<<<<<<<.>>>>>-.>>.<.>>-----.<<<<<<<<+.


эквивалентен коду на Spoon

1111111111001000101010110101110101111010111110101111110101111111010111111110101111111110101111111111
0101111111111101011111111111101011111111111110110110110110110110110110110110110110110000011010010010
0100100100100100000000000000000000000000010100100100000000000010100100100000000000000000000000000010
1000101001000000000000000000000000000000101001101101101101101101101101100000000000000000000000000101
0010010010010111111001010010010010000000000000000000000000000001010010110010100110000010100110110110
1101101101100101001001001001000101001001001010010100101111100101001101101101101101101101100101001001
00100100100000010100100100010100110010100100100000000000000000010100110110110110110110110111001010


но, согласитесь, последний выглядит гораздо бинарнее.


Whirl


Автор языка описывает его как «головокружительный», и я не могу не согласиться с этой характеристикой. Программы на этом языке строго бинарны, но, в отличие от Spoon, нулями и единицами кодируются не сами команды, а система переключения между ними. В Whirl 24 команды, которые расположены на двух кольцах — математическом и операционном. Нули и единицы управляют вращением колец (т.е. сменой текущей команды на кольце), переключением между кольцами и активацией выполнения текущей команды. Механическая реализация интерпретатора выглядела бы примерно так:



Все это довольно запутанно (так, например, ноль либо переключает текущее кольцо, либо меняет его направление вращения в зависимости от предыдущего символа), но, как ни странно, язык сравнительно популярен и развивается не только его автором. Так, некий Aviad Ben Dov написал генератор кода на Whirl, которым я и воспользовалась для создания программы, выводящей «congrats»:

0011111100110011110011111001111000001110011111000111001111000110011100111111000111110001111000111110
0111100000111001111100011100111100011001110001001111100110000000000000000000000000000000111110001001
1111001100011111000110011111001111001100111100111110011110000011100111110001110011110001100111000100
1111100110001111100000010001111100011000001111001100111100111110011110000011100111110001110011110001
1001110001001111100110000000000000000000000000000000111110000000111001111100011000111110000000000000
0000000000000000011110011111001111000010001111100111001110001100011100011000111000110001110011111100
0111110001111000111110011110000011000111000001110001110011111000000000000000000000000000001111100011
1100011111000111100000100010011001111001111110011111000111100011111001111000001110011111000111001111
0001100111000100111110011000000011111000001111100010001001100111100111111001111100011110001111100111
1000001110011111000111001111000110011100010011111001100011111000001111100010001001100111100111111001
1111000111100011111001111000001110011111000111001111000110011100010011111001100000000000000011111000
1111000111110001111000001000100110011110011111100111110001111000111110011110000011100111110001110011
1100011001110001001111100110000000000000000000111110000011111000100010011001111001111110011111000111
1000111110011110000011100111110001110011110001100111000100111110011000000000000000000000000000000000
0000001111100011110001111100011110000010001001100111100111111001111100011110001111100111100000111001
1111000111001111000110011100010011111001100000000000000000000000000011111000001111100010001001100111
1001111110011111000111100011111001111000001110011111000111001111000110011100010011111001100000000000
0000000000001111100000111110001000100


01_


Этот язык не вполне бинарный, он требует использования и других символов, но нули и единицы все еще несут основную смысловую нагрузку, а для вывода текстового сообщения их более чем достаточно.

h=01001000011000010111000001110000011110010010000001001110011001010111001001100100001000000100111001
10010101110111001000000101100101100101011000010111001000001010.


Правда, текстовое сообщение на этом языке довольно просто раскодировать: последовательность 0 и 1 после знака равенства — это всего лишь бинарные коды символов сообщения, записанные подряд в том же порядке, что в сообщении: 01001000 — 'H', 01100001 — 'a' и т.д. Никаких инверсий битов, никаких обратных порядков символов — даже скучно, но для коллекции пусть будет.

В этот список можно включить и BIT, еще один шедевр от Дэвида Морган-Мара. Этот язык тоже основан на бинарной записи программ, хотя вместо 0 и 1 используются более читабельные ZERO и ONE. Запись и чтение тоже оперируют отдельными битами, поэтому программа, выводящая текстовое сообщение, выглядит как последовательность значительного количества строк вида

LINE NUMBER ONE ONE CODE PRINT ZERO GOTO ONE ZERO ZERO ONE ZERO


В каждой строке указан ее номер (LINE NUMBER ...), выполняемая команда (PRINT ...) и безусловный переход на другую строку (GOTO ...). Но такая программа 1) неинтересна и 2) сложно проверяется ввиду отсутствия авторского интерпретатора. Так что ее я оставляю на откуп богатому воображению читателя.
Tags:
Hubs:
Total votes 72: ↑53 and ↓19 +34
Views 1.1K
Comments 18
Comments Comments 18