-X
Спробуйте в Інтернеті!
Спробуйте навпаки!
Пояснення
Виявляється, це насправді набагато простіше, ніж попередній виклик у Stack Cats. Повна програма (після подачі заявки -m) тут є -X-. Xвикористовується для заміни стеків ліворуч та праворуч від головки стрічки, тобто вона взагалі не впливає на початковий стек, тому ми можемо її ігнорувати. Але тоді програма ефективно просто --(заперечуйте верхню частину стека двічі), що нічого не робить.
Для зворотної програми подання -mподає X-X. Знову ж таки, Xнічого не робить, тому програма ефективно справедлива -, що заперечує верхню частину стека.
Єдине інше 2-байтове рішення є -=, але воно практично те саме. Єдина відмінність полягає в тому, що =підміняються тільки вершини сусідніх стеків, а не всі стеки.
Але знову ж таки, використання -mвиглядає трохи схожим на обман, тому нижче - рішення, яке використовує повністю дзеркальну програму.
:I<->I:
Спробуйте в Інтернеті!
Спробуйте навпаки!
Пояснення
Міркування з попередньої відповіді все ще застосовуються : будь-яке дійсне рішення потребує використання парних символів та I. Шість можливих рішень (включених у посилання TIO) практично однакові. -і _еквівалентні в цій програмі, і :може бути замінено |або T(що те ж саме для ненульових входів і по збігу також робота для нульових входів). Я щойно вибрав це для пояснення, тому що це найпростіше.
Тому пам’ятайте, що початковий стек утримує вкладку зверху -1(зверху нескінченно багато нулів), тоді як усі інші стеки уздовж стрічки містять нулі. Stack Cats також має властивість, що будь-яка рівномірна програма нічого не робить (за умови, що вона припиняється, але ми не можемо використовувати петлі для цього виклику). Це, очевидно, справедливо для будь-якої програми непарної довжини, центральний персонаж нічого не робить ... давайте подивимось:
: Swap the input with the -1 below.
I Move the -1 one stack to the left and turn it into +1.
< Move another stack left (without taking the value).
- Negate the zero on top of that stack (i.e. do nothing).
Тому друга половина програми точно скасовує першу половину, і ми знову закінчуємо введенням -1.
Зворотна програма є :I>-<I:. Подивимось, як це змінює речі:
: Swap the input with the -1 below.
I Move the -1 one stack to the left and turn it into +1.
> Move one stack right, i.e. back onto the initial stack which still holds the input.
- Negate the input.
< Move back to the left where we've parked the 1.
I Move that 1 back onto the initial stack and turn it back into a -1.
: Swap the -1 below the negated input to act as an EOF marker.