redpwnCTF - Misc

misc (algo)/the-substitution-game (67 solves / 145 points)

Description:

nc mc.ax 31996 chall.py

Solution:

When we run this we get using python3:

Welcome to The Substitution Game!

In each level, you will enter a list of string substitutions.
For example, you may want to change every instance of 'abcd' to 'def'.

The game will provide a series of test cases.
For each case, substitutions will be applied repeatedly in a series of rounds.
In each round, the first possible substitution will be performed.
For test case of length s, there will be s ^ 2 substitution rounds.

In each round, we will show examples of intended substitution behavior.
It is your goal to match our behavior.

See next level? (y/n)

Reply y

--------------------------------------------------------------------------------
Here is this level's intended behavior:

Initial string: 000000initial000000000000
Target string: 000000target000000000000

Initial string: 00000initial00000000000000000000
Target string: 00000target00000000000000000000

Initial string: 000000000000initial0000000
Target string: 000000000000target0000000

Initial string: 0initial00000000000
Target string: 0target00000000000

Initial string: 000initial000000000
Target string: 000target000000000

Initial string: 00initial0000000000000000
Target string: 00target0000000000000000

Initial string: 00000000000initial0000000000000000
Target string: 00000000000target0000000000000000

Initial string: 000000000000000initial00000000000000000
Target string: 000000000000000target00000000000000000

Initial string: 00initial0
Target string: 00target0

Initial string: initial00000
Target string: target00000
--------------------------------------------------------------------------------
Enter substitution of form "find => replace", 5 max:

So we want the Initial string: to look like Target string:. We can only have direction substitutions ie finding all matches to something else. This one is pretty obvious, it’s changing intial to target for level 1. So if we want initial => target. Add another? (y/n) n -------------------------------------------------------------------------------- Testing substitutions... Level passed!

Ok, so level 1 was easy. If we look at the function level_1:

def level_1():
    initial = f'{"0" * randint(0, 20)}initial{"0" * randint(0, 20)}'
    target = initial.replace('initial', 'target')
    return (initial, target)

It’s just initial padded with random 0’s and replaced with target after the switch so it makes sense.

Level 1 Solution: initial => target

Next level is this:

def level_2():
    initial = ''.join(
        rand.choice(['hello', 'ginkoid']) for _ in range(randint(10, 20))
    )
    target = initial.replace('hello', 'goodbye').replace('ginkoid', 'ginky')
    return (initial, target)

hello is replaced with goodbye and ginkoid is replaced with ginky a random number of times. So we just need to reverse that.

Initial string: ginkoidhelloginkoidhelloginkoidginkoidhelloginkoidhelloginkoidhellohellohelloginkoidhellohelloginkoid
Target string: ginkygoodbyeginkygoodbyeginkyginkygoodbyeginkygoodbyeginkygoodbyegoodbyegoodbyeginkygoodbyegoodbyeginky

Looking at the first example, we see that very evidently.

Enter substitution of form "find => replace", 10 max: hello => goodbye
Add another? (y/n) y
Enter substitution of form "find => replace": ginkoid => ginky
Add another? (y/n) n
--------------------------------------------------------------------------------
Testing substitutions...
Level passed!

Ok, so that works, from now on, it gets a lot more complicated. As it can be seen, these first two are just direct replacements, in the future, these concepts build upon each other.

Level 2 Solution: hello => goodbye ginkoid => ginky

Level 3:

def level_3():
    return ('a' * randint(10, 100), 'a')

Looks easy right? This honestly took way too long from me. There are a number of random number of a’s (from 10 to 100) that we want to just get it to one a.

Initial string: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Target string: a

We know this program runs recursively as listed in the function test_substitution. We could brute force it so that every option from 10 to 100 a’s is replaced with just a. But we can’t since the program only allows for 10 of such substitutions as 100-10 would require 90 substitutions so we need to find another way.

This function works: aa => a because since this replacement runs recursively, it can slowly “delete” every extra a.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaa
aaaaaaa
aaaa
aa
a

This logic makes sense because it just changes aa to a which basically “deletes” an a. This is an important concept for the future.

Level 3 Solution: aa => a

Level 4:

def level_4():
    return ('g' * randint(10, 100), 'ginkoid')

Ok, this is literally the same thing as the previous level except instead of using a in the initial they use g and instead of using a (again) in the target, they use ginkoid. So by logic using the same thing from the previous level it should be: gg => g which makes:

ggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggg
ggggggggggg
gggggg
ggg
gg
g

Ok, so that works, now we need to change that last g to become ginkoid. The problem with this is that we can’t isolate the last g. Then if we enter g => ginkoid this is what happens. gg => g g => ginkoid

ginkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoidinkoid

It enters an infinite loop that doesn’t work because it loops the g of ginkoid messes up the deletion process of gg => g. Entering this:

gg => g
g => binkoid

Returns:

ggggggggggggggggggg
gggggggggg
ggggg
ggg
gg
g
binkoid

This proves the deletion process of extra g’s is correct but ginkoid screws it up. So instead of deleting the g, we could just change it to ginkoid and then delete the extra ginkoid. So taking the previous attempt we put:

gg => ginkoid
ginkoidginkoid => ginkoid

Returns:

ginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidg
ginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidginkoidg
ginkoidginkoidginkoidginkoidginkoidginkoidg
ginkoidginkoidginkoidg
ginkoidginkoidg
ginkoidg

Counting the number of g’s in the initial string and we see that we got this to work on even numbers of g’s but not on odd numbers. Then lastly, we need to delete that extra g at the end so we should just add ginkoidg => ginkoid.

Level 4 Solution:

gg => ginkoid
ginkoidginkoid => ginkoid
ginkoidg => ginkoid

Level 5: We need to check whether or not a binary palindrome is a palindrome or not. Also keep in mind that order starts becoming really important here.

Initial string: ^0000110010000111000000111100111100111100001111001111000011110011110011110000001110000100110000$
Target string: palindrome

Initial string: ^11010011000010100100001101100000111100000110000100001011$
Target string: not_palindrome

Let’s introduce a new concept here: Movement 1X => X1 moves x across a line of 1’s.

X11111111
1X1111111
11X111111
111X11111
1111X1111
11111X111
111111X11
1111111X1
11111111X

Let’s move the first digit to the last one to check if they are the same or not, this means palindrome, otherwise it’s not. So we can “store” the first digit in a different format. 1 becomes X and 0 becomes x. And then move it to the end. The two string limits at the beginning and end are very important to this process, but right now differentiating between the two aren’t important.

# differentiation not important
^ => $
# make 1 on both sides into X
$1 => X
1$ => X
# make 0 on both sides into x
$0 => x
0$ => x

We then “walk/move” the left most digit to the right accounting for all posibilities.

X1 => 1X
X0 => 0X
x1 => 1x
x0 => 0x

