# [05AB1E](https://github.com/Adriandmen/05AB1E/wiki/Commands), 11 [bytes](https://github.com/Adriandmen/05AB1E/wiki/Codepage)

    ;3ss{Ƶ}]\\^

[Try it online](https://tio.run/##yy9OTMpM/f/f2ri4uPrY1trYmJi4//8NjYwB) or [verify all test cases](https://tio.run/##yy9OTMpM/V9Waa@k8KhtkoKSfaWL0n9r4@Li6mNba2NjYuL@K@mF6fyPNtAx1DE0MtYxMjXVMTSMBQA).

The core program without the [tag:restricted-source] would have been 2 [bytes](https://github.com/Adriandmen/05AB1E/wiki/Codepage):

    ;^

[Try it online](https://tio.run/##yy9OTMpM/f/fOu7/f0MjYwA) or [verify all test cases](https://tio.run/##yy9OTMpM/V9Waa@k8KhtkoKSfaXLf@u4/zr/ow10DHUMjYx1jExNdQwNYwE).

**Explanation:**

*Explanation of the core program:*

<!-- language-all: lang-python -->

    ;    # Halve the (implicit) input
     ^   # Implicitly truncate it to an integer, and bitwise-XOR it with the
         # (implicit) input
         # (after which the result is output implicitly)

The idea is to add no-ops between them without changing the functionality. I started by [creating a generator to get all 05AB1E character-pairs that differ by a single bit](https://tio.run/##yy9OTMpM/X9035G2YCO9w22nJoGYldlJFoc2aD9qWnNoGZAITji8A0gd7o73rz207VHDvJg8q////wMA). Before the `^`, only `\` and `V` seemed reasonable candidates (`\` discards the top of the stack; and `V` pops the top of the stack and saves it in variable `Y`). From there it was kinda trial-and-error to see what characters I could use. Because the `;` and `^` differ by 4 bits, at least that many no-op bytes in between are necessary. Although I have the feeling the byte-count can still be improved perhaps, 9 no-op bytes to toggle 4 specific bits isn't too bad I guess.

*Explanation of the new program:*

    ;           # Halve the (implicit) input-integer
                # No-ops:
     3          #  Push 3
      s         #  Swap the two values on the stack
       s        #  Swap them back
        {       #  Sort the digit(s) of 3
         Ƶ}     #  Push compressed integer 226
           ]    #  Close all open if-statements and loops
            \   #  Discard the top of the stack (the 226)
             \  #  Discard the top again (the 3)
              ^ # Implicitly truncate the halved input to an integer, and bitwise-XOR
                # it with the (implicit) input
                # (after which the result is output implicitly)

([See this 05AB1E tip (section *How to compress large integers?*)](https://codegolf.stackexchange.com/a/166851/52210) to understand why `Ƶ}` is `226`.)

*The [bytes in 05AB1E's codepage](https://github.com/Adriandmen/05AB1E/wiki/Codepage) of `;3ss{Ƶ}]\\^` are:*

<!-- language-all: none -->

    ;  00111011
	       v
	3  00110011
	    v
	s  01110011
	s  01110011
	       v
	{  01111011
	        v
	Ƶ  01111111
	         v
	}  01111101
	     v
	]  01011101
	          v
	\  01011100
	\  01011100
	         v
    ^  01011110