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