-X
Provalo online!
Prova il contrario!
Spiegazione
Si scopre che questo è in realtà molto più semplice della precedente sfida in Stack Cats. Il programma completo (dopo l'applicazione -m
) qui è -X-
. X
viene utilizzato per scambiare le pile a sinistra e a destra della testina del nastro, ovvero non influisce affatto sullo stack iniziale, quindi possiamo ignorarlo. Ma poi il programma è effettivamente giusto--
(negare due volte la parte superiore dello stack), il che non fa nulla.
Per il programma inverso, l'applicazione -m
dà X-X
. Ancora una volta, X
non fa nulla, quindi il programma è effettivamente giusto -
, il che nega la cima dello stack.
L'unica altra soluzione a 2 byte è -=
, ma è praticamente la stessa. L'unica differenza è che =
scambia solo le cime delle pile adiacenti, non le pile intere.
Ma ancora una volta, usare -m
è un po 'come imbrogliare, quindi di seguito è una soluzione che utilizza un programma completamente mirror.
:I<->I:
Provalo online!
Prova il contrario!
Spiegazione
Le considerazioni della risposta precedente si applicano ancora : qualsiasi soluzione valida deve utilizzare i caratteri associati e I
. Le sei possibili soluzioni (incluse nel collegamento TIO) sono praticamente tutte uguali. -
e _
sono equivalenti in questo programma e :
possono essere sostituiti da |
o T
(che fanno lo stesso per input diversi da zero e coincidono anche per input zero). Ho appena scelto questo per spiegare perché è più semplice.
Quindi ricorda che lo stack iniziale contiene l'input sopra a -1
(sopra infinitamente molti zeri) mentre tutti gli altri stack lungo il nastro contengono solo zeri. Stack Cats ha anche la proprietà che qualsiasi programma di lunghezza pari non fa nulla (a condizione che termini, ma non possiamo comunque usare loop per questa sfida). Lo stesso vale ovviamente per qualsiasi programma di lunghezza dispari il cui personaggio centrale non fa nulla ... vediamo:
: 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).
Pertanto, la seconda metà del programma annulla esattamente la prima metà e finiamo con l'input in cima a di -1
nuovo.
Il programma inverso è :I>-<I:
. Vediamo come questo cambia le cose:
: 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.