So basically if we have the combination xX or Xx we know it’s not a palindrome then we can lock this in.

xX => not_palindrome
Xx => not_palindrome

And if we have the combination XX or xx we know that it still might be a palindrome and need to keep looking so let’s lock this in too.

XX => YZ
xx => YZ

Then we can “walk” back Y to the beginning and leave the Z at the end.

0Y => Y0
1Y => Y1

Once we walk back all the way, we can change it to Z. Y => Z If we change both sides back to $ Z => $ And (boom!) we started at the beginning again. So if we get back to $$ then we know tested all possible cases and means it is a palindrome. $$ => palindrome This is the test:

011y010110z
01y1010110z
0y11010110z
y011010110z
z011010110z
$011010110$
x11010110$
x1101011x
1x101011x
11x01011x
110x1011x
1101x011x
11010x11x
110101x1x
1101011xx
1101011yy
1101011yz
110101y1z
11010y11z
1101y011z
110y1011z
11y01011z
1y101011z
y1101011z
z1101011z
$1101011$
X101011$
X10101X
1X0101X
10X101X
101X01X
1010X1X
10101XX
10101YY
10101YZ
1010Y1Z
101Y01Z
10Y101Z
1Y0101Z
Y10101Z
Z10101Z
$10101$
X0101$
X010X
0X10X
01X0X
010XX
010YY
010YZ
01Y0Z
0Y10Z
Y010Z
Z010Z
$010$
x10$
x1x
1xx
1yy
1yz
y1z
z1z
$1$
X$
Y$
Z$
$$

However, if it’s not a palindrome, we need to clear everything else out.

1not_palindrome => not_palindrome
0not_palindrome => not_palindrome

Level 5 Solution:

^ => $
$1 => X
1$ => X
$0 => x
0$ => x
X1 => 1X
X0 => 0X
x1 => 1x
x0 => 0x
xX => not_palindrome
Xx => not_palindrome
XX => YZ
xx => YZ
0Y => Y0
1Y => Y1
Y => Z
Z => $
$$ => palindrome
1not_palindrome => not_palindrome
0not_palindrome => not_palindrome

A total of 20 lines. Nice.

Level 6:

Initial string: ^1011000+10001010=1011100010$
Target string: incorrect
Initial string: ^10011010+11011101=101110111$
Target string: correct

We need to do addition. Easy. Read through the code, it should all make sense if you’ve followed along with the previous levels, it’s just using the same concepts with different variable names. This is what is should look like in practice step by step:

