Потенциально очень сложно, но я видел некоторые удивительные вещи, которые появились на этом сайте.
Цель состоит в том, чтобы написать программу на любом языке, которая делает все, что вы хотите. Подвох в том, что программа должна быть действительной после любого кругового сдвига символов.
Циклический сдвиг символов очень похож на циклический сдвиг . Некоторые примеры моей ясности.
Для программы int main() { return 0; }
сдвиг влево на 6 символов дает: in() { return 0; }int ma
сдвиг влево на 1 символ дает: nt main() { return 0; }i
сдвиг вправо на 10 символов дает: eturn 0; }int main() { r
Однако эта программа явно не соответствует правилам.
правила
- Любой язык
- Победитель определяется путем подсчета голосов
- Решения, которые делают то же самое, или совершенно разные вещи для каждой ротации, получат 100 виртуальных голосов за свой счет.
ОБНОВЛЕНИЕ Я думаю, что это продолжалось достаточно долго. Победителем, получившим наибольшее количество голосов (включая виртуальные), стал Марк Байерс. Отлично сработано!
источник
Ответы:
Используйте правильный язык для задачи. В данном случае это Befunge .
Этот язык, естественно, допускает ротацию, потому что:
Эта программа Befunge печатает точно такой же вывод («Hello») независимо от того, сколько «круговых сдвигов символов» вы используете:
Это работает на Befungee . Требуется увеличить доску (не 80 символов по умолчанию). Это можно запустить так:
Он работает, сначала динамически генерируя и сохраняя программу, которая печатает «Hello», а затем перезаписывая первый байт, чтобы перенаправить элемент управления во вновь написанную программу. Программа написана дважды, поэтому, если байт записан неправильно в первый раз, он будет исправлен во второй раз.
Идея может быть расширена для создания любой программы произвольной сложности.
источник
Brainf * ск
Выберите правильный инструмент для работы - поговорка, которая никогда не была более актуальной, чем эта работа прямо здесь!
Нешифрованная программа, которую вы видите здесь, просто печатает
SHIFT
(плюс перевод строки). Абсолютно круговые сдвиги будут производить различные другие выходные данные, хотя он всегда будет выводить шесть символов ASCII.источник
Коммодор 64 Бейсик
?
является сокращениемPRINT
и:
является разделителем операторов, поэтому:Конечно, возможны более длинные вариации:
и т.д...
источник
Golfscript
Эта программа печатает некоторые цифры, которые всегда составляют до 2, независимо от того, как программа сдвинута:
Первая строка печатается
1010
(10 в двоичном виде), вторая строка печатается02
и все остальные строки печатаются2
.Обновить:
Программу можно протестировать здесь . Обратите внимание, что я добавил
n
s в конце каждой строки только для форматирования вывода; их можно удалить, и программа все еще работает.источник
Ruby, вероятно, одно из кратчайших возможных решений:
И еще немного длиннее и интереснее:
источник
16-битный двоичный файл x86
Сконструированы вручную с помощью этих ( 1 2 ) таблиц nasm и ndisasm. Это всегда будет возвращаться без сбоя или бесконечного цикла, потому что ни один байт не является переходом или изменяет стек, и он заполнен NOP, чтобы
ret
в любом случае завершиться однобайтовой инструкцией.В большинстве случаев это будет вывод
FOO
или подстрока этого. ЕслиAX
сломан, это будет вызывать случайный int 10 (это изменило скорость мигания курсора в одном из моих тестов), но обычно это не приводит к сбою.Чтобы попробовать, поместите hexdump в файл и используйте
xxd -r foo.hex > foo.com
, затем запустите в среде dos (я использовал dosbox).Вот шестнадцатеричный дамп этого файла:
И несколько интересных разобранных смещений:
+0
(для примеров ниже, остальная часть двоичного файла все еще действительна)
+1
+2
+6
+11
+12
+18
(другие смещения - просто повторения вышеупомянутого)
+58
источник
Унарный ответ:
^ 44391 Нули
Кошачья программа. Независимо от того, как вы вращаете, это одна и та же программа.
источник
PHP
Вот, пожалуйста, действующая PHP-программа:
источник
Scala
Вложенные цитаты:
C ++ / Java / C # /ScalaКомментарий:
Пустая команда:
удар
Комбинация комментариев, пробелов и оболочки:
Sed
Автономные действующие команды:
p
P
n
N
g
G
d
D
h
H
Сочетание вышеперечисленного:
p;P;n;N;g;G;d;D;h;H;
AWK
Чтобы напечатать каждую строку файла:
или
Не печатайте ничего:
Perl
источник
;P;n;N;g;G;d;D;h;H
действительным?J
Во-первых, скрипт для проверки правильности вращения программы
s
:Например, программа
+/1 5
(сумма 1 и 5) дает:Тогда скучная, действительная программа:
источник
Округ Колумбия
Программы постоянного тока легко действуют в любой ротации. Например:
источник
Машинный код
Как насчет машинного кода Z80 / Intel 8051 для NOP .
Конечно, он не выполняет никаких операций, но он занимает один или два цикла ... вы можете иметь их столько, сколько захотите.
И я не согласен с ответом Ruby выше - я думаю, что один байт 00h короче, чем Ruby
p
.источник
К
Оценивает пустую строку
Возвращает символ периода
Возвращает частичное применение '.' (дианическая форма) в пустой список символов.
источник
ш, баш
cc rotated - это снова cc, но это не очень дружелюбно, если его так назвать голым.
dh debhelper тоже не очень помогает , в то время как hexdump просто ждет ввода.
Ghostscript запускает интерактивный режим, в то время как группа переключателей отображает сообщение об использовании - правильное решение и здесь, imho.
А вот и скрипт для поиска кандидатов на такие программы:
Если также находит более длинные последовательности, такие как (arj, jar) или (luatex, texlua), которые недействительны после каждой смены, но только после некоторых определенных смен, которые я неправильно прочитал в начале, но их немного, так что это легко отфильтровать их вручную.
источник
arj
/jar
не является допустимым, так как нетrja
команды (хотя мне нравится этот пример). +1 за сценарий - действительно хорошая идея :)every
или означатьa random one
. Пример сshift left by 6
,left by 1
иright by 10
заверил меня в интерпретации, что мне просто нужно найти возможность одной смены.... in any language ...
- мое решение работает только в bash (и sh, zsh, ash и некоторых других), но все эти другие решения также принимают имена программ.Тривиальный пример Python:
Может быть смещено три символа повторно, чтобы раскрыть все больше и больше алфавита.
источник
питон
Просто оцените некоторые цифры
источник
dc уже используется, но следующая программа всегда выдает одно и то же , независимо от поворота: D
Выходы
источник