^(^1|\1\1)*1
Спробуйте в Інтернеті!
Введення та виведення не одинаково (тестовий набір включає перетворення з та в десяткові для зручності).
Пояснення
Це зробити досить просто в одинарному режимі. Все, що ми хочемо зробити, - це видалити найбільшу потужність 2 із входу. Ми можемо порівняти потужність 2 з деякими прямими посиланнями. Насправді простіше зіставити значення форми 2 n -1 , тому ми зробимо це і порівняємо один 1 окремо:
^(^1|\1\1)*1
Група 1
або 1
на початку поєднується з синглом, щоб розпочати щось, або вдвічі збігається з тим, що було зроблено в останній ітерації. Так воно співпадає 1
, потім 2
, потім 4
і так далі. Оскільки вони додаються, у нас завжди не вистачає потужності 2, яку ми фіксуємо 1
в кінці.
У зв'язку із зворотним подачею лінії, сірник просто видаляється із вхідних даних.
10
очевидно дає0
: D