^11111001+10100=100001101%^
^1111100qX10100=100001101%^
^1111100qX1010fx100001101%^
^1111100q1X010fx100001101%^
^1111100q10X10fx100001101%^
^1111100q101X0fx100001101%^
^1111100q1010Xfx100001101%^
^1111100q1010Xf1x00001101%^
^1111100q1010Xf10x0001101%^
^1111100q1010Xf100x001101%^
^1111100q1010Xf1000x01101%^
^1111100q1010Xf10000x1101%^
^1111100q1010Xf100001x101%^
^1111100q1010Xf1000011x01%^
^1111100q1010Xf10000110x1%^
^1111100q1010Xf100001101x%^
^1111100q1010fX100001101x%^
^1111100q1010f1X00001101x%^
^1111100q1010f10X0001101x%^
^1111100q1010f100X001101x%^
^1111100q1010f1000X01101x%^
^1111100q1010f10000X1101x%^
^1111100q1010f100001X101x%^
^1111100q1010f1000011X01x%^
^1111100q1010f10000110X1x%^
^1111100q1010f100001101Xx%^
^1111100q1010f100001101PE%o^
^1111100q1010f10000110P1E%o^
^1111100q1010f1000011P01E%o^
^1111100q1010f100001P101E%o^
^1111100q1010f10000P1101E%o^
^1111100q1010f1000P01101E%o^
^1111100q1010f100P001101E%o^
^1111100q1010f10P0001101E%o^
^1111100q1010f1P00001101E%o^
^1111100q1010fP100001101E%o^
^1111100q1010Pf100001101E%o^
^1111100q101P0f100001101E%o^
^1111100q10P10f100001101E%o^
^1111100q1P010f100001101E%o^
^1111100qP1010f100001101E%o^
^1111100+1010f100001101E%o^
^1111100+1010f10000110E1%o^
^1111100+1010f1000011E01%o^
^1111100+1010f100001E101%o^
^1111100+1010f10000E1101%o^
^1111100+1010f1000E01101%o^
^1111100+1010f100E001101%o^
^1111100+1010f10E0001101%o^
^1111100+1010f1E00001101%o^
^1111100+1010fE100001101%o^
^1111100+1010=100001101%o^
^111110qx1010=100001101%o^
^111110qx101fx100001101%o^
^111110q1x01f1x00001101%o^
^111110q10x1f10x0001101%o^
^111110q101xf10x0001101%o^
^111110q101xf100x001101%o^
^111110q101xf1000x01101%o^
^111110q101xf10000x1101%o^
^111110q101xf100001x101%o^
^111110q101xf1000011x01%o^
^111110q101xf10000110x1%o^
^111110q101xf100001101x%o^
^111110q101fx100001101x%o^
^111110q101f1x00001101x%o^
^111110q101f10x0001101x%o^
^111110q101f100x001101x%o^
^111110q101f1000x01101x%o^
^111110q101f10000x1101x%o^
^111110q101f100001x101x%o^
^111110q101f1000011x01x%o^
^111110q101f10000110x1x%o^
^111110q101f100001101xx%o^
^111110q101f100001101PE%zo^
^111110q101f10000110P1E%zo^
^111110q101f1000011P01E%zo^
^111110q101f100001P101E%zo^
^111110q101f10000P1101E%zo^
^111110q101f1000P01101E%zo^
^111110q101f100P001101E%zo^
^111110q101f10P0001101E%zo^
^111110q101f1P00001101E%zo^
^111110q101fP100001101E%zo^
^111110q101Pf100001101E%zo^
^111110q10P1f100001101E%zo^
^111110q1P01f100001101E%zo^
^111110qP101f100001101E%zo^
^111110+101f100001101E%zo^
^111110+101f10000110E1%zo^
^111110+101f1000011E01%zo^
^111110+101f100001E101%zo^
^111110+101f10000E1101%zo^
^111110+101f1000E01101%zo^
^111110+101f100E001101%zo^
^111110+101f10E0001101%zo^
^111110+101f1E00001101%zo^
^111110+101fE100001101%zo^
^111110+101=100001101%zo^
^111110+10fX100001101%zo^
^11111qx10fX100001101%zo^
^11111qx10f1X00001101%zo^
^11111qx10f10X0001101%zo^
^11111qx10f100X001101%zo^
^11111qx10f1000X01101%zo^
^11111qx10f10000X1101%zo^
^11111qx10f100001X101%zo^
^11111qx10f1000011X01%zo^
^11111qx10f10000110X1%zo^
^11111qx10f100001101X%zo^
^11111q1x0f100001101X%zo^
^11111q10xf100001101X%zo^
^11111q10fx100001101X%zo^
^11111q10f1x00001101X%zo^
^11111q10f10x0001101X%zo^
^11111q10f100x001101X%zo^
^11111q10f1000x01101X%zo^
^11111q10f10000x1101X%zo^
^11111q10f100001x101X%zo^
^11111q10f1000011x01X%zo^
^11111q10f10000110x1X%zo^
^11111q10f100001101xX%zo^
^11111q10f100001101PE%ozo^
^11111q10f10000110P1E%ozo^
^11111q10f1000011P01E%ozo^
^11111q10f100001P101E%ozo^
^11111q10f10000P1101E%ozo^
^11111q10f1000P01101E%ozo^
^11111q10f100P001101E%ozo^
^11111q10f10P0001101E%ozo^
^11111q10f1P00001101E%ozo^
^11111q10fP100001101E%ozo^
^11111q10Pf100001101E%ozo^
^11111q1P0f100001101E%ozo^
^11111qP10f100001101E%ozo^
^11111+10f100001101E%ozo^
^11111+10f10000110E1%ozo^
^11111+10f1000011E01%ozo^
^11111+10f100001E101%ozo^
^11111+10f10000E1101%ozo^
^11111+10f1000E01101%ozo^
^11111+10f100E001101%ozo^
^11111+10f10E0001101%ozo^
^11111+10f1E00001101%ozo^
^11111+10fE100001101%ozo^
^11111+10=100001101%ozo^
^1111qX10=100001101%ozo^
^1111qX1fx100001101%ozo^
^1111q1Xfx100001101%ozo^
^1111q1Xf1x00001101%ozo^
^1111q1Xf10x0001101%ozo^
^1111q1Xf100x001101%ozo^
^1111q1Xf1000x01101%ozo^
^1111q1Xf10000x1101%ozo^
^1111q1Xf100001x101%ozo^
^1111q1Xf1000011x01%ozo^
^1111q1Xf10000110x1%ozo^
^1111q1Xf100001101x%ozo^
^1111q1fX100001101x%ozo^
^1111q1f1X00001101x%ozo^
^1111q1f10X0001101x%ozo^
^1111q1f100X001101x%ozo^
^1111q1f1000X01101x%ozo^
^1111q1f10000X1101x%ozo^
^1111q1f100001X101x%ozo^
^1111q1f1000011X01x%ozo^
^1111q1f10000110X1x%ozo^
^1111q1f100001101Xx%ozo^
^1111q1f100001101PE%oozo^
^1111q1f10000110P1E%oozo^
^1111q1f1000011P01E%oozo^
^1111q1f100001P101E%oozo^
^1111q1f10000P1101E%oozo^
^1111q1f1000P01101E%oozo^
^1111q1f100P001101E%oozo^
^1111q1f10P0001101E%oozo^
^1111q1f1P00001101E%oozo^
^1111q1fP100001101E%oozo^
^1111q1Pf100001101E%oozo^
^1111qP1f100001101E%oozo^
^1111+1f100001101E%oozo^
^1111+1f10000110E1%oozo^
^1111+1f1000011E01%oozo^
^1111+1f100001E101%oozo^
^1111+1f10000E1101%oozo^
^1111+1f1000E01101%oozo^
^1111+1f100E001101%oozo^
^1111+1f10E0001101%oozo^
^1111+1f1E00001101%oozo^
^1111+1fE100001101%oozo^
^1111+1=100001101%oozo^
^111qX1=100001101%oozo^
^111qXfX100001101%oozo^
^111qXf1X00001101%oozo^
^111qXf10X0001101%oozo^
^111qXf100X001101%oozo^
^111qXf1000X01101%oozo^
^111qXf10000X1101%oozo^
^111qXf100001X101%oozo^
^111qXf1000011X01%oozo^
^111qXf10000110X1%oozo^
^111qXf100001101X%oozo^
^111qfX100001101X%oozo^
^111qf1X00001101X%oozo^
^111qf10X0001101X%oozo^
^111qf100X001101X%oozo^
^111qf1000X01101X%oozo^
^111qf10000X1101X%oozo^
^111qf100001X101X%oozo^
^111qf1000011X01X%oozo^
^111qf10000110X1X%oozo^
^111qf100001101XX%oozo^
^111qf100001101PE%czoozo^
^111qf10000110P1E%czoozo^
^111qf1000011P01E%czoozo^
^111qf100001P101E%czoozo^
^111qf10000P1101E%czoozo^
^111qf1000P01101E%czoozo^
^111qf100P001101E%czoozo^
^111qf10P0001101E%czoozo^
^111qf1P00001101E%czoozo^
^111qfP100001101E%czoozo^
^111qPf100001101E%czoozo^
^111+f100001101E%czoozo^
^111+f10000110E1%czoozo^
^111+f1000011E01%czoozo^
^111+f100001E101%czoozo^
^111+f10000E1101%czoozo^
^111+f1000E01101%czoozo^
^111+f100E001101%czoozo^
^111+f10E0001101%czoozo^
^111+f1E00001101%czoozo^
^111+fE100001101%czoozo^
^111+=100001101%czoozo^
^11qfX100001101%czoozo^
^11qf1X00001101%czoozo^
^11qf10X0001101%czoozo^
^11qf100X001101%czoozo^
^11qf1000X01101%czoozo^
^11qf10000X1101%czoozo^
^11qf100001X101%czoozo^
^11qf1000011X01%czoozo^
^11qf10000110X1%czoozo^
^11qf100001101X%czoozo^
^11qf100001101PE%oczoozo^
^11qf100001101PE%czzoozo^
^11qf10000110P1E%czzoozo^
^11qf1000011P01E%czzoozo^
^11qf100001P101E%czzoozo^
^11qf10000P1101E%czzoozo^
^11qf1000P01101E%czzoozo^
^11qf100P001101E%czzoozo^
^11qf10P0001101E%czzoozo^
^11qf1P00001101E%czzoozo^
^11qfP100001101E%czzoozo^
^11qPf100001101E%czzoozo^
^11+f100001101E%czzoozo^
^11+f10000110E1%czzoozo^
^11+f1000011E01%czzoozo^
^11+f100001E101%czzoozo^
^11+f10000E1101%czzoozo^
^11+f1000E01101%czzoozo^
^11+f100E001101%czzoozo^
^11+f10E0001101%czzoozo^
^11+f1E00001101%czzoozo^
^11+fE100001101%czzoozo^
^11+=100001101%czzoozo^
^1qfX100001101%czzoozo^
^1qf1X00001101%czzoozo^
^1qf10X0001101%czzoozo^
^1qf100X001101%czzoozo^
^1qf1000X01101%czzoozo^
^1qf10000X1101%czzoozo^
^1qf100001X101%czzoozo^
^1qf1000011X01%czzoozo^
^1qf10000110X1%czzoozo^
^1qf100001101X%czzoozo^
^1qf100001101PE%oczzoozo^
^1qf100001101PE%czzzoozo^
^1qf10000110P1E%czzzoozo^
^1qf1000011P01E%czzzoozo^
^1qf100001P101E%czzzoozo^
^1qf10000P1101E%czzzoozo^
^1qf1000P01101E%czzzoozo^
^1qf100P001101E%czzzoozo^
^1qf10P0001101E%czzzoozo^
^1qf1P00001101E%czzzoozo^
^1qfP100001101E%czzzoozo^
^1qPf100001101E%czzzoozo^
^1+f100001101E%czzzoozo^
^1+f10000110E1%czzzoozo^
^1+f1000011E01%czzzoozo^
^1+f100001E101%czzzoozo^
^1+f10000E1101%czzzoozo^
^1+f1000E01101%czzzoozo^
^1+f100E001101%czzzoozo^
^1+f10E0001101%czzzoozo^
^1+f1E00001101%czzzoozo^
^1+fE100001101%czzzoozo^
^1+=100001101%czzzoozo^
^qfX100001101%czzzoozo^
^qf1X00001101%czzzoozo^
^qf10X0001101%czzzoozo^
^qf100X001101%czzzoozo^
^qf1000X01101%czzzoozo^
^qf10000X1101%czzzoozo^
^qf100001X101%czzzoozo^
^qf1000011X01%czzzoozo^
^qf10000110X1%czzzoozo^
^qf100001101X%czzzoozo^
^qf100001101PE%oczzzoozo^
^qf100001101PE%czzzzoozo^
^qf10000110P1E%czzzzoozo^
^qf1000011P01E%czzzzoozo^
^qf100001P101E%czzzzoozo^
^qf10000P1101E%czzzzoozo^
^qf1000P01101E%czzzzoozo^
^qf100P001101E%czzzzoozo^
^qf10P0001101E%czzzzoozo^
^qf1P00001101E%czzzzoozo^
^qfP100001101E%czzzzoozo^
^qPf100001101E%czzzzoozo^
^+f100001101E%czzzzoozo^
^+f10000110E1%czzzzoozo^
^+f1000011E01%czzzzoozo^
^+f100001E101%czzzzoozo^
^+f10000E1101%czzzzoozo^
^+f1000E01101%czzzzoozo^
^+f100E001101%czzzzoozo^
^+f10E0001101%czzzzoozo^
^+f1E00001101%czzzzoozo^
^+fE100001101%czzzzoozo^
^+=100001101%czzzzoozo^
^a+=100001101%czzzzoozo^
!wm100001101%czzzzoozo^
!w1m00001101%czzzzoozo^
!w10m0001101%czzzzoozo^
!w100m001101%czzzzoozo^
!w1000m01101%czzzzoozo^
!w10000m1101%czzzzoozo^
!w100001m101%czzzzoozo^
!w1000011m01%czzzzoozo^
!w10000110m1%czzzzoozo^
!w100001101m%czzzzoozo^
!w100001101%czzzzoozo^
!1w00001101%czzzzoozo^
!01w0001101%czzzzoozo^
!001w001101%czzzzoozo^
!0001w01101%czzzzoozo^
!00001w1101%czzzzoozo^
!000011w101%czzzzoozo^
!0000111w01%czzzzoozo^
!00001101w1%czzzzoozo^
!000011011w%czzzzoozo^
!000011011w%ozzzzoozo^
!00001101b%zzzzoozo^
!0000110b1%zzzzoozo^
!000011b01%zzzzoozo^
!00001b101%zzzzoozo^
!0000b1101%zzzzoozo^
!000b01101%zzzzoozo^
!00b001101%zzzzoozo^
!0b0001101%zzzzoozo^
!b00001101%zzzzoozo^
!w00001101%zzzzoozo^
!0w0001101%zzzzoozo^
!00w001101%zzzzoozo^
!000w01101%zzzzoozo^
!0000w1101%zzzzoozo^
!00010w101%zzzzoozo^
!000110w01%zzzzoozo^
!0001100w1%zzzzoozo^
!00011010w%zzzzoozo^
!0001101b%zzzoozo^
!000110b1%zzzoozo^
!00011b01%zzzoozo^
!0001b101%zzzoozo^
!000b1101%zzzoozo^
!00b01101%zzzoozo^
!0b001101%zzzoozo^
!b0001101%zzzoozo^
!w0001101%zzzoozo^
!0w001101%zzzoozo^
!00w01101%zzzoozo^
!000w1101%zzzoozo^
!0010w101%zzzoozo^
!00110w01%zzzoozo^
!001100w1%zzzoozo^
!0011010w%zzzoozo^
!001101b%zzoozo^
!00110b1%zzoozo^
!0011b01%zzoozo^
!001b101%zzoozo^
!00b1101%zzoozo^
!0b01101%zzoozo^
!b001101%zzoozo^
!w001101%zzoozo^
!0w01101%zzoozo^
!00w1101%zzoozo^
!010w101%zzoozo^
!0110w01%zzoozo^
!01100w1%zzoozo^
!011010w%zzoozo^
!01101b%zoozo^
!0110b1%zoozo^
!011b01%zoozo^
!01b101%zoozo^
!0b1101%zoozo^
!b01101%zoozo^
!w01101%zoozo^
!0w1101%zoozo^
!10w101%zoozo^
!110w01%zoozo^
!1100w1%zoozo^
!11010w%zoozo^
!1101b%oozo^
!110b1%oozo^
!11b01%oozo^
!1b101%oozo^
!b1101%oozo^
!w1101%oozo^
!1w101%oozo^
!11w01%oozo^
!101w1%oozo^
!1011w%oozo^
!101b%ozo^
!10b1%ozo^
!1b01%ozo^
!b101%ozo^
!w101%ozo^
!1w01%ozo^
!01w1%ozo^
!011w%ozo^
!01b%zo^
!0b1%zo^
!b01%zo^
!w01%zo^
!0w1%zo^
!10w%zo^
!1b%o^
!b1%o^
!w1%o^
!1w%o^
!b%^
!w%^
correct

