|>I|
Попробуйте онлайн!
Попробуйте все наоборот!
Это работает для любых входных данных, которые не содержат нулевых байтов.
объяснение
Вау, я дошел до того, что я пишу это от руки ...
Полная программа есть |>I|I<|
.
| Reverse the entire stack down to the EOF marker -1 (since there are no zeros in the input).
> Move one stack over to the right (which only contains zeros).
I Does nothing on zero.
| Does nothing on zero.
I Does nothing on zero.
< Move back to the initial stack.
| Reverse the input once more.
Как и в решении предыдущего вызова, так как центр команды |
ничего не делает, так и вся программа.
Обратный программа тогда |I>|<I|
.
| Reverse the entire stack down to the EOF marker -1 (since there are no zeros in the input).
I Move the -1 one stack to the left and turn it into a +1.
> Move back to the initial stack.
| Reverse it again, but this time without the EOF marker.
< Move back to the left.
I Move the +1 back onto the initial stack and turn it into a -1 again.
| Reverse the entire stack. We now have the -1 as an EOF marker again at the bottom
and the rest of the stack has been reversed three times, i.e. one net reversal.
Интересно, что если мы используем эту реверсивную программу без -m
нас, мы все равно получим рабочее решение на этот раз, поэтому единственные дополнительные байты, которые возникают при пропуске, -m
- это те, которые мы получаем при зеркалировании кода.
|I<|>I|
Попробуйте онлайн!
Попробуйте все наоборот!
объяснение
Обращенная версия этой программы такая |I>|<I|
же, как и выше, поэтому мы можем игнорировать это. Но нереверсивная версия отличается. Так как <>
теперь точка указывает на другое, команда center ничего не делает, поэтому программа становится кошкой:
| Reverse the entire stack down to the EOF marker -1 (since there are no zeros in the input).
I Move the -1 one stack to the left and turn it into a +1.
< Move another stack to the left, which contains only zeros.
| Does nothing on zero.
И, таким образом, >I|
точно отменить первую половину программы.