Backhand, 6 5 bytes
I@-Ov
Try it online! Try it doubled!
Made a little complex due to the nature of the pointer in Backhand. I don't think it's possible to get any shorter haha, turns out I was wrong. This duplicates no instruction and reuses both the input, output and terminate commands between the two programs. Now I think it is optimal, since you need all of the IO-@
commands to work, and in a 4 byte program you can only execute two of those commands.
###Explanation:
The pointer in Backhand moves at three cells a tick and bounces off the boundaries of the cell, which means the general logic is overlapping. However you can manipulate this speed with the v
and ^
commands.
The original program executes the instructions IO-@
, which is input as number, output as number, subtract, terminate. Obviously the subtract is superfluous. In the code these are:
I@-Ov
^ ^ Reflect
^ Reflect again
^
The reversed program executes v-I-vO-@
. The v
reduces the pointer steps between ticks, and the -
subtracts from the bottom of the stack, which is implicitly zero. The extra -
commands do nothing. The program executes like
vO-@I
v Reduce pointer speed to 2
- Subtract zero from zero
I Get input as number and reflect off boundary
- Subtract input from zero
v Reduce pointer speed to 1
O Output as number
- Subtract zero from zero
@ Terminate