And for incorrect:

^10111100+11000001=100101111101%^
^10111100+1100000fX100101111101%^
^1011110qx1100000fX100101111101%^
^1011110qx1100000f1X00101111101%^
^1011110qx1100000f10X0101111101%^
^1011110qx1100000f100X101111101%^
^1011110qx1100000f1001X01111101%^
^1011110qx1100000f10010X1111101%^
^1011110qx1100000f100101X111101%^
^1011110qx1100000f1001011X11101%^
^1011110qx1100000f10010111X1101%^
^1011110qx1100000f100101111X101%^
^1011110qx1100000f1001011111X01%^
^1011110qx1100000f10010111110X1%^
^1011110qx1100000f100101111101X%^
^1011110q1x100000f100101111101X%^
^1011110q11x00000f100101111101X%^
^1011110q110x0000f100101111101X%^
^1011110q1100x000f100101111101X%^
^1011110q11000x00f100101111101X%^
^1011110q110000x0f100101111101X%^
^1011110q1100000xf100101111101X%^
^1011110q1100000fx100101111101X%^
^1011110q1100000f1x00101111101X%^
^1011110q1100000f10x0101111101X%^
^1011110q1100000f100x101111101X%^
^1011110q1100000f1001x01111101X%^
^1011110q1100000f10010x1111101X%^
^1011110q1100000f100101x111101X%^
^1011110q1100000f1001011x11101X%^
^1011110q1100000f10010111x1101X%^
^1011110q1100000f100101111x101X%^
^1011110q1100000f1001011111x01X%^
^1011110q1100000f10010111110x1X%^
^1011110q1100000f100101111101xX%^
^1011110q1100000f100101111101PE%o^
^1011110q1100000f10010111110P1E%o^
^1011110q1100000f1001011111P01E%o^
^1011110q1100000f100101111P101E%o^
^1011110q1100000f10010111P1101E%o^
^1011110q1100000f1001011P11101E%o^
^1011110q1100000f100101P111101E%o^
^1011110q1100000f10010P1111101E%o^
^1011110q1100000f1001P01111101E%o^
^1011110q1100000f100P101111101E%o^
^1011110q1100000f10P0101111101E%o^
^1011110q1100000f1P00101111101E%o^
^1011110q1100000fP100101111101E%o^
^1011110q1100000Pf100101111101E%o^
^1011110q110000P0f100101111101E%o^
^1011110q11000P00f100101111101E%o^
^1011110q1100P000f100101111101E%o^
^1011110q110P0000f100101111101E%o^
^1011110q11P00000f100101111101E%o^
^1011110q1P100000f100101111101E%o^
^1011110qP1100000f100101111101E%o^
^1011110+1100000f100101111101E%o^
^1011110+1100000f10010111110E1%o^
^1011110+1100000f1001011111E01%o^
^1011110+1100000f100101111E101%o^
^1011110+1100000f10010111E1101%o^
^1011110+1100000f1001011E11101%o^
^1011110+1100000f100101E111101%o^
^1011110+1100000f10010E1111101%o^
^1011110+1100000f1001E01111101%o^
^1011110+1100000f100E101111101%o^
^1011110+1100000f10E0101111101%o^
^1011110+1100000f1E00101111101%o^
^1011110+1100000fE100101111101%o^
^1011110+1100000=100101111101%o^
^101111qx1100000=100101111101%o^
^101111qx110000fx100101111101%o^
^101111q1x10000f1x00101111101%o^
^101111q11x0000f1x00101111101%o^
^101111q110x000f10x0101111101%o^
^101111q1100x00f100x101111101%o^
^101111q1100x00f1001x01111101%o^
^101111q11000x0f10010x1111101%o^
^101111q11000x0f100101x111101%o^
^101111q11000x0f1001011x11101%o^
^101111q11000x0f10010111x1101%o^
^101111q11000x0f100101111x101%o^
^101111q11000x0f1001011111x01%o^
^101111q110000xf10010111110x1%o^
^101111q110000xf100101111101x%o^
^101111q110000fx100101111101x%o^
^101111q110000f1x00101111101x%o^
^101111q110000f10x0101111101x%o^
^101111q110000f100x101111101x%o^
^101111q110000f1001x01111101x%o^
^101111q110000f10010x1111101x%o^
^101111q110000f100101x111101x%o^
^101111q110000f1001011x11101x%o^
^101111q110000f10010111x1101x%o^
^101111q110000f100101111x101x%o^
^101111q110000f1001011111x01x%o^
^101111q110000f10010111110x1x%o^
^101111q110000f100101111101xx%o^
^101111q110000f100101111101PE%zo^
^101111q110000f10010111110P1E%zo^
^101111q110000f1001011111P01E%zo^
^101111q110000f100101111P101E%zo^
^101111q110000f10010111P1101E%zo^
^101111q110000f1001011P11101E%zo^
^101111q110000f100101P111101E%zo^
^101111q110000f10010P1111101E%zo^
^101111q110000f1001P01111101E%zo^
^101111q110000f100P101111101E%zo^
^101111q110000f10P0101111101E%zo^
^101111q110000f1P00101111101E%zo^
^101111q110000fP100101111101E%zo^
^101111q110000Pf100101111101E%zo^
^101111q11000P0f100101111101E%zo^
^101111q1100P00f100101111101E%zo^
^101111q110P000f100101111101E%zo^
^101111q11P0000f100101111101E%zo^
^101111q1P10000f100101111101E%zo^
^101111qP110000f100101111101E%zo^
^101111+110000f100101111101E%zo^
^101111+110000f10010111110E1%zo^
^101111+110000f1001011111E01%zo^
^101111+110000f100101111E101%zo^
^101111+110000f10010111E1101%zo^
^101111+110000f1001011E11101%zo^
^101111+110000f100101E111101%zo^
^101111+110000f10010E1111101%zo^
^101111+110000f1001E01111101%zo^
^101111+110000f100E101111101%zo^
^101111+110000f10E0101111101%zo^
^101111+110000f1E00101111101%zo^
^101111+110000fE100101111101%zo^
^101111+110000=100101111101%zo^
^10111qX110000=100101111101%zo^
^10111qX11000fx100101111101%zo^
^10111q1X1000fx100101111101%zo^
^10111q11X000fx100101111101%zo^
^10111q110X00fx100101111101%zo^
^10111q1100X0fx100101111101%zo^
^10111q11000Xfx100101111101%zo^
^10111q11000Xf1x00101111101%zo^
^10111q11000Xf10x0101111101%zo^
^10111q11000Xf100x101111101%zo^
^10111q11000Xf1001x01111101%zo^
^10111q11000Xf10010x1111101%zo^
^10111q11000Xf100101x111101%zo^
^10111q11000Xf1001011x11101%zo^
^10111q11000Xf10010111x1101%zo^
^10111q11000Xf100101111x101%zo^
^10111q11000Xf1001011111x01%zo^
^10111q11000Xf10010111110x1%zo^
^10111q11000Xf100101111101x%zo^
^10111q11000fX100101111101x%zo^
^10111q11000f1X00101111101x%zo^
^10111q11000f10X0101111101x%zo^
^10111q11000f100X101111101x%zo^
^10111q11000f1001X01111101x%zo^
^10111q11000f10010X1111101x%zo^
^10111q11000f100101X111101x%zo^
^10111q11000f1001011X11101x%zo^
^10111q11000f10010111X1101x%zo^
^10111q11000f100101111X101x%zo^
^10111q11000f1001011111X01x%zo^
^10111q11000f10010111110X1x%zo^
^10111q11000f100101111101Xx%zo^
^10111q11000f100101111101PE%ozo^
^10111q11000f10010111110P1E%ozo^
^10111q11000f1001011111P01E%ozo^
^10111q11000f100101111P101E%ozo^
^10111q11000f10010111P1101E%ozo^
^10111q11000f1001011P11101E%ozo^
^10111q11000f100101P111101E%ozo^
^10111q11000f10010P1111101E%ozo^
^10111q11000f1001P01111101E%ozo^
^10111q11000f100P101111101E%ozo^
^10111q11000f10P0101111101E%ozo^
^10111q11000f1P00101111101E%ozo^
^10111q11000fP100101111101E%ozo^
^10111q11000Pf100101111101E%ozo^
^10111q1100P0f100101111101E%ozo^
^10111q110P00f100101111101E%ozo^
^10111q11P000f100101111101E%ozo^
^10111q1P1000f100101111101E%ozo^
^10111qP11000f100101111101E%ozo^
^10111+11000f100101111101E%ozo^
^10111+11000f10010111110E1%ozo^
^10111+11000f1001011111E01%ozo^
^10111+11000f100101111E101%ozo^
^10111+11000f10010111E1101%ozo^
^10111+11000f1001011E11101%ozo^
^10111+11000f100101E111101%ozo^
^10111+11000f10010E1111101%ozo^
^10111+11000f1001E01111101%ozo^
^10111+11000f100E101111101%ozo^
^10111+11000f10E0101111101%ozo^
^10111+11000f1E00101111101%ozo^
^10111+11000fE100101111101%ozo^
^10111+11000=100101111101%ozo^
^1011qX11000=100101111101%ozo^
^1011qX1100fx100101111101%ozo^
^1011q1X100fx100101111101%ozo^
^1011q11X00fx100101111101%ozo^
^1011q110X0fx100101111101%ozo^
^1011q1100Xfx100101111101%ozo^
^1011q1100Xf1x00101111101%ozo^
^1011q1100Xf10x0101111101%ozo^
^1011q1100Xf100x101111101%ozo^
^1011q1100Xf1001x01111101%ozo^
^1011q1100Xf10010x1111101%ozo^
^1011q1100Xf100101x111101%ozo^
^1011q1100Xf1001011x11101%ozo^
^1011q1100Xf10010111x1101%ozo^
^1011q1100Xf100101111x101%ozo^
^1011q1100Xf1001011111x01%ozo^
^1011q1100Xf10010111110x1%ozo^
^1011q1100Xf100101111101x%ozo^
^1011q1100fX100101111101x%ozo^
^1011q1100f1X00101111101x%ozo^
^1011q1100f10X0101111101x%ozo^
^1011q1100f100X101111101x%ozo^
^1011q1100f1001X01111101x%ozo^
^1011q1100f10010X1111101x%ozo^
^1011q1100f100101X111101x%ozo^
^1011q1100f1001011X11101x%ozo^
^1011q1100f10010111X1101x%ozo^
^1011q1100f100101111X101x%ozo^
^1011q1100f1001011111X01x%ozo^
^1011q1100f10010111110X1x%ozo^
^1011q1100f100101111101Xx%ozo^
^1011q1100f100101111101PE%oozo^
^1011q1100f10010111110P1E%oozo^
^1011q1100f1001011111P01E%oozo^
^1011q1100f100101111P101E%oozo^
^1011q1100f10010111P1101E%oozo^
^1011q1100f1001011P11101E%oozo^
^1011q1100f100101P111101E%oozo^
^1011q1100f10010P1111101E%oozo^
^1011q1100f1001P01111101E%oozo^
^1011q1100f100P101111101E%oozo^
^1011q1100f10P0101111101E%oozo^
^1011q1100f1P00101111101E%oozo^
^1011q1100fP100101111101E%oozo^
^1011q1100Pf100101111101E%oozo^
^1011q110P0f100101111101E%oozo^
^1011q11P00f100101111101E%oozo^
^1011q1P100f100101111101E%oozo^
^1011qP1100f100101111101E%oozo^
^1011+1100f100101111101E%oozo^
^1011+1100f10010111110E1%oozo^
^1011+1100f1001011111E01%oozo^
^1011+1100f100101111E101%oozo^
^1011+1100f10010111E1101%oozo^
^1011+1100f1001011E11101%oozo^
^1011+1100f100101E111101%oozo^
^1011+1100f10010E1111101%oozo^
^1011+1100f1001E01111101%oozo^
^1011+1100f100E101111101%oozo^
^1011+1100f10E0101111101%oozo^
^1011+1100f1E00101111101%oozo^
^1011+1100fE100101111101%oozo^
^1011+1100=100101111101%oozo^
^101qX1100=100101111101%oozo^
^101qX110fx100101111101%oozo^
^101q1X10fx100101111101%oozo^
^101q11X0fx100101111101%oozo^
^101q110Xfx100101111101%oozo^
^101q110Xf1x00101111101%oozo^
^101q110Xf10x0101111101%oozo^
^101q110Xf100x101111101%oozo^
^101q110Xf1001x01111101%oozo^
^101q110Xf10010x1111101%oozo^
^101q110Xf100101x111101%oozo^
^101q110Xf1001011x11101%oozo^
^101q110Xf10010111x1101%oozo^
^101q110Xf100101111x101%oozo^
^101q110Xf1001011111x01%oozo^
^101q110Xf10010111110x1%oozo^
^101q110Xf100101111101x%oozo^
^101q110fX100101111101x%oozo^
^101q110f1X00101111101x%oozo^
^101q110f10X0101111101x%oozo^
^101q110f100X101111101x%oozo^
^101q110f1001X01111101x%oozo^
^101q110f10010X1111101x%oozo^
^101q110f100101X111101x%oozo^
^101q110f1001011X11101x%oozo^
^101q110f10010111X1101x%oozo^
^101q110f100101111X101x%oozo^
^101q110f1001011111X01x%oozo^
^101q110f10010111110X1x%oozo^
^101q110f100101111101Xx%oozo^
^101q110f100101111101PE%ooozo^
^101q110f10010111110P1E%ooozo^
^101q110f1001011111P01E%ooozo^
^101q110f100101111P101E%ooozo^
^101q110f10010111P1101E%ooozo^
^101q110f1001011P11101E%ooozo^
^101q110f100101P111101E%ooozo^
^101q110f10010P1111101E%ooozo^
^101q110f1001P01111101E%ooozo^
^101q110f100P101111101E%ooozo^
^101q110f10P0101111101E%ooozo^
^101q110f1P00101111101E%ooozo^
^101q110fP100101111101E%ooozo^
^101q110Pf100101111101E%ooozo^
^101q11P0f100101111101E%ooozo^
^101q1P10f100101111101E%ooozo^
^101qP110f100101111101E%ooozo^
^101+110f100101111101E%ooozo^
^101+110f10010111110E1%ooozo^
^101+110f1001011111E01%ooozo^
^101+110f100101111E101%ooozo^
^101+110f10010111E1101%ooozo^
^101+110f1001011E11101%ooozo^
^101+110f100101E111101%ooozo^
^101+110f10010E1111101%ooozo^
^101+110f1001E01111101%ooozo^
^101+110f100E101111101%ooozo^
^101+110f10E0101111101%ooozo^
^101+110f1E00101111101%ooozo^
^101+110fE100101111101%ooozo^
^101+110=100101111101%ooozo^
^10qX110=100101111101%ooozo^
^10qX11fx100101111101%ooozo^
^10q1X1fx100101111101%ooozo^
^10q11Xfx100101111101%ooozo^
^10q11Xf1x00101111101%ooozo^
^10q11Xf10x0101111101%ooozo^
^10q11Xf100x101111101%ooozo^
^10q11Xf1001x01111101%ooozo^
^10q11Xf10010x1111101%ooozo^
^10q11Xf100101x111101%ooozo^
^10q11Xf1001011x11101%ooozo^
^10q11Xf10010111x1101%ooozo^
^10q11Xf100101111x101%ooozo^
^10q11Xf1001011111x01%ooozo^
^10q11Xf10010111110x1%ooozo^
^10q11Xf100101111101x%ooozo^
^10q11fX100101111101x%ooozo^
^10q11f1X00101111101x%ooozo^
^10q11f10X0101111101x%ooozo^
^10q11f100X101111101x%ooozo^
^10q11f1001X01111101x%ooozo^
^10q11f10010X1111101x%ooozo^
^10q11f100101X111101x%ooozo^
^10q11f1001011X11101x%ooozo^
^10q11f10010111X1101x%ooozo^
^10q11f100101111X101x%ooozo^
^10q11f1001011111X01x%ooozo^
^10q11f10010111110X1x%ooozo^
^10q11f100101111101Xx%ooozo^
^10q11f100101111101PE%oooozo^
^10q11f10010111110P1E%oooozo^
^10q11f1001011111P01E%oooozo^
^10q11f100101111P101E%oooozo^
^10q11f10010111P1101E%oooozo^
^10q11f1001011P11101E%oooozo^
^10q11f100101P111101E%oooozo^
^10q11f10010P1111101E%oooozo^
^10q11f1001P01111101E%oooozo^
^10q11f100P101111101E%oooozo^
^10q11f10P0101111101E%oooozo^
^10q11f1P00101111101E%oooozo^
^10q11fP100101111101E%oooozo^
^10q11Pf100101111101E%oooozo^
^10q1P1f100101111101E%oooozo^
^10qP11f100101111101E%oooozo^
^10+11f100101111101E%oooozo^
^10+11f10010111110E1%oooozo^
^10+11f1001011111E01%oooozo^
^10+11f100101111E101%oooozo^
^10+11f10010111E1101%oooozo^
^10+11f1001011E11101%oooozo^
^10+11f100101E111101%oooozo^
^10+11f10010E1111101%oooozo^
^10+11f1001E01111101%oooozo^
^10+11f100E101111101%oooozo^
^10+11f10E0101111101%oooozo^
^10+11f1E00101111101%oooozo^
^10+11fE100101111101%oooozo^
^10+11=100101111101%oooozo^
^10+1fX100101111101%oooozo^
^1qx1fX100101111101%oooozo^
^1qx1f1X00101111101%oooozo^
^1qx1f10X0101111101%oooozo^
^1qx1f100X101111101%oooozo^
^1qx1f1001X01111101%oooozo^
^1qx1f10010X1111101%oooozo^
^1qx1f100101X111101%oooozo^
^1qx1f1001011X11101%oooozo^
^1qx1f10010111X1101%oooozo^
^1qx1f100101111X101%oooozo^
^1qx1f1001011111X01%oooozo^
^1qx1f10010111110X1%oooozo^
^1qx1f100101111101X%oooozo^
^1q1xf100101111101X%oooozo^
^1q1fx100101111101X%oooozo^
^1q1f1x00101111101X%oooozo^
^1q1f10x0101111101X%oooozo^
^1q1f100x101111101X%oooozo^
^1q1f1001x01111101X%oooozo^
^1q1f10010x1111101X%oooozo^
^1q1f100101x111101X%oooozo^
^1q1f1001011x11101X%oooozo^
^1q1f10010111x1101X%oooozo^
^1q1f100101111x101X%oooozo^
^1q1f1001011111x01X%oooozo^
^1q1f10010111110x1X%oooozo^
^1q1f100101111101xX%oooozo^
^1q1f100101111101PE%ooooozo^
^1q1f10010111110P1E%ooooozo^
^1q1f1001011111P01E%ooooozo^
^1q1f100101111P101E%ooooozo^
^1q1f10010111P1101E%ooooozo^
^1q1f1001011P11101E%ooooozo^
^1q1f100101P111101E%ooooozo^
^1q1f10010P1111101E%ooooozo^
^1q1f1001P01111101E%ooooozo^
^1q1f100P101111101E%ooooozo^
^1q1f10P0101111101E%ooooozo^
^1q1f1P00101111101E%ooooozo^
^1q1fP100101111101E%ooooozo^
^1q1Pf100101111101E%ooooozo^
^1qP1f100101111101E%ooooozo^
^1+1f100101111101E%ooooozo^
^1+1f10010111110E1%ooooozo^
^1+1f1001011111E01%ooooozo^
^1+1f100101111E101%ooooozo^
^1+1f10010111E1101%ooooozo^
^1+1f1001011E11101%ooooozo^
^1+1f100101E111101%ooooozo^
^1+1f10010E1111101%ooooozo^
^1+1f1001E01111101%ooooozo^
^1+1f100E101111101%ooooozo^
^1+1f10E0101111101%ooooozo^
^1+1f1E00101111101%ooooozo^
^1+1fE100101111101%ooooozo^
^1+1=100101111101%ooooozo^
^qX1=100101111101%ooooozo^
^qXfX100101111101%ooooozo^
^qXf1X00101111101%ooooozo^
^qXf10X0101111101%ooooozo^
^qXf100X101111101%ooooozo^
^qXf1001X01111101%ooooozo^
^qXf10010X1111101%ooooozo^
^qXf100101X111101%ooooozo^
^qXf1001011X11101%ooooozo^
^qXf10010111X1101%ooooozo^
^qXf100101111X101%ooooozo^
^qXf1001011111X01%ooooozo^
^qXf10010111110X1%ooooozo^
^qXf100101111101X%ooooozo^
^qfX100101111101X%ooooozo^
^qf1X00101111101X%ooooozo^
^qf10X0101111101X%ooooozo^
^qf100X101111101X%ooooozo^
^qf1001X01111101X%ooooozo^
^qf10010X1111101X%ooooozo^
^qf100101X111101X%ooooozo^
^qf1001011X11101X%ooooozo^
^qf10010111X1101X%ooooozo^
^qf100101111X101X%ooooozo^
^qf1001011111X01X%ooooozo^
^qf10010111110X1X%ooooozo^
^qf100101111101XX%ooooozo^
^qf100101111101PE%czooooozo^
^qf10010111110P1E%czooooozo^
^qf1001011111P01E%czooooozo^
^qf100101111P101E%czooooozo^
^qf10010111P1101E%czooooozo^
^qf1001011P11101E%czooooozo^
^qf100101P111101E%czooooozo^
^qf10010P1111101E%czooooozo^
^qf1001P01111101E%czooooozo^
^qf100P101111101E%czooooozo^
^qf10P0101111101E%czooooozo^
^qf1P00101111101E%czooooozo^
^qfP100101111101E%czooooozo^
^qPf100101111101E%czooooozo^
^+f100101111101E%czooooozo^
^+f10010111110E1%czooooozo^
^+f1001011111E01%czooooozo^
^+f100101111E101%czooooozo^
^+f10010111E1101%czooooozo^
^+f1001011E11101%czooooozo^
^+f100101E111101%czooooozo^
^+f10010E1111101%czooooozo^
^+f1001E01111101%czooooozo^
^+f100E101111101%czooooozo^
^+f10E0101111101%czooooozo^
^+f1E00101111101%czooooozo^
^+fE100101111101%czooooozo^
^+=100101111101%czooooozo^
^a+=100101111101%czooooozo^
!wm100101111101%czooooozo^
!w1m00101111101%czooooozo^
!w10m0101111101%czooooozo^
!w100m101111101%czooooozo^
!w1001m01111101%czooooozo^
!w10010m1111101%czooooozo^
!w100101m111101%czooooozo^
!w1001011m11101%czooooozo^
!w10010111m1101%czooooozo^
!w100101111m101%czooooozo^
!w1001011111m01%czooooozo^
!w10010111110m1%czooooozo^
!w100101111101m%czooooozo^
!w100101111101%czooooozo^
!1w00101111101%czooooozo^
!01w0101111101%czooooozo^
!001w101111101%czooooozo^
!0011w01111101%czooooozo^
!00101w1111101%czooooozo^
!001011w111101%czooooozo^
!0010111w11101%czooooozo^
!00101111w1101%czooooozo^
!001011111w101%czooooozo^
!0010111111w01%czooooozo^
!00101111101w1%czooooozo^
!001011111011w%czooooozo^
!001011111011w%ozooooozo^
!00101111101b%zooooozo^
!0010111110b1%zooooozo^
!001011111b01%zooooozo^
!00101111b101%zooooozo^
!0010111b1101%zooooozo^
!001011b11101%zooooozo^
!00101b111101%zooooozo^
!0010b1111101%zooooozo^
!001b01111101%zooooozo^
!00b101111101%zooooozo^
!0b0101111101%zooooozo^
!b00101111101%zooooozo^
!w00101111101%zooooozo^
!0w0101111101%zooooozo^
!00w101111101%zooooozo^
!010w01111101%zooooozo^
!0100w1111101%zooooozo^
!01010w111101%zooooozo^
!010110w11101%zooooozo^
!0101110w1101%zooooozo^
!01011110w101%zooooozo^
!010111110w01%zooooozo^
!0101111100w1%zooooozo^
!01011111010w%zooooozo^
!0101111101b%ooooozo^
!010111110b1%ooooozo^
!01011111b01%ooooozo^
!0101111b101%ooooozo^
!010111b1101%ooooozo^
!01011b11101%ooooozo^
!0101b111101%ooooozo^
!010b1111101%ooooozo^
!01b01111101%ooooozo^
!0b101111101%ooooozo^
!b0101111101%ooooozo^
!w0101111101%ooooozo^
!0w101111101%ooooozo^
!10w01111101%ooooozo^
!100w1111101%ooooozo^
!1010w111101%ooooozo^
!10110w11101%ooooozo^
!101110w1101%ooooozo^
!1011110w101%ooooozo^
!10111110w01%ooooozo^
!101111100w1%ooooozo^
!1011111010w%ooooozo^
!101111101incorrectoooozo^
!10111110incorrectoooozo^
!1011111incorrectoooozo^
!101111incorrectoooozo^
!10111incorrectoooozo^
!1011incorrectoooozo^
!101incorrectoooozo^
!10incorrectoooozo^
!1incorrectoooozo^
!incorrectoooozo^
incorrectoooozo^
incorrectooozo^
incorrectoozo^
incorrectozo^
incorrectzo^
incorrecto^
incorrect^
incorrect

