-X
Experimente online!
Tente o contrário!
Explicação
Acontece que isso é realmente muito mais fácil do que o desafio anterior no Stack Cats. O programa completo (após a inscrição -m
) aqui é -X-
. X
é usado para trocar as pilhas esquerda e direita da cabeça da fita, ou seja, não afeta a pilha inicial, portanto podemos ignorá-la. Mas então o programa é efetivamente justo --
(negue o topo da pilha duas vezes), o que não faz nada.
Para o programa inverso, a aplicação do -m
give X-X
. Mais uma vez, X
não faz nada, então o programa é efetivamente justo -
, o que nega o topo da pilha.
A única outra solução de 2 bytes é -=
, mas é praticamente a mesma. A única diferença é que=
troca apenas as partes superiores das pilhas adjacentes, não as pilhas inteiras.
Mas, novamente, o uso -m
parece um pouco como trapaça, então abaixo está uma solução que usa um programa totalmente espelhado.
:I<->I:
Experimente online!
Tente o contrário!
Explicação
As considerações da resposta anterior ainda se aplicam : qualquer solução válida precisa usar os caracteres emparelhados e I
. As seis soluções possíveis (incluídas no link do TIO) são praticamente as mesmas. -
e _
são equivalentes neste programa e :
podem ser substituídos por |
ou T
(que fazem o mesmo para entradas diferentes de zero e coincidentemente também funcionam para entradas zero). Eu escolhi este para explicar porque é mais fácil.
Portanto, lembre-se de que a pilha inicial mantém a entrada em cima de um -1
(em cima de infinitos zeros), enquanto todas as outras pilhas ao longo da fita mantêm apenas zeros. O Stack Cats também possui a propriedade de que qualquer programa de tamanho par não faz nada (desde que seja encerrado, mas não podemos usar loops para esse desafio). O mesmo é obviamente verdadeiro para qualquer programa de tamanho ímpar, cujo caractere central não faça nada ... vamos ver:
: 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).
Portanto, a segunda metade do programa desfaz exatamente a primeira metade e terminamos com a entrada em cima de uma -1
novamente.
O programa inverso é :I>-<I:
. Vamos ver como isso muda as coisas:
: 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.