Вдохновлен следующим комиксом XKCD:
В «Работа над» Мисси Эллиот, часть припева выглядит следующим образом:
Is it worth it, let me work it
I put my thing down, flip it and reverse it
Имея это в виду, я предлагаю следующий вызов кода гольф:
Создайте код, который по порядку:
- Принимает 8-битный вход ASCII от STDIN; например
n
(Hex 6E или Bin 01101110) - Сдвигает каждый байт на 8 бит на 1 бит (я полагаю, это называется битовый сдвиг вниз), например,
01101110
становится00110111
(«опусти мою вещь»); - Инвертирует биты каждого байта, например,
00110111
становится11001000
(«переверни»); - Инвертирует биты для каждого байта, например
11001000
становится00010011
(«перевернуть его»); - Если значение байта меньше 32, то перед преобразованием обратно в ASCII выполните
(95 + [byte value])
или, другими словами,(126-(31-[byte value]))
на байте ... Если значение байта все еще меньше 32, повторите шаг 5 - Если значение байта больше 126, то перед преобразованием обратно в ASCII выполните
([byte value] - 95)
или, другими словами,(32+([byte value]-127))
в байте ... Если значение все еще больше 126, повторите шаг 6. - Показать недавно преобразованную строку как ASCII.
Пример этого кода в действии:
(Вклад, стоит ли это того?)
workit missy
(«missy» - вход, «workit» - функция)
Теперь за кулисами ...
(позвольте мне работать это ... в двоичный файл)
01101101 01101001 01110011 01110011 01111001
(Положи мою вещь ... Побито)
00110110 00110100 00111001 00111001 00111100
(...Переверните его...)
11001001 11001011 11000110 11000110 11000011
(... И поменять это!)
10010011 11010011 01100011 01100011 11000011
(Преобразовано обратно в десятичную)
147 211 99 99 195
(Выполнить необходимую математику)
147-95 211-95 99 99 195-95 => 52 116 99 99 100
(Конвертировать обратно в ASCII и отобразить вывод)
4tccd
правила
- Самый короткий код выигрывает ... просто так ...
- Ввод может быть через функцию, по подсказке или как угодно, если вы можете заставить правило 1 «работать» для вас ...;)
- Я не за обратимостью, пока вы можете заставить код делать то, что я просил, я буду счастлив ...
Удачи!
источник
0 1 1 0 1 1 0 1
и0 1 1 0 1 0 0 1
дляmi
P
превращается в значение байта235
и вычитание95
оставляет вас с140
. Все еще непечатно. Или я неправильно понял?Ответы:
APL
5045Делает ввод с клавиатуры, например:
источник
GolfScript
433835Объяснение: Для каждого символа в строке мы сделаем следующее:
Применение:
Благодаря помощи от PeterTaylor.
источник
2base{0\+.,9<}do
этого было бы512+2base(;
. Также отметим , что если цель только , чтобы получить правильный вывод , который вы можете изменить порядок операций, поэтому вместо того ,{!}%
вам просто нужно~
ввода до того базового преобразования (а затем заменить512+
с511&
).2/
битовый сдвиг, то вы все еще можете сдвинуть бит, тогда~
, тогда базовое преобразование ...К,
6858,
источник
J - 61
источник
J,
5554 символовисточник
Руби, 115
Эта запись неконкурентно длинна. Так что я пойду с ", но вы можете прочитать это!" :-П
Читает из
stdin
:источник
Python 2.7, 106
Еще один довольно длинный ответ, но эй, это моя первая попытка:
Модифицировано на основе комментариев Даррена Стоуна и grc ниже ...
источник
a:
.chr
выражение с этим еще экономией 1 символьными:chr(x-(95,(-95,0)[x>32])[x<126])
.print'\b%c'%(x+95*((x<32)-(x>126))),
Python 2.7 - 73
86Благодаря изменению правил я нашел гораздо более простой способ сделать все это, используя двоичные и целочисленные манипуляции. Это экономит пространство над Quirlioms, не требуя временной переменной:
И в форме объяснения:
источник