Строка может быть сдвинута на число n
путем получения значения байта c
каждого символа в строке, вычисления (c + n) mod 256
и преобразования результата обратно в символ.
Например, смещение "ABC123"
на 1 приводит к "BCD234"
смещению на 10 "KLM;<="
дюймов и смещению на 255 дюймов "@AB012"
.
Задание
Выберите , как много чисел n
с , 0 < n < 256
как вы смеете и написать программу или функцию , которая принимает строку в качестве входных данных и
- возвращает строку без изменений, если исходный код не изменился, но
- возвращает строку, сдвинутую на
n
когда исходный код сдвинут наn
.
правила
- Оценка вашего представления - это число поддерживаемых
n
, причем чем выше оценка, тем лучше. Максимальная оценка 255. - Ваша заявка должна поддерживать хотя бы одну смену, поэтому минимальный балл - 1.
- В случае ничьей выигрывает более короткая программа.
- Все сдвинутые программы должны быть на одном языке.
string
code-challenge
source-layout
Laikoni
источник
источник
\r
?Ответы:
Brainfuck, оценка: 31 (2208 байт)
Программа в кодировке Base64:
Работы в смены 0, 4, 8, 12, 32, 36, 40, 44, 64, 68, 72, 76, 96, 100, 104, 108, 128, 132, 136, 140, 160, 164, 168, 172 192, 196, 200, 204, 224, 228, 232 и 236.
Для каждого значения от 0 до 255 есть ровно одно из тех сдвигов, которое отправляет этого персонажа в действительную инструкцию по бреду.
Программа опирается на 8-битные ячейки с переносом на переполнения. Это может быть, вероятно, довольно немного, поскольку сдвиг состоит только из повторения
+
или-
(в зависимости от того, что короче).Код Python, используемый для генерации этого:
источник
+[>,.<]
?),[+.,]
, где+
количество+
с или-
сlHaskell, оценка 255 (27,026 байт)
Программа работает, но помещение ее в буфер обмена, похоже, разрушает ее, поэтому вот код, который выводит мою программу.
верификация
Итак, если копирование чего-либо в буфер обмена нарушает его, как я могу убедиться, что оно работает?
Вы можете использовать это здесь . Вы можете настроить
N
и строку (в настоящее времяBig ol' egg
), чтобы увидеть, что она работает самостоятельно.Это будет проверять все N на одном входе подряд, но имеет тенденцию к превышению времени ожидания.
объяснение
Это злоупотребляет грамотной нотацией комментариев Хаскелла. В грамотном Haskell любая строка, которая не начинается с
>
комментария. Таким образом, чтобы наш код работал, мы делаем 255 копий программы, каждая из которых смещается,n
а затем мы смещаем каждую отдельную копию на-n
.источник
C, оценка: 1 (73 байта)
Попробуйте онлайн!
Смещено на 1:
Попробуйте онлайн!
источник
05AB1E , оценка: 3 (24 байта)
Попробуйте онлайн!
объяснение
Сдвинут один раз:
Попробуйте онлайн!
объяснение
Перенесено дважды:
Попробуйте онлайн!
объяснение
Сдвоенный трижды:
Попробуйте онлайн!
объяснение
источник
Javascript, оценка:
14 (94346 байт)Довольно просто, с различными разделами, закомментированными при повороте, сложным было найти пригодные имена переменных и разделы комментариев, которые не нарушают синтаксис Javascript.
неповёрнутых:
Повернуто на 5:
Повернуто на 10:
Повернуто на 14: здесь наконец-то стало интересно, что нужно злоупотреблять системой типов Javascript.
Повернуто на 199:
Чтобы найти решения, я построил небольшой инструмент чтобы показать разные фрагменты при повороте на переменную величину, затем я нашел определенные шаблоны, которые я мог бы использовать в качестве полезных строительных блоков.
Основная суть в том, что
a/**/=>a
это все еще допустимое определение функции, которое позволяет встроить функцию с обратным поворотом в разделе комментариев. Оттуда, это может быть повторено несколько раз, если все сделано правильно.Поскольку большинство разделов комментариев являются вложенными, возможно, можно найти другой результат, но заставить его работать с каждым добавленным ответом становится все труднее из-за коллизий и управляющих символов.
Замена всех значений на
charCodeAt(0)
withcharCodeAt``
сбрасывает 4 байта всего решения, но это слишком много работы с нуля.источник
charCodeAt()
для сохранения 2 байта?PHP с
-d output_buffering=on -d short_open_tag=on
, оценка: 255 (25 731 байт)Подобно решению Haskell, копирование и вставка этих разрывов, поэтому я сгенерировал это, используя этот скрипт Perl .
Проверка для сдвинутых 1, 16, 32 и 255 раз.
объяснение
Использование РНР
<?
разделителем сделал это довольно легко, но я должен был избегать любых строк , которые могли бы в конечном итоге , как в<?
других местах в коде, это в основном означает03
,14
,25
,36
,47
,58
и69
. Обойти это было довольно легко, используя арифметику. Также вполне возможно уменьшить количество байтов в исходной программе.источник
Crane-Flak , счет 3 (252 байта)
Попробуйте онлайн!
(Не совсем работает в Brain-Hack, потому что только 256 модов Crane-Flak на 256)
Смещено на 1
Попробуйте онлайн!
Смещено на 2
Попробуйте онлайн!
Смещено на 3
Попробуйте онлайн!
объяснение
Основной код на работе здесь
где
n
произвольное число. Это перемещает все к добавлениюn
к каждому элементу в стек (по модулю 256 подразумевается при выводе), а затем перемещает их обратно.Однако для первой программы (т.е. смещенной на 0) нам не нужно ничего делать, потому что смещение на ноль - это программа cat. Итак, начнем с этого кода:
и сдвинуть его вниз на 1
Это не сбалансировано, поэтому мы должны это исправить. Есть несколько способов, которыми мы могли бы сделать это с помощью моего метода выбора (по причинам, которые станут очевидными):
Сдвинув это на 2 мы получим
Поскольку с
()
ним легче иметь дело, чем{}
мы будем использовать}
s для завершения желаемой программы. Это означает, что их)
можно сбалансировать довольно очевидными средствами. С некоторой тряской мы можем превратить это в:Сдвигая это назад мы получаем
Шаг до 3 настолько сложен, что я его больше не понимаю. Я использовал ту же технику и просто возился с ней, пока наконец не заставил всех 4 работать одновременно. Техника почти такая же, просто намного больше возни.
источник
Питон 3, Оценка 1, 76 байт
Сдвиг 0: без изменений
Сдвиг 1:
Начал работу в смену 2, но "" становится $$, и вы не можете начать с этого строку.
Когда вы сохраните его в файл, убедитесь, что он не заканчивается переводом строки. (vim -b file.py + set noeol)
источник
Желе , оценка
12815 байтСдвиг 0:
Попробуйте онлайн!
Сдвиг 2:
Попробуйте 2 онлайн!
Сдвиг 3:
Попробуйте 3 онлайн!
источник