Это дополнительный вопрос к моему вопросу Puzzling.SE : я спросил, есть ли функция f, отображающая логические строки в логические строки, так что f (f (b)) = reverse (b) для всех входных строк b . (Под обратным я имею в виду функцию, которая меняет порядок битов.)
Приведенная выше ссылка содержит положительный ответ, с доказательством, большим f '' , но вы, возможно, захотите обдумать вопрос для себя, прежде чем смотреть.
Реализуйте такую функцию f как можно меньше байтов.
Вы можете либо прочитать ввод из STDIN, либо взять аргумент функции; и либо записать строку результата в STDOUT, либо вернуть ее.
В любом случае, вы можете работать с фактическими строками двух отдельных байтов или символов вашего выбора (скажем ,
0и1, или\x00и\x01), или с массивами / списки truthy и falsy значений . Выберите два значения и придерживайтесь их.Результатом одного применения f должна быть сама двоичная строка: никаких глупых ответов вроде
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b...Ваша функция должна быть полной ; в частности, входные данные могут быть пустой строкой или длиной в один бит и т. д. Верхняя граница для длины строки отсутствует.
Он также должен быть чистым : не сохранять глобальное состояние между вызовами функций; входная строка должна полностью определять выходную строку.