Создайте максимально короткую запутанную программу, которая отображает текст «Hello World».
Чтобы считаться запутанной программой, она должна отвечать как минимум двум из следующих требований:
- Не содержит символы:
h
,l
,w
иd
в любом случае - Не содержит символы:
e
,o
,r
,0
, и1
в любом случае - Не содержит символов:
2
или7
Вход:
нет
Выход:
Hello World
code-golf
obfuscation
hello-world
restricted-source
Кевин Браун
источник
источник
import
в питоне не допускается.72
-"H"
вот почему я выбрал этих двоихОтветы:
GolfScript, 17 символов
При тестировании этого представления, пожалуйста, сохраните файл как обычный двоичный файл, а не UTF-8. Возникли проблемы при воссоздании файла? Вот шестнадцатеричный код этого:
источник
Perl
Поскольку в очевидном ответе используется какое-то смещение, я чувствую себя обязанным опубликовать что-то с помощью Acme :: EyeDrops , однако с той дополнительной мощью, которую я считал моей, должно быть немного веселее.
Предостережение
Начиная с версии Perl 5.18 механизм, позволяющий запускать этот код, стал настолько мощным, что по умолчанию его отключили, чтобы предотвратить злоупотребление. Поэтому в версиях 5.18+ вы можете либо добавить
use re 'eval';
в начало скрипта, либо, если скрипт назван,world.pl
вы можете запустить его какperl -Mre=eval world.pl
. К сожалению, эти неприглядные персонажи должны быть добавлены, но c'est la vie. (Примечание: я хочу подчеркнуть, что включение этой функции не использует какую-либо библиотеку или дополнение, отображаемый код является допустимым кодом Perl, механизм просто больше не включен по умолчанию).источник
(?{ code })
для оценки пользовательского кода Perl во время сопоставления регулярного выражения. Пользовательский код Perl печатает сообщение. Это приятно, потому что это не нарушает никаких правил.C # (175 символов)
Это было довольно сложно сделать в C #, потому что ограничения не позволяют использовать довольно много общих ключевых слов. В C # возможно использование escape-последовательностей Unicode в идентификаторах, но, к сожалению, не в ключевых словах.
Я подозреваю, что это решение работает только при компиляции против .NET 4.0. Смотрите объяснение почему.
объяснение
источник
Uri
вместоobject
дляb
. Вы можете использовать\xHH
в строках вместо того,\u00HH
где оно однозначно (\x
переменной длины). Во-вторых, вам не нужноb
вообще, и вы можете просто использоватьc
в качестве первого аргументаInvoke
. MSDN утверждает, что для статических методов первый аргумент игнорируется. Это снижает его до 175 для меня.Invoke
может быть что угодно, это даже не обязательноc
, это может быть0
... :)c
(что, к сожалению, не работает, так какnew
требуетe
и.Split('x')
слишком долго (вышел в 177).GetMethods
. +1BrainFuck, 106 ударов
Удовлетворяет всем правилам, и это наверняка запутано.
источник
++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.
всего 100 ударов, мой лучше, чем твойJavascript, 2595
Это только нарушает правило 2.
источник
. That's followed by a comment and the expression
['_']` в пустом контексте. Затем переменнойo
(вместе с_
и(゚ー゚)
) присваивается значение 3. Она продолжается в том же духе, выполняя множество дополнительных безвредных действий, которые фактически не выполняются, и используя обходные пути для выполнения намеченной работы (вызоваalert("Hello world")
) в неочевидном мода.Befunge-93 - блок 10х9
Сожалею. : D
Я не собирался делать небольшие размеры здесь, я пытался действительно ОБОСНОВАТЬ код, включая как можно больше смайликов и шума! : D
Должно идти с правилами 2 и 3.
источник
Golfscript - 17 символов
Проще скопировать / вставить, чем Крис
В основном Цезарь шифр сдвигается на 1 символ
источник
e
в немпитон
Правило I и III (34 символа)
Правило I и III, альтернатива (39 символов)
Правило II и III (37 символов)
Правило I и II (50 символов)
Все три правила (58 символов)
источник
import codecs
прежде чем ты сможешьcodecs.decode
JavaScript, 366 символов
Увидев решение Perl Джоэля Бергера, я почувствовал, что должен сам сделать некоторую красивость в искусстве ASCII ... JavaScript, не использует буквенно-цифровые символы, и, в отличие от вывода JSFuck, он на самом деле имеет разумные размеры.
источник
($)
превращением в()
(потому что я добавил$
симметрию).rot13 - 11 символов
Uryyb Jbeyq
2019/2/12: этот ответ хранится по историческим причинам и больше не является действительным в соответствии с действующими правилами сайта.
источник
Скала, 39
Такие решения, как print ("Qnuux)` x {um "map (_- 9 toChar)) (35 символов), нарушают правила 1 и 2 (" toChar "содержит как" h ", так и" r "), что делает это немного жестко
Наконец придумали это:
Предложения по улучшению приветствуются
источник
Баш,
3025 символовС благодарностью Питеру Тейлору за использование Herestring.
источник
tr G-t F-s<<<Ifmmp\ Xpsme
TeX, 95 байт
Нарушает третье правило.
Запустите с,
tex filename.tex
чтобы получить вывод DVI илиpdftex filename.tex
PDF.источник
> <> , 2 × 20 = 40 символов
Нарушает Правило II, так как я не могу вывести символ без использования
o
.источник
Windows PowerShell, 91
959798Нарушает только Правило II.
Это очень зло, которое уже само по себе
char
нарушает два правила.И, да, с этим трудно было работать.
$OFS
для''
так при заливке массива в строку без пробелов появится между элементами.char
самом деле был самой сложной частью, и я провожу целый день в поисках пути. У меня все остальное работает хорошо, но как только я делаю расчеты, я получаюint
s, а неchar
s. Положить их обратно в строку было довольно сложно.Я нашел способ вызывать
Invoke-Expression
без необходимостиe
:но этому все еще не хватало аргументов. И я уже отбросил свою цель - утвердить все три правила. Также это не особенно помогло мне в кастинге
char
.Немного укорочен с новой версией PowerShell. Однако, к сожалению, никакой другой полезный способ создания результата не появился.
источник
PHP (16 байт)
Я заметил, что мой предыдущий пример PHP не был достаточно запутанным, поэтому давайте посмотрим более явно запутанные примеры (предупреждение, запутывание!). Кроме того, вопиющее копирование примера GolfScript, за исключением уменьшения его размера (возможно ли это?). Эта запись требует либо PHP 5.4, либо
short_open_tag
включен. При создании этого правила не было нарушено. На самом деле, эта запись не содержит букв или цифр ASCII.Этот пример не нарушает ни одно из правил. Веселиться. Чтобы создать файл, выполните следующую команду.
Или, если вы не доверяете выполненной
printf
команде, я подготовил дамп Base64 файла.Если вы думаете, что оба метода для его генерации нарушают правила, я также сгенерировал файл на Dropbox .
И запустить его.
Полученный файл должен иметь 16 байтов. Получайте удовольствие, управляя этим. Обратите внимание, что если у вас
E_NOTICE
включены предупреждения, будет отображаться уведомление. Просто игнорируйте это, исправляя это будет тратитьдва персонажаодин символ (в@
конце концов, я могу использовать оператор), и в результате Base64 будет выглядеть менее круто.источник
Пробелы (167 символов)
Чтобы получить программу WS, замените символы пробела, табуляции или перевода строки на S, T, L соответственно в следующей строке:
или загрузите «сырую» программу только для пробелов в текстовом файле hello.ws .
При выполнении этим интерпретатором WS эта программа выводит «Hello World».
Пояснение (игнорируйте пробел здесь!):
«Средние» строки (например
TSSTSSSL
) - это коды ascii (в двоичном формате, сS
обозначением 0,T
обозначением 1) для последовательных букв в «Hello World». ПрефиксSSS
помещает число, следующее за ним (оканчивается наL
), в стек.TLSS
выводит символ с кодом ascii на вершине стека. Наконец, в соответствии с этим руководством , программа должна завершатьсяLLL
для чистого выхода интерпретатора.NB: я ввожу это как отдельный ответ, потому что другая запись программы WS - это программа с 1287 символами, которая печатает «Привет, мир пробелов!» вместо обязательного «Hello World».
источник
Рубин - 63 символа
источник
puts "Gdkkn~Vnqkc".split("").map(&:succ)*''
- 43C 160 символов
Работает только на машинах с прямым порядком байтов с 4-байтовым int:
Удовлетворяет всем трем правилам.
источник
p[];main(){p={(5*5*5*5*5*64+96696)*(443+5688),(5*3*4*3+4-3)*(66*45*6-6*6-4+3)*83*(3+4),6544494+36868};puts(p);}
- 111 символов.x[]={45483*39994-3958,48465*38543-5584,6584695-3333};main(){puts(x);}
- 69 символов. Я уверен, что смогу побриться еще немного, если уделить больше времени математике литералов. Во всяком случае, это был интересный способ провести пару часов :)PHP, 28 байт
Не совсем запутанный, но очень короткий и очевидный :). Показывая, что даже при ограничении символов вы можете очень легко следовать программам. Ограничения 1 и 3 следуют. Ограничение 2 было нарушено.
Обратите внимание, что это требует
short_open_tag
установки, если вы не используете PHP 5.4 или выше. Возможно, некоторые примеры короче, но я думаю, что этот пример довольно короткий.источник
Баш 28 символов:
в качестве альтернативы / bin / echo (18 символов) *) см. обсуждение ниже.
Самопроверка:
Сильнее, чем ты! Инструменты, для переворачивания слов вверх ногами, инструменты думают, что буква «Н» или «о», перевернутая вверх ногами, лучше всего отображается как Н или о. Это будет противоречить группе 1 (Hlwd: 27: eor01) соответственно 3.
H может отображаться с
но 01 и 2 тоже отравлены. Гы! Но эхо bash-buildin имеет не только возможность отображать восьмеричные значения ascii, но и шестнадцатеричные:
Но если мы используем bash в качестве языка программирования, команда echo является частью программы, которая не только подсчитывает количество символов, но также содержит отравленные символы (hlwd: 27: eor01) eho из групп 1 и 3.
Так что в этот момент эхо умерло. К счастью, есть printf, который знает "% b" для отображения.
R является единственным проблемным символом в printf и принадлежит группе 3. Так как 'o' находится в последней группе, мы можем оставить его в Hello и в World, но мы можем использовать omicron ο, который выглядит как o, или °
°
.Ссылки:
источник
С (94)
На маленьких машинах Endian:
Нарушает правило II, но удовлетворяет остальное.
источник
JavaScript - 132 символа
Нарушает правило I
Использование :
источник
1
на!![]+![]
и0
на ,""-""
чтобы не нарушать правила # 2.!![]+![]
? Почему не просто4-3
?Дис ,
10283 символаРазвернул цикл кода, поскольку буквы могут быть сгенерированы менее чем за пять последовательных операций. Сохранение нескольких символов путем повторного использования значения аккумулятора: два
l
являются последовательными,SPACE
могут быть сгенерированыo
иd
могут быть сгенерированыl
.Старая версия
С комментариями ниже. Он использует последовательность из пяти идентичных операций для генерации всех символов
Hello World
: одного поворота и четырех вычитаний.источник
C: 162 символа (исключая ненужные переводы строки)
Я выбрал удобочитаемость и прозрачность при написании этого.
Он удовлетворяет всем трем требованиям.
источник
7
, нарушающую правило № 3. Но от этого было бы легко избавиться7
. Кроме того, добавляя несколькоint
s, добавляя несколько дополнительных скобок и добавляяint puts(int*);
в начало, он компилируетсяgcc -ansi -W -Wall
только с одним предупреждением: элемент управления достигает конца функции non-void .Баш,
2420 символовВам необходимо установить пакет "bsdgames".
Спасибо гнибблер :)
источник
PostScript, 41 символ
Использование:
$ gs -q -dNOPROMPT -dNODISPLAY filename.ps
источник
gsnd -q -- filename.ps
JavaScript, 66 символов
Другое решение JavaScript, на этот раз нарушающее правило № 2.
Вышеизложенное следует концепции ответа Халлвабо. Прежде чем я понял этот подход, у меня была, возможно, более запутанная версия:
что также нарушает правило № 2 и входит в 114 символов. (Удалите возврат каретки в этом втором решении, поскольку это только там для удобочитаемости.)
источник
unescape
.unescape
, и я играл только год больше десяти лет назад ... Что со мной?Хаскелл, 38
Ограничения 1 и 3 следуют.
источник
Фурье, 39 байт
Фурье всегда запутано. Это следует всем правилам.
Сломать:
Это может быть немного уточнено.
источник