Level 6 Solution:

#test
$ => %^

#clear for incorrect
!incorrect => incorrect
0incorrect => incorrect
1incorrect => incorrect
incorrectz => incorrect
incorrecto => incorrect
incorrectc => incorrect
incorrect^ => incorrect

#do the binary math for t,o,z
w%c => w%o
zc => o
oc => cz

#walkback
qP => +
fE => =
1P => P1
0P => P0
fP => Pf
1E => E1
0E => E0

#accounting for extras on left side
0+= => qfx
1+= => qfX

#if extras on right, make extras on left
^a+=000 => !wm
^a+=00 => !wm
^a+=0 => !wm
^a+= => !wm

#send a messanger to %
m1 => 1m
m0 => 0m
m%zzz => %
m%zz => %
m%z => %
m% => %

#% => @
a+= => +=
^+ => ^a+
a+0 => 0a+
a+1 => 1a+

#initial
1+ => qX
1= => fX
0+ => qx
0= => fx

#walk through
X1 => 1X
X0 => 0X
x1 => 1x
x0 => 0x
Xf => fX
xf => fx

#calculate sum
XX% => PE%cz
xX% => PE%o
Xx% => PE%o
xx% => PE%z

#for carries
X% => PE%o
x% => PE%z

#when w, all the calculations are done, time to reverse the order
0w0 => 00w
0w1 => 10w
1w0 => 01w
1w1 => 11w
w0 => 0w
w1 => 1w

#hit the back
1w%o => b%
0w%z => b%
1w%z => incorrect
0w%o => incorrect
0b => b0
1b => b1

#b to w again
!b => !w

#their answer has too little
!w%z => incorrect
!w%c => incorrect
!w%o => incorrect
!w%^ => correct

#their answer has too many
1w%^ => incorrect
0w%^ => incorrect

Flag:

flag{wtf_tur1n9_c0mpl3t3}