#!/usr/bin/env vtm -sStart -t98+239 -b_ # ################### # A turing machine that adds two base 10 integers using R.C.Ming's VTM.pm and its vtm script. # # See base10_add.vtm.php which generated this machine. # # Jim Mahoney, March 13 2008, GPL ########## # #echo Base 10 addition # # I'll call the pieces X + Y = Z in much of following. # # At the start of operation the tape will look something like : # # _<9>8 + 2 3 9 _ _ _ _ # # e.g. X + Y # # At the end of operation the tape will look something like : # # _ 9 8 + 2 3 9 =<3>3 7 _ _ # # e.g. X + Y = Z # # The method used here is to loop over add digits pairwise, starting # at the right sides of X and Y, copying the results to Z, # and carrying the 1 to the next pairwise sum as needed. # Pretty much the way addition is taught in grade school. # # More explicitly it looks like this. # # 1. Move to far right, put down the "=" mark. # # 2. Scan left to find corresponding pairs of digits (or 0 if missing), # change to similar symbol but with "seen" status. # This first part of the main loop takes place in several pieces : # # i. Find rightmost non-processed digit of Y. # ii. Remember it in state, mark as seen, and continue leftward. # iii. Find rightmost non-processed digit of X. # iv. Remember sum in state, mark as seen. # # 3. Move to right past = to write the sum as a single digit. # Move all previous sum digits to the right one place. # # This is the second part of the main loop. # # To loop back, change state to "scan left" as in step 2; # however, if the sum was > 9, change to a "carry-the-1" state, # which will increment the either Y or X when found. # # I'll use the first few letters for "0..9 already processed" # 0 1 2 3 4 5 6 7 8 9 10 11 # a b c d e f g h i j A B ... if needed. # # 4. When no unprocessed X or Y is found, we're done. # Then just translate the digits marked "seen" back to 0...9 # # A number of special cases including # * no X digit found but Y still remaining, # * no Y digit found but X still reamining, # * "carry-the-1" state but no X or Y # will all have to be handled in the rules too. # # I'm using PHP as a templating language in what follows to generate the # many repetitive rules, when for example I need rules for all pairs (x,y) # in an x + y sum. # # To run this you'll need perl and PHP. # Then install vtm, as described in ./install_notes.txt. # Then # $ php base10_add.vtm.php > base10_add.vtm # $ chmod +x base10_add.vtm # $ ./base10_add.vtm # # This machine has # input alphabet = 0 1 2 3 4 5 6 7 8 9 + # tape alphabet = 0 1 2 3 4 5 6 7 8 9 + = a b c d e f g h i j _ # start state = Start # blank symbol = _ # number of rules = 1341 (after PHP compiles and spits 'em all out) # number of states = 90 : # Start Done CleanUp # FindY FindY_carry1 FindX_noY # FindX_0 FindX_1 ... FindX_9 # Find+_0 Find+_1 ... Find+_10 # FindAnswer_0 FindAnswer_1 ... FindAnswer_19 # ShiftAnswer_0 ShiftAnswer_1 ... ShiftAnswer_9 # ShiftAnswer_carry1_0 ShiftAnswer_carry1_1 ... ShiftAnswer_carry1_9 # SkipAnswer SkipAnswer_carry1 # WriteAnswer_0 WriteAnswer_1 ... WriteAnswer_19 # output for 98+239 : # 0: <9>8 + 2 3 9 : Start # 0: 9<8>+ 2 3 9 : Start # 0: 9 8<+>2 3 9 : Start # 0: 9 8 +<2>3 9 : Start # 0: 9 8 + 2<3>9 : Start # 0: 9 8 + 2 3<9>: Start # 0: 9 8 + 2 3 9<_>: Start # 0: 9 8 + 2 3<9>= : FindY # 0: 9 8 + 2<3>j = : Find+_9 # 0: 9 8 +<2>3 j = : Find+_9 # 0: 9 8<+>2 3 j = : Find+_9 # 0: 9<8>+ 2 3 j = : FindX_9 # 0: 9 i<+>2 3 j = : FindAnswer_17 # 0: 9 i +<2>3 j = : FindAnswer_17 # 0: 9 i + 2<3>j = : FindAnswer_17 # 0: 9 i + 2 3= : FindAnswer_17 # 0: 9 i + 2 3 j<=>: FindAnswer_17 # 0: 9 i + 2 3 j =<_>: WriteAnswer_17 # 0: 9 i + 2 3 j<=>7 : SkipAnswer_carry1 # 0: 9 i + 2 3= 7 : FindY_carry1 # 0: 9 i + 2<3>j = 7 : FindY_carry1 # 0: 9 i +<2>d j = 7 : Find+_4 # 0: 9 i<+>2 d j = 7 : Find+_4 # 0: 9+ 2 d j = 7 : FindX_4 # 0: <9>i + 2 d j = 7 : FindX_4 # 0: j+ 2 d j = 7 : FindAnswer_13 # 0: j i<+>2 d j = 7 : FindAnswer_13 # 0: j i +<2>d j = 7 : FindAnswer_13 # 0: j i + 2j = 7 : FindAnswer_13 # 0: j i + 2 d= 7 : FindAnswer_13 # 0: j i + 2 d j<=>7 : FindAnswer_13 # 0: j i + 2 d j =<7>: WriteAnswer_13 # 0: j i + 2 d j = 3<_>: ShiftAnswer_carry1_7 # 0: j i + 2 d j =<3>7 : SkipAnswer_carry1 # 0: j i + 2 d j<=>3 7 : SkipAnswer_carry1 # 0: j i + 2 d= 3 7 : FindY_carry1 # 0: j i + 2j = 3 7 : FindY_carry1 # 0: j i +<2>d j = 3 7 : FindY_carry1 # 0: j i<+>c d j = 3 7 : Find+_3 # 0: j+ c d j = 3 7 : FindX_3 # 0: i + c d j = 3 7 : FindX_3 # 1: <_>j i + c d j = 3 7 : FindX_3 # 1: _i + c d j = 3 7 : FindAnswer_3 # 1: _ j+ c d j = 3 7 : FindAnswer_3 # 1: _ j i<+>c d j = 3 7 : FindAnswer_3 # 1: _ j i +d j = 3 7 : FindAnswer_3 # 1: _ j i + cj = 3 7 : FindAnswer_3 # 1: _ j i + c d= 3 7 : FindAnswer_3 # 1: _ j i + c d j<=>3 7 : FindAnswer_3 # 1: _ j i + c d j =<3>7 : WriteAnswer_3 # 1: _ j i + c d j = 3<7>: ShiftAnswer_3 # 1: _ j i + c d j = 3 3<_>: ShiftAnswer_7 # 1: _ j i + c d j = 3<3>7 : SkipAnswer # 1: _ j i + c d j =<3>3 7 : SkipAnswer # 1: _ j i + c d j<=>3 3 7 : SkipAnswer # 1: _ j i + c d= 3 3 7 : FindY # 1: _ j i + cj = 3 3 7 : FindY # 1: _ j i +d j = 3 3 7 : FindY # 1: _ j i<+>c d j = 3 3 7 : FindY # 1: _ j+ c d j = 3 3 7 : FindX_noY # 1: _i + c d j = 3 3 7 : FindX_noY # 1: <_>j i + c d j = 3 3 7 : FindX_noY # 1: _i + c d j = 3 3 7 : CleanUp # 1: _ 9+ c d j = 3 3 7 : CleanUp # 1: _ 9 8<+>c d j = 3 3 7 : CleanUp # 1: _ 9 8 +d j = 3 3 7 : CleanUp # 1: _ 9 8 + 2j = 3 3 7 : CleanUp # 1: _ 9 8 + 2 3= 3 3 7 : CleanUp # 1: _ 9 8 + 2 3 9<=>3 3 7 : CleanUp # 1: _ 9 8 + 2 3 9 =<3>3 7 : Done # # Are we having fun yet? # ----------------------------------------------------------------- # From Start, skip past the plus sign ... Start, +, Start, +, R # ... and all the digits. (10 rules) Start, 0, Start, 0, R Start, 1, Start, 1, R Start, 2, Start, 2, R Start, 3, Start, 3, R Start, 4, Start, 4, R Start, 5, Start, 5, R Start, 6, Start, 6, R Start, 7, Start, 7, R Start, 8, Start, 8, R Start, 9, Start, 9, R # At the right tape end, write an = and begin the step 2 loop, initially without a carry. Start, _, FindY, =, L # Skip past any digits in Y already processed, which will be symbols a-j. # Same for "carry-the-1" rules . (20 rules) FindY, a, FindY, a, L FindY_carry1, a, FindY_carry1, a, L FindY, b, FindY, b, L FindY_carry1, b, FindY_carry1, b, L FindY, c, FindY, c, L FindY_carry1, c, FindY_carry1, c, L FindY, d, FindY, d, L FindY_carry1, d, FindY_carry1, d, L FindY, e, FindY, e, L FindY_carry1, e, FindY_carry1, e, L FindY, f, FindY, f, L FindY_carry1, f, FindY_carry1, f, L FindY, g, FindY, g, L FindY_carry1, g, FindY_carry1, g, L FindY, h, FindY, h, L FindY_carry1, h, FindY_carry1, h, L FindY, i, FindY, i, L FindY_carry1, i, FindY_carry1, i, L FindY, j, FindY, j, L FindY_carry1, j, FindY_carry1, j, L # Rightmost Y digit found. # Save it, write the correspoding "seen this digit" symbol, # and keep moving left, looking for X digit next. # Remember y+carry in state. (20 rules) FindY, 0, Find+_0, a, L FindY_carry1, 0, Find+_1, a, L FindY, 1, Find+_1, b, L FindY_carry1, 1, Find+_2, b, L FindY, 2, Find+_2, c, L FindY_carry1, 2, Find+_3, c, L FindY, 3, Find+_3, d, L FindY_carry1, 3, Find+_4, d, L FindY, 4, Find+_4, e, L FindY_carry1, 4, Find+_5, e, L FindY, 5, Find+_5, f, L FindY_carry1, 5, Find+_6, f, L FindY, 6, Find+_6, g, L FindY_carry1, 6, Find+_7, g, L FindY, 7, Find+_7, h, L FindY_carry1, 7, Find+_8, h, L FindY, 8, Find+_8, i, L FindY_carry1, 8, Find+_9, i, L FindY, 9, Find+_9, j, L FindY_carry1, 9, Find+_10, j, L # Skip past leftward 0-9 in Y, for any of 11 Find+_* states. (110 rules). Find+_0, 0, Find+_0, 0, L Find+_1, 0, Find+_1, 0, L Find+_2, 0, Find+_2, 0, L Find+_3, 0, Find+_3, 0, L Find+_4, 0, Find+_4, 0, L Find+_5, 0, Find+_5, 0, L Find+_6, 0, Find+_6, 0, L Find+_7, 0, Find+_7, 0, L Find+_8, 0, Find+_8, 0, L Find+_9, 0, Find+_9, 0, L Find+_10, 0, Find+_10, 0, L Find+_0, 1, Find+_0, 1, L Find+_1, 1, Find+_1, 1, L Find+_2, 1, Find+_2, 1, L Find+_3, 1, Find+_3, 1, L Find+_4, 1, Find+_4, 1, L Find+_5, 1, Find+_5, 1, L Find+_6, 1, Find+_6, 1, L Find+_7, 1, Find+_7, 1, L Find+_8, 1, Find+_8, 1, L Find+_9, 1, Find+_9, 1, L Find+_10, 1, Find+_10, 1, L Find+_0, 2, Find+_0, 2, L Find+_1, 2, Find+_1, 2, L Find+_2, 2, Find+_2, 2, L Find+_3, 2, Find+_3, 2, L Find+_4, 2, Find+_4, 2, L Find+_5, 2, Find+_5, 2, L Find+_6, 2, Find+_6, 2, L Find+_7, 2, Find+_7, 2, L Find+_8, 2, Find+_8, 2, L Find+_9, 2, Find+_9, 2, L Find+_10, 2, Find+_10, 2, L Find+_0, 3, Find+_0, 3, L Find+_1, 3, Find+_1, 3, L Find+_2, 3, Find+_2, 3, L Find+_3, 3, Find+_3, 3, L Find+_4, 3, Find+_4, 3, L Find+_5, 3, Find+_5, 3, L Find+_6, 3, Find+_6, 3, L Find+_7, 3, Find+_7, 3, L Find+_8, 3, Find+_8, 3, L Find+_9, 3, Find+_9, 3, L Find+_10, 3, Find+_10, 3, L Find+_0, 4, Find+_0, 4, L Find+_1, 4, Find+_1, 4, L Find+_2, 4, Find+_2, 4, L Find+_3, 4, Find+_3, 4, L Find+_4, 4, Find+_4, 4, L Find+_5, 4, Find+_5, 4, L Find+_6, 4, Find+_6, 4, L Find+_7, 4, Find+_7, 4, L Find+_8, 4, Find+_8, 4, L Find+_9, 4, Find+_9, 4, L Find+_10, 4, Find+_10, 4, L Find+_0, 5, Find+_0, 5, L Find+_1, 5, Find+_1, 5, L Find+_2, 5, Find+_2, 5, L Find+_3, 5, Find+_3, 5, L Find+_4, 5, Find+_4, 5, L Find+_5, 5, Find+_5, 5, L Find+_6, 5, Find+_6, 5, L Find+_7, 5, Find+_7, 5, L Find+_8, 5, Find+_8, 5, L Find+_9, 5, Find+_9, 5, L Find+_10, 5, Find+_10, 5, L Find+_0, 6, Find+_0, 6, L Find+_1, 6, Find+_1, 6, L Find+_2, 6, Find+_2, 6, L Find+_3, 6, Find+_3, 6, L Find+_4, 6, Find+_4, 6, L Find+_5, 6, Find+_5, 6, L Find+_6, 6, Find+_6, 6, L Find+_7, 6, Find+_7, 6, L Find+_8, 6, Find+_8, 6, L Find+_9, 6, Find+_9, 6, L Find+_10, 6, Find+_10, 6, L Find+_0, 7, Find+_0, 7, L Find+_1, 7, Find+_1, 7, L Find+_2, 7, Find+_2, 7, L Find+_3, 7, Find+_3, 7, L Find+_4, 7, Find+_4, 7, L Find+_5, 7, Find+_5, 7, L Find+_6, 7, Find+_6, 7, L Find+_7, 7, Find+_7, 7, L Find+_8, 7, Find+_8, 7, L Find+_9, 7, Find+_9, 7, L Find+_10, 7, Find+_10, 7, L Find+_0, 8, Find+_0, 8, L Find+_1, 8, Find+_1, 8, L Find+_2, 8, Find+_2, 8, L Find+_3, 8, Find+_3, 8, L Find+_4, 8, Find+_4, 8, L Find+_5, 8, Find+_5, 8, L Find+_6, 8, Find+_6, 8, L Find+_7, 8, Find+_7, 8, L Find+_8, 8, Find+_8, 8, L Find+_9, 8, Find+_9, 8, L Find+_10, 8, Find+_10, 8, L Find+_0, 9, Find+_0, 9, L Find+_1, 9, Find+_1, 9, L Find+_2, 9, Find+_2, 9, L Find+_3, 9, Find+_3, 9, L Find+_4, 9, Find+_4, 9, L Find+_5, 9, Find+_5, 9, L Find+_6, 9, Find+_6, 9, L Find+_7, 9, Find+_7, 9, L Find+_8, 9, Find+_8, 9, L Find+_9, 9, Find+_9, 9, L Find+_10, 9, Find+_10, 9, L # + sign found. Start looking for rightmost X digit. (11 rules: 0 ... 9+carry1) Find+_0, +, FindX_0, +, L Find+_1, +, FindX_1, +, L Find+_2, +, FindX_2, +, L Find+_3, +, FindX_3, +, L Find+_4, +, FindX_4, +, L Find+_5, +, FindX_5, +, L Find+_6, +, FindX_6, +, L Find+_7, +, FindX_7, +, L Find+_8, +, FindX_8, +, L Find+_9, +, FindX_9, +, L Find+_10, +, FindX_10, +, L # + sign found, no Y digit, no carry : set state to remember that and continue to X. FindY, +, FindX_noY, +, L # + sign found, no Y digit, carry: treat as y=1. FindY_carry1, +, FindX_1, +, L # Skip past any of 10 digits in X already processed (symbols a-j) # for any of the 11 FindX_* states. (10 digits * 11 states = 110 rules.) FindX_0, a, FindX_0, a, L FindX_1, a, FindX_1, a, L FindX_2, a, FindX_2, a, L FindX_3, a, FindX_3, a, L FindX_4, a, FindX_4, a, L FindX_5, a, FindX_5, a, L FindX_6, a, FindX_6, a, L FindX_7, a, FindX_7, a, L FindX_8, a, FindX_8, a, L FindX_9, a, FindX_9, a, L FindX_10, a, FindX_10, a, L FindX_0, b, FindX_0, b, L FindX_1, b, FindX_1, b, L FindX_2, b, FindX_2, b, L FindX_3, b, FindX_3, b, L FindX_4, b, FindX_4, b, L FindX_5, b, FindX_5, b, L FindX_6, b, FindX_6, b, L FindX_7, b, FindX_7, b, L FindX_8, b, FindX_8, b, L FindX_9, b, FindX_9, b, L FindX_10, b, FindX_10, b, L FindX_0, c, FindX_0, c, L FindX_1, c, FindX_1, c, L FindX_2, c, FindX_2, c, L FindX_3, c, FindX_3, c, L FindX_4, c, FindX_4, c, L FindX_5, c, FindX_5, c, L FindX_6, c, FindX_6, c, L FindX_7, c, FindX_7, c, L FindX_8, c, FindX_8, c, L FindX_9, c, FindX_9, c, L FindX_10, c, FindX_10, c, L FindX_0, d, FindX_0, d, L FindX_1, d, FindX_1, d, L FindX_2, d, FindX_2, d, L FindX_3, d, FindX_3, d, L FindX_4, d, FindX_4, d, L FindX_5, d, FindX_5, d, L FindX_6, d, FindX_6, d, L FindX_7, d, FindX_7, d, L FindX_8, d, FindX_8, d, L FindX_9, d, FindX_9, d, L FindX_10, d, FindX_10, d, L FindX_0, e, FindX_0, e, L FindX_1, e, FindX_1, e, L FindX_2, e, FindX_2, e, L FindX_3, e, FindX_3, e, L FindX_4, e, FindX_4, e, L FindX_5, e, FindX_5, e, L FindX_6, e, FindX_6, e, L FindX_7, e, FindX_7, e, L FindX_8, e, FindX_8, e, L FindX_9, e, FindX_9, e, L FindX_10, e, FindX_10, e, L FindX_0, f, FindX_0, f, L FindX_1, f, FindX_1, f, L FindX_2, f, FindX_2, f, L FindX_3, f, FindX_3, f, L FindX_4, f, FindX_4, f, L FindX_5, f, FindX_5, f, L FindX_6, f, FindX_6, f, L FindX_7, f, FindX_7, f, L FindX_8, f, FindX_8, f, L FindX_9, f, FindX_9, f, L FindX_10, f, FindX_10, f, L FindX_0, g, FindX_0, g, L FindX_1, g, FindX_1, g, L FindX_2, g, FindX_2, g, L FindX_3, g, FindX_3, g, L FindX_4, g, FindX_4, g, L FindX_5, g, FindX_5, g, L FindX_6, g, FindX_6, g, L FindX_7, g, FindX_7, g, L FindX_8, g, FindX_8, g, L FindX_9, g, FindX_9, g, L FindX_10, g, FindX_10, g, L FindX_0, h, FindX_0, h, L FindX_1, h, FindX_1, h, L FindX_2, h, FindX_2, h, L FindX_3, h, FindX_3, h, L FindX_4, h, FindX_4, h, L FindX_5, h, FindX_5, h, L FindX_6, h, FindX_6, h, L FindX_7, h, FindX_7, h, L FindX_8, h, FindX_8, h, L FindX_9, h, FindX_9, h, L FindX_10, h, FindX_10, h, L FindX_0, i, FindX_0, i, L FindX_1, i, FindX_1, i, L FindX_2, i, FindX_2, i, L FindX_3, i, FindX_3, i, L FindX_4, i, FindX_4, i, L FindX_5, i, FindX_5, i, L FindX_6, i, FindX_6, i, L FindX_7, i, FindX_7, i, L FindX_8, i, FindX_8, i, L FindX_9, i, FindX_9, i, L FindX_10, i, FindX_10, i, L FindX_0, j, FindX_0, j, L FindX_1, j, FindX_1, j, L FindX_2, j, FindX_2, j, L FindX_3, j, FindX_3, j, L FindX_4, j, FindX_4, j, L FindX_5, j, FindX_5, j, L FindX_6, j, FindX_6, j, L FindX_7, j, FindX_7, j, L FindX_8, j, FindX_8, j, L FindX_9, j, FindX_9, j, L FindX_10, j, FindX_10, j, L # Skip past any of 10 digits in X already processed (symbols a-j) for FindX_noY. (10 rules) FindX_noY, a, FindX_noY, a, L FindX_noY, b, FindX_noY, b, L FindX_noY, c, FindX_noY, c, L FindX_noY, d, FindX_noY, d, L FindX_noY, e, FindX_noY, e, L FindX_noY, f, FindX_noY, f, L FindX_noY, g, FindX_noY, g, L FindX_noY, h, FindX_noY, h, L FindX_noY, i, FindX_noY, i, L FindX_noY, j, FindX_noY, j, L # Rightmost X digit found. # Add it to the y+carry saved in state, write corresponding "seen it" symbol, # change to FindAnswer_* state, and start moving right looking for =. # (110 rules again.) FindX_0, 0, FindAnswer_0, a, R FindX_1, 0, FindAnswer_1, a, R FindX_2, 0, FindAnswer_2, a, R FindX_3, 0, FindAnswer_3, a, R FindX_4, 0, FindAnswer_4, a, R FindX_5, 0, FindAnswer_5, a, R FindX_6, 0, FindAnswer_6, a, R FindX_7, 0, FindAnswer_7, a, R FindX_8, 0, FindAnswer_8, a, R FindX_9, 0, FindAnswer_9, a, R FindX_10, 0, FindAnswer_10, a, R FindX_0, 1, FindAnswer_1, b, R FindX_1, 1, FindAnswer_2, b, R FindX_2, 1, FindAnswer_3, b, R FindX_3, 1, FindAnswer_4, b, R FindX_4, 1, FindAnswer_5, b, R FindX_5, 1, FindAnswer_6, b, R FindX_6, 1, FindAnswer_7, b, R FindX_7, 1, FindAnswer_8, b, R FindX_8, 1, FindAnswer_9, b, R FindX_9, 1, FindAnswer_10, b, R FindX_10, 1, FindAnswer_11, b, R FindX_0, 2, FindAnswer_2, c, R FindX_1, 2, FindAnswer_3, c, R FindX_2, 2, FindAnswer_4, c, R FindX_3, 2, FindAnswer_5, c, R FindX_4, 2, FindAnswer_6, c, R FindX_5, 2, FindAnswer_7, c, R FindX_6, 2, FindAnswer_8, c, R FindX_7, 2, FindAnswer_9, c, R FindX_8, 2, FindAnswer_10, c, R FindX_9, 2, FindAnswer_11, c, R FindX_10, 2, FindAnswer_12, c, R FindX_0, 3, FindAnswer_3, d, R FindX_1, 3, FindAnswer_4, d, R FindX_2, 3, FindAnswer_5, d, R FindX_3, 3, FindAnswer_6, d, R FindX_4, 3, FindAnswer_7, d, R FindX_5, 3, FindAnswer_8, d, R FindX_6, 3, FindAnswer_9, d, R FindX_7, 3, FindAnswer_10, d, R FindX_8, 3, FindAnswer_11, d, R FindX_9, 3, FindAnswer_12, d, R FindX_10, 3, FindAnswer_13, d, R FindX_0, 4, FindAnswer_4, e, R FindX_1, 4, FindAnswer_5, e, R FindX_2, 4, FindAnswer_6, e, R FindX_3, 4, FindAnswer_7, e, R FindX_4, 4, FindAnswer_8, e, R FindX_5, 4, FindAnswer_9, e, R FindX_6, 4, FindAnswer_10, e, R FindX_7, 4, FindAnswer_11, e, R FindX_8, 4, FindAnswer_12, e, R FindX_9, 4, FindAnswer_13, e, R FindX_10, 4, FindAnswer_14, e, R FindX_0, 5, FindAnswer_5, f, R FindX_1, 5, FindAnswer_6, f, R FindX_2, 5, FindAnswer_7, f, R FindX_3, 5, FindAnswer_8, f, R FindX_4, 5, FindAnswer_9, f, R FindX_5, 5, FindAnswer_10, f, R FindX_6, 5, FindAnswer_11, f, R FindX_7, 5, FindAnswer_12, f, R FindX_8, 5, FindAnswer_13, f, R FindX_9, 5, FindAnswer_14, f, R FindX_10, 5, FindAnswer_15, f, R FindX_0, 6, FindAnswer_6, g, R FindX_1, 6, FindAnswer_7, g, R FindX_2, 6, FindAnswer_8, g, R FindX_3, 6, FindAnswer_9, g, R FindX_4, 6, FindAnswer_10, g, R FindX_5, 6, FindAnswer_11, g, R FindX_6, 6, FindAnswer_12, g, R FindX_7, 6, FindAnswer_13, g, R FindX_8, 6, FindAnswer_14, g, R FindX_9, 6, FindAnswer_15, g, R FindX_10, 6, FindAnswer_16, g, R FindX_0, 7, FindAnswer_7, h, R FindX_1, 7, FindAnswer_8, h, R FindX_2, 7, FindAnswer_9, h, R FindX_3, 7, FindAnswer_10, h, R FindX_4, 7, FindAnswer_11, h, R FindX_5, 7, FindAnswer_12, h, R FindX_6, 7, FindAnswer_13, h, R FindX_7, 7, FindAnswer_14, h, R FindX_8, 7, FindAnswer_15, h, R FindX_9, 7, FindAnswer_16, h, R FindX_10, 7, FindAnswer_17, h, R FindX_0, 8, FindAnswer_8, i, R FindX_1, 8, FindAnswer_9, i, R FindX_2, 8, FindAnswer_10, i, R FindX_3, 8, FindAnswer_11, i, R FindX_4, 8, FindAnswer_12, i, R FindX_5, 8, FindAnswer_13, i, R FindX_6, 8, FindAnswer_14, i, R FindX_7, 8, FindAnswer_15, i, R FindX_8, 8, FindAnswer_16, i, R FindX_9, 8, FindAnswer_17, i, R FindX_10, 8, FindAnswer_18, i, R FindX_0, 9, FindAnswer_9, j, R FindX_1, 9, FindAnswer_10, j, R FindX_2, 9, FindAnswer_11, j, R FindX_3, 9, FindAnswer_12, j, R FindX_4, 9, FindAnswer_13, j, R FindX_5, 9, FindAnswer_14, j, R FindX_6, 9, FindAnswer_15, j, R FindX_7, 9, FindAnswer_16, j, R FindX_8, 9, FindAnswer_17, j, R FindX_9, 9, FindAnswer_18, j, R FindX_10, 9, FindAnswer_19, j, R # Rightmost X digit found but no Y digit, and no carry. Treat as y=0. (10 rules) FindX_noY, 0, FindAnswer_0, a, R FindX_noY, 1, FindAnswer_1, b, R FindX_noY, 2, FindAnswer_2, c, R FindX_noY, 3, FindAnswer_3, d, R FindX_noY, 4, FindAnswer_4, e, R FindX_noY, 5, FindAnswer_5, f, R FindX_noY, 6, FindAnswer_6, g, R FindX_noY, 7, FindAnswer_7, h, R FindX_noY, 8, FindAnswer_8, i, R FindX_noY, 9, FindAnswer_9, j, R # No X digit found, but there is a Y digit or carry. Treat as x=0. (11 rules) FindX_0, _, FindAnswer_0, _, R FindX_1, _, FindAnswer_1, _, R FindX_2, _, FindAnswer_2, _, R FindX_3, _, FindAnswer_3, _, R FindX_4, _, FindAnswer_4, _, R FindX_5, _, FindAnswer_5, _, R FindX_6, _, FindAnswer_6, _, R FindX_7, _, FindAnswer_7, _, R FindX_8, _, FindAnswer_8, _, R FindX_9, _, FindAnswer_9, _, R FindX_10, _, FindAnswer_10, _, R # No X digit found, no Y digit saved, no carry. # So we're just about done. # Move right converting letters in X and Y back to digits, and halt at = . FindX_noY, _, CleanUp, _, R # Move past + during CleanUp. CleanUp, +, CleanUp, +, R # Convert letters to numbers during cleanup. (10 rules) CleanUp, a, CleanUp, 0, R CleanUp, b, CleanUp, 1, R CleanUp, c, CleanUp, 2, R CleanUp, d, CleanUp, 3, R CleanUp, e, CleanUp, 4, R CleanUp, f, CleanUp, 5, R CleanUp, g, CleanUp, 6, R CleanUp, h, CleanUp, 7, R CleanUp, i, CleanUp, 8, R CleanUp, j, CleanUp, 9, R # Halt when we hit = during cleanup CleanUp, =, Done, =, R # FindAnswer_n (n=x+y can be 19 different values) moves right # past digits or letters (20 of 'em). (19*20 = 380 rules) FindAnswer_0, 0, FindAnswer_0, 0, R FindAnswer_0, 1, FindAnswer_0, 1, R FindAnswer_0, 2, FindAnswer_0, 2, R FindAnswer_0, 3, FindAnswer_0, 3, R FindAnswer_0, 4, FindAnswer_0, 4, R FindAnswer_0, 5, FindAnswer_0, 5, R FindAnswer_0, 6, FindAnswer_0, 6, R FindAnswer_0, 7, FindAnswer_0, 7, R FindAnswer_0, 8, FindAnswer_0, 8, R FindAnswer_0, 9, FindAnswer_0, 9, R FindAnswer_0, a, FindAnswer_0, a, R FindAnswer_0, b, FindAnswer_0, b, R FindAnswer_0, c, FindAnswer_0, c, R FindAnswer_0, d, FindAnswer_0, d, R FindAnswer_0, e, FindAnswer_0, e, R FindAnswer_0, f, FindAnswer_0, f, R FindAnswer_0, g, FindAnswer_0, g, R FindAnswer_0, h, FindAnswer_0, h, R FindAnswer_0, i, FindAnswer_0, i, R FindAnswer_0, j, FindAnswer_0, j, R FindAnswer_1, 0, FindAnswer_1, 0, R FindAnswer_1, 1, FindAnswer_1, 1, R FindAnswer_1, 2, FindAnswer_1, 2, R FindAnswer_1, 3, FindAnswer_1, 3, R FindAnswer_1, 4, FindAnswer_1, 4, R FindAnswer_1, 5, FindAnswer_1, 5, R FindAnswer_1, 6, FindAnswer_1, 6, R FindAnswer_1, 7, FindAnswer_1, 7, R FindAnswer_1, 8, FindAnswer_1, 8, R FindAnswer_1, 9, FindAnswer_1, 9, R FindAnswer_1, a, FindAnswer_1, a, R FindAnswer_1, b, FindAnswer_1, b, R FindAnswer_1, c, FindAnswer_1, c, R FindAnswer_1, d, FindAnswer_1, d, R FindAnswer_1, e, FindAnswer_1, e, R FindAnswer_1, f, FindAnswer_1, f, R FindAnswer_1, g, FindAnswer_1, g, R FindAnswer_1, h, FindAnswer_1, h, R FindAnswer_1, i, FindAnswer_1, i, R FindAnswer_1, j, FindAnswer_1, j, R FindAnswer_2, 0, FindAnswer_2, 0, R FindAnswer_2, 1, FindAnswer_2, 1, R FindAnswer_2, 2, FindAnswer_2, 2, R FindAnswer_2, 3, FindAnswer_2, 3, R FindAnswer_2, 4, FindAnswer_2, 4, R FindAnswer_2, 5, FindAnswer_2, 5, R FindAnswer_2, 6, FindAnswer_2, 6, R FindAnswer_2, 7, FindAnswer_2, 7, R FindAnswer_2, 8, FindAnswer_2, 8, R FindAnswer_2, 9, FindAnswer_2, 9, R FindAnswer_2, a, FindAnswer_2, a, R FindAnswer_2, b, FindAnswer_2, b, R FindAnswer_2, c, FindAnswer_2, c, R FindAnswer_2, d, FindAnswer_2, d, R FindAnswer_2, e, FindAnswer_2, e, R FindAnswer_2, f, FindAnswer_2, f, R FindAnswer_2, g, FindAnswer_2, g, R FindAnswer_2, h, FindAnswer_2, h, R FindAnswer_2, i, FindAnswer_2, i, R FindAnswer_2, j, FindAnswer_2, j, R FindAnswer_3, 0, FindAnswer_3, 0, R FindAnswer_3, 1, FindAnswer_3, 1, R FindAnswer_3, 2, FindAnswer_3, 2, R FindAnswer_3, 3, FindAnswer_3, 3, R FindAnswer_3, 4, FindAnswer_3, 4, R FindAnswer_3, 5, FindAnswer_3, 5, R FindAnswer_3, 6, FindAnswer_3, 6, R FindAnswer_3, 7, FindAnswer_3, 7, R FindAnswer_3, 8, FindAnswer_3, 8, R FindAnswer_3, 9, FindAnswer_3, 9, R FindAnswer_3, a, FindAnswer_3, a, R FindAnswer_3, b, FindAnswer_3, b, R FindAnswer_3, c, FindAnswer_3, c, R FindAnswer_3, d, FindAnswer_3, d, R FindAnswer_3, e, FindAnswer_3, e, R FindAnswer_3, f, FindAnswer_3, f, R FindAnswer_3, g, FindAnswer_3, g, R FindAnswer_3, h, FindAnswer_3, h, R FindAnswer_3, i, FindAnswer_3, i, R FindAnswer_3, j, FindAnswer_3, j, R FindAnswer_4, 0, FindAnswer_4, 0, R FindAnswer_4, 1, FindAnswer_4, 1, R FindAnswer_4, 2, FindAnswer_4, 2, R FindAnswer_4, 3, FindAnswer_4, 3, R FindAnswer_4, 4, FindAnswer_4, 4, R FindAnswer_4, 5, FindAnswer_4, 5, R FindAnswer_4, 6, FindAnswer_4, 6, R FindAnswer_4, 7, FindAnswer_4, 7, R FindAnswer_4, 8, FindAnswer_4, 8, R FindAnswer_4, 9, FindAnswer_4, 9, R FindAnswer_4, a, FindAnswer_4, a, R FindAnswer_4, b, FindAnswer_4, b, R FindAnswer_4, c, FindAnswer_4, c, R FindAnswer_4, d, FindAnswer_4, d, R FindAnswer_4, e, FindAnswer_4, e, R FindAnswer_4, f, FindAnswer_4, f, R FindAnswer_4, g, FindAnswer_4, g, R FindAnswer_4, h, FindAnswer_4, h, R FindAnswer_4, i, FindAnswer_4, i, R FindAnswer_4, j, FindAnswer_4, j, R FindAnswer_5, 0, FindAnswer_5, 0, R FindAnswer_5, 1, FindAnswer_5, 1, R FindAnswer_5, 2, FindAnswer_5, 2, R FindAnswer_5, 3, FindAnswer_5, 3, R FindAnswer_5, 4, FindAnswer_5, 4, R FindAnswer_5, 5, FindAnswer_5, 5, R FindAnswer_5, 6, FindAnswer_5, 6, R FindAnswer_5, 7, FindAnswer_5, 7, R FindAnswer_5, 8, FindAnswer_5, 8, R FindAnswer_5, 9, FindAnswer_5, 9, R FindAnswer_5, a, FindAnswer_5, a, R FindAnswer_5, b, FindAnswer_5, b, R FindAnswer_5, c, FindAnswer_5, c, R FindAnswer_5, d, FindAnswer_5, d, R FindAnswer_5, e, FindAnswer_5, e, R FindAnswer_5, f, FindAnswer_5, f, R FindAnswer_5, g, FindAnswer_5, g, R FindAnswer_5, h, FindAnswer_5, h, R FindAnswer_5, i, FindAnswer_5, i, R FindAnswer_5, j, FindAnswer_5, j, R FindAnswer_6, 0, FindAnswer_6, 0, R FindAnswer_6, 1, FindAnswer_6, 1, R FindAnswer_6, 2, FindAnswer_6, 2, R FindAnswer_6, 3, FindAnswer_6, 3, R FindAnswer_6, 4, FindAnswer_6, 4, R FindAnswer_6, 5, FindAnswer_6, 5, R FindAnswer_6, 6, FindAnswer_6, 6, R FindAnswer_6, 7, FindAnswer_6, 7, R FindAnswer_6, 8, FindAnswer_6, 8, R FindAnswer_6, 9, FindAnswer_6, 9, R FindAnswer_6, a, FindAnswer_6, a, R FindAnswer_6, b, FindAnswer_6, b, R FindAnswer_6, c, FindAnswer_6, c, R FindAnswer_6, d, FindAnswer_6, d, R FindAnswer_6, e, FindAnswer_6, e, R FindAnswer_6, f, FindAnswer_6, f, R FindAnswer_6, g, FindAnswer_6, g, R FindAnswer_6, h, FindAnswer_6, h, R FindAnswer_6, i, FindAnswer_6, i, R FindAnswer_6, j, FindAnswer_6, j, R FindAnswer_7, 0, FindAnswer_7, 0, R FindAnswer_7, 1, FindAnswer_7, 1, R FindAnswer_7, 2, FindAnswer_7, 2, R FindAnswer_7, 3, FindAnswer_7, 3, R FindAnswer_7, 4, FindAnswer_7, 4, R FindAnswer_7, 5, FindAnswer_7, 5, R FindAnswer_7, 6, FindAnswer_7, 6, R FindAnswer_7, 7, FindAnswer_7, 7, R FindAnswer_7, 8, FindAnswer_7, 8, R FindAnswer_7, 9, FindAnswer_7, 9, R FindAnswer_7, a, FindAnswer_7, a, R FindAnswer_7, b, FindAnswer_7, b, R FindAnswer_7, c, FindAnswer_7, c, R FindAnswer_7, d, FindAnswer_7, d, R FindAnswer_7, e, FindAnswer_7, e, R FindAnswer_7, f, FindAnswer_7, f, R FindAnswer_7, g, FindAnswer_7, g, R FindAnswer_7, h, FindAnswer_7, h, R FindAnswer_7, i, FindAnswer_7, i, R FindAnswer_7, j, FindAnswer_7, j, R FindAnswer_8, 0, FindAnswer_8, 0, R FindAnswer_8, 1, FindAnswer_8, 1, R FindAnswer_8, 2, FindAnswer_8, 2, R FindAnswer_8, 3, FindAnswer_8, 3, R FindAnswer_8, 4, FindAnswer_8, 4, R FindAnswer_8, 5, FindAnswer_8, 5, R FindAnswer_8, 6, FindAnswer_8, 6, R FindAnswer_8, 7, FindAnswer_8, 7, R FindAnswer_8, 8, FindAnswer_8, 8, R FindAnswer_8, 9, FindAnswer_8, 9, R FindAnswer_8, a, FindAnswer_8, a, R FindAnswer_8, b, FindAnswer_8, b, R FindAnswer_8, c, FindAnswer_8, c, R FindAnswer_8, d, FindAnswer_8, d, R FindAnswer_8, e, FindAnswer_8, e, R FindAnswer_8, f, FindAnswer_8, f, R FindAnswer_8, g, FindAnswer_8, g, R FindAnswer_8, h, FindAnswer_8, h, R FindAnswer_8, i, FindAnswer_8, i, R FindAnswer_8, j, FindAnswer_8, j, R FindAnswer_9, 0, FindAnswer_9, 0, R FindAnswer_9, 1, FindAnswer_9, 1, R FindAnswer_9, 2, FindAnswer_9, 2, R FindAnswer_9, 3, FindAnswer_9, 3, R FindAnswer_9, 4, FindAnswer_9, 4, R FindAnswer_9, 5, FindAnswer_9, 5, R FindAnswer_9, 6, FindAnswer_9, 6, R FindAnswer_9, 7, FindAnswer_9, 7, R FindAnswer_9, 8, FindAnswer_9, 8, R FindAnswer_9, 9, FindAnswer_9, 9, R FindAnswer_9, a, FindAnswer_9, a, R FindAnswer_9, b, FindAnswer_9, b, R FindAnswer_9, c, FindAnswer_9, c, R FindAnswer_9, d, FindAnswer_9, d, R FindAnswer_9, e, FindAnswer_9, e, R FindAnswer_9, f, FindAnswer_9, f, R FindAnswer_9, g, FindAnswer_9, g, R FindAnswer_9, h, FindAnswer_9, h, R FindAnswer_9, i, FindAnswer_9, i, R FindAnswer_9, j, FindAnswer_9, j, R FindAnswer_10, 0, FindAnswer_10, 0, R FindAnswer_10, 1, FindAnswer_10, 1, R FindAnswer_10, 2, FindAnswer_10, 2, R FindAnswer_10, 3, FindAnswer_10, 3, R FindAnswer_10, 4, FindAnswer_10, 4, R FindAnswer_10, 5, FindAnswer_10, 5, R FindAnswer_10, 6, FindAnswer_10, 6, R FindAnswer_10, 7, FindAnswer_10, 7, R FindAnswer_10, 8, FindAnswer_10, 8, R FindAnswer_10, 9, FindAnswer_10, 9, R FindAnswer_10, a, FindAnswer_10, a, R FindAnswer_10, b, FindAnswer_10, b, R FindAnswer_10, c, FindAnswer_10, c, R FindAnswer_10, d, FindAnswer_10, d, R FindAnswer_10, e, FindAnswer_10, e, R FindAnswer_10, f, FindAnswer_10, f, R FindAnswer_10, g, FindAnswer_10, g, R FindAnswer_10, h, FindAnswer_10, h, R FindAnswer_10, i, FindAnswer_10, i, R FindAnswer_10, j, FindAnswer_10, j, R FindAnswer_11, 0, FindAnswer_11, 0, R FindAnswer_11, 1, FindAnswer_11, 1, R FindAnswer_11, 2, FindAnswer_11, 2, R FindAnswer_11, 3, FindAnswer_11, 3, R FindAnswer_11, 4, FindAnswer_11, 4, R FindAnswer_11, 5, FindAnswer_11, 5, R FindAnswer_11, 6, FindAnswer_11, 6, R FindAnswer_11, 7, FindAnswer_11, 7, R FindAnswer_11, 8, FindAnswer_11, 8, R FindAnswer_11, 9, FindAnswer_11, 9, R FindAnswer_11, a, FindAnswer_11, a, R FindAnswer_11, b, FindAnswer_11, b, R FindAnswer_11, c, FindAnswer_11, c, R FindAnswer_11, d, FindAnswer_11, d, R FindAnswer_11, e, FindAnswer_11, e, R FindAnswer_11, f, FindAnswer_11, f, R FindAnswer_11, g, FindAnswer_11, g, R FindAnswer_11, h, FindAnswer_11, h, R FindAnswer_11, i, FindAnswer_11, i, R FindAnswer_11, j, FindAnswer_11, j, R FindAnswer_12, 0, FindAnswer_12, 0, R FindAnswer_12, 1, FindAnswer_12, 1, R FindAnswer_12, 2, FindAnswer_12, 2, R FindAnswer_12, 3, FindAnswer_12, 3, R FindAnswer_12, 4, FindAnswer_12, 4, R FindAnswer_12, 5, FindAnswer_12, 5, R FindAnswer_12, 6, FindAnswer_12, 6, R FindAnswer_12, 7, FindAnswer_12, 7, R FindAnswer_12, 8, FindAnswer_12, 8, R FindAnswer_12, 9, FindAnswer_12, 9, R FindAnswer_12, a, FindAnswer_12, a, R FindAnswer_12, b, FindAnswer_12, b, R FindAnswer_12, c, FindAnswer_12, c, R FindAnswer_12, d, FindAnswer_12, d, R FindAnswer_12, e, FindAnswer_12, e, R FindAnswer_12, f, FindAnswer_12, f, R FindAnswer_12, g, FindAnswer_12, g, R FindAnswer_12, h, FindAnswer_12, h, R FindAnswer_12, i, FindAnswer_12, i, R FindAnswer_12, j, FindAnswer_12, j, R FindAnswer_13, 0, FindAnswer_13, 0, R FindAnswer_13, 1, FindAnswer_13, 1, R FindAnswer_13, 2, FindAnswer_13, 2, R FindAnswer_13, 3, FindAnswer_13, 3, R FindAnswer_13, 4, FindAnswer_13, 4, R FindAnswer_13, 5, FindAnswer_13, 5, R FindAnswer_13, 6, FindAnswer_13, 6, R FindAnswer_13, 7, FindAnswer_13, 7, R FindAnswer_13, 8, FindAnswer_13, 8, R FindAnswer_13, 9, FindAnswer_13, 9, R FindAnswer_13, a, FindAnswer_13, a, R FindAnswer_13, b, FindAnswer_13, b, R FindAnswer_13, c, FindAnswer_13, c, R FindAnswer_13, d, FindAnswer_13, d, R FindAnswer_13, e, FindAnswer_13, e, R FindAnswer_13, f, FindAnswer_13, f, R FindAnswer_13, g, FindAnswer_13, g, R FindAnswer_13, h, FindAnswer_13, h, R FindAnswer_13, i, FindAnswer_13, i, R FindAnswer_13, j, FindAnswer_13, j, R FindAnswer_14, 0, FindAnswer_14, 0, R FindAnswer_14, 1, FindAnswer_14, 1, R FindAnswer_14, 2, FindAnswer_14, 2, R FindAnswer_14, 3, FindAnswer_14, 3, R FindAnswer_14, 4, FindAnswer_14, 4, R FindAnswer_14, 5, FindAnswer_14, 5, R FindAnswer_14, 6, FindAnswer_14, 6, R FindAnswer_14, 7, FindAnswer_14, 7, R FindAnswer_14, 8, FindAnswer_14, 8, R FindAnswer_14, 9, FindAnswer_14, 9, R FindAnswer_14, a, FindAnswer_14, a, R FindAnswer_14, b, FindAnswer_14, b, R FindAnswer_14, c, FindAnswer_14, c, R FindAnswer_14, d, FindAnswer_14, d, R FindAnswer_14, e, FindAnswer_14, e, R FindAnswer_14, f, FindAnswer_14, f, R FindAnswer_14, g, FindAnswer_14, g, R FindAnswer_14, h, FindAnswer_14, h, R FindAnswer_14, i, FindAnswer_14, i, R FindAnswer_14, j, FindAnswer_14, j, R FindAnswer_15, 0, FindAnswer_15, 0, R FindAnswer_15, 1, FindAnswer_15, 1, R FindAnswer_15, 2, FindAnswer_15, 2, R FindAnswer_15, 3, FindAnswer_15, 3, R FindAnswer_15, 4, FindAnswer_15, 4, R FindAnswer_15, 5, FindAnswer_15, 5, R FindAnswer_15, 6, FindAnswer_15, 6, R FindAnswer_15, 7, FindAnswer_15, 7, R FindAnswer_15, 8, FindAnswer_15, 8, R FindAnswer_15, 9, FindAnswer_15, 9, R FindAnswer_15, a, FindAnswer_15, a, R FindAnswer_15, b, FindAnswer_15, b, R FindAnswer_15, c, FindAnswer_15, c, R FindAnswer_15, d, FindAnswer_15, d, R FindAnswer_15, e, FindAnswer_15, e, R FindAnswer_15, f, FindAnswer_15, f, R FindAnswer_15, g, FindAnswer_15, g, R FindAnswer_15, h, FindAnswer_15, h, R FindAnswer_15, i, FindAnswer_15, i, R FindAnswer_15, j, FindAnswer_15, j, R FindAnswer_16, 0, FindAnswer_16, 0, R FindAnswer_16, 1, FindAnswer_16, 1, R FindAnswer_16, 2, FindAnswer_16, 2, R FindAnswer_16, 3, FindAnswer_16, 3, R FindAnswer_16, 4, FindAnswer_16, 4, R FindAnswer_16, 5, FindAnswer_16, 5, R FindAnswer_16, 6, FindAnswer_16, 6, R FindAnswer_16, 7, FindAnswer_16, 7, R FindAnswer_16, 8, FindAnswer_16, 8, R FindAnswer_16, 9, FindAnswer_16, 9, R FindAnswer_16, a, FindAnswer_16, a, R FindAnswer_16, b, FindAnswer_16, b, R FindAnswer_16, c, FindAnswer_16, c, R FindAnswer_16, d, FindAnswer_16, d, R FindAnswer_16, e, FindAnswer_16, e, R FindAnswer_16, f, FindAnswer_16, f, R FindAnswer_16, g, FindAnswer_16, g, R FindAnswer_16, h, FindAnswer_16, h, R FindAnswer_16, i, FindAnswer_16, i, R FindAnswer_16, j, FindAnswer_16, j, R FindAnswer_17, 0, FindAnswer_17, 0, R FindAnswer_17, 1, FindAnswer_17, 1, R FindAnswer_17, 2, FindAnswer_17, 2, R FindAnswer_17, 3, FindAnswer_17, 3, R FindAnswer_17, 4, FindAnswer_17, 4, R FindAnswer_17, 5, FindAnswer_17, 5, R FindAnswer_17, 6, FindAnswer_17, 6, R FindAnswer_17, 7, FindAnswer_17, 7, R FindAnswer_17, 8, FindAnswer_17, 8, R FindAnswer_17, 9, FindAnswer_17, 9, R FindAnswer_17, a, FindAnswer_17, a, R FindAnswer_17, b, FindAnswer_17, b, R FindAnswer_17, c, FindAnswer_17, c, R FindAnswer_17, d, FindAnswer_17, d, R FindAnswer_17, e, FindAnswer_17, e, R FindAnswer_17, f, FindAnswer_17, f, R FindAnswer_17, g, FindAnswer_17, g, R FindAnswer_17, h, FindAnswer_17, h, R FindAnswer_17, i, FindAnswer_17, i, R FindAnswer_17, j, FindAnswer_17, j, R FindAnswer_18, 0, FindAnswer_18, 0, R FindAnswer_18, 1, FindAnswer_18, 1, R FindAnswer_18, 2, FindAnswer_18, 2, R FindAnswer_18, 3, FindAnswer_18, 3, R FindAnswer_18, 4, FindAnswer_18, 4, R FindAnswer_18, 5, FindAnswer_18, 5, R FindAnswer_18, 6, FindAnswer_18, 6, R FindAnswer_18, 7, FindAnswer_18, 7, R FindAnswer_18, 8, FindAnswer_18, 8, R FindAnswer_18, 9, FindAnswer_18, 9, R FindAnswer_18, a, FindAnswer_18, a, R FindAnswer_18, b, FindAnswer_18, b, R FindAnswer_18, c, FindAnswer_18, c, R FindAnswer_18, d, FindAnswer_18, d, R FindAnswer_18, e, FindAnswer_18, e, R FindAnswer_18, f, FindAnswer_18, f, R FindAnswer_18, g, FindAnswer_18, g, R FindAnswer_18, h, FindAnswer_18, h, R FindAnswer_18, i, FindAnswer_18, i, R FindAnswer_18, j, FindAnswer_18, j, R FindAnswer_19, 0, FindAnswer_19, 0, R FindAnswer_19, 1, FindAnswer_19, 1, R FindAnswer_19, 2, FindAnswer_19, 2, R FindAnswer_19, 3, FindAnswer_19, 3, R FindAnswer_19, 4, FindAnswer_19, 4, R FindAnswer_19, 5, FindAnswer_19, 5, R FindAnswer_19, 6, FindAnswer_19, 6, R FindAnswer_19, 7, FindAnswer_19, 7, R FindAnswer_19, 8, FindAnswer_19, 8, R FindAnswer_19, 9, FindAnswer_19, 9, R FindAnswer_19, a, FindAnswer_19, a, R FindAnswer_19, b, FindAnswer_19, b, R FindAnswer_19, c, FindAnswer_19, c, R FindAnswer_19, d, FindAnswer_19, d, R FindAnswer_19, e, FindAnswer_19, e, R FindAnswer_19, f, FindAnswer_19, f, R FindAnswer_19, g, FindAnswer_19, g, R FindAnswer_19, h, FindAnswer_19, h, R FindAnswer_19, i, FindAnswer_19, i, R FindAnswer_19, j, FindAnswer_19, j, R # FindAnswer_n also moves right past +. (19 rules) FindAnswer_0, +, FindAnswer_0, +, R FindAnswer_1, +, FindAnswer_1, +, R FindAnswer_2, +, FindAnswer_2, +, R FindAnswer_3, +, FindAnswer_3, +, R FindAnswer_4, +, FindAnswer_4, +, R FindAnswer_5, +, FindAnswer_5, +, R FindAnswer_6, +, FindAnswer_6, +, R FindAnswer_7, +, FindAnswer_7, +, R FindAnswer_8, +, FindAnswer_8, +, R FindAnswer_9, +, FindAnswer_9, +, R FindAnswer_10, +, FindAnswer_10, +, R FindAnswer_11, +, FindAnswer_11, +, R FindAnswer_12, +, FindAnswer_12, +, R FindAnswer_13, +, FindAnswer_13, +, R FindAnswer_14, +, FindAnswer_14, +, R FindAnswer_15, +, FindAnswer_15, +, R FindAnswer_16, +, FindAnswer_16, +, R FindAnswer_17, +, FindAnswer_17, +, R FindAnswer_18, +, FindAnswer_18, +, R FindAnswer_19, +, FindAnswer_19, +, R # When Find_Answer_n gets to the = , change state to WriteAnswer_n. (19 rules) FindAnswer_0, =, WriteAnswer_0, =, R FindAnswer_1, =, WriteAnswer_1, =, R FindAnswer_2, =, WriteAnswer_2, =, R FindAnswer_3, =, WriteAnswer_3, =, R FindAnswer_4, =, WriteAnswer_4, =, R FindAnswer_5, =, WriteAnswer_5, =, R FindAnswer_6, =, WriteAnswer_6, =, R FindAnswer_7, =, WriteAnswer_7, =, R FindAnswer_8, =, WriteAnswer_8, =, R FindAnswer_9, =, WriteAnswer_9, =, R FindAnswer_10, =, WriteAnswer_10, =, R FindAnswer_11, =, WriteAnswer_11, =, R FindAnswer_12, =, WriteAnswer_12, =, R FindAnswer_13, =, WriteAnswer_13, =, R FindAnswer_14, =, WriteAnswer_14, =, R FindAnswer_15, =, WriteAnswer_15, =, R FindAnswer_16, =, WriteAnswer_16, =, R FindAnswer_17, =, WriteAnswer_17, =, R FindAnswer_18, =, WriteAnswer_18, =, R FindAnswer_19, =, WriteAnswer_19, =, R # Now we need to write the new answer digit, # and shift the old answer digits right one place. # There are two cases, one with a carry and one without. # The state must remember the difference which means # all of this must be done twice, one for each case. # --- First let's do n < 10, .i.e. no carry. # Write the new answer on top of the old; start shifting the old digits. (100 rules) WriteAnswer_0, 0, ShiftAnswer_0, 0, R WriteAnswer_0, 1, ShiftAnswer_1, 0, R WriteAnswer_0, 2, ShiftAnswer_2, 0, R WriteAnswer_0, 3, ShiftAnswer_3, 0, R WriteAnswer_0, 4, ShiftAnswer_4, 0, R WriteAnswer_0, 5, ShiftAnswer_5, 0, R WriteAnswer_0, 6, ShiftAnswer_6, 0, R WriteAnswer_0, 7, ShiftAnswer_7, 0, R WriteAnswer_0, 8, ShiftAnswer_8, 0, R WriteAnswer_0, 9, ShiftAnswer_9, 0, R WriteAnswer_1, 0, ShiftAnswer_0, 1, R WriteAnswer_1, 1, ShiftAnswer_1, 1, R WriteAnswer_1, 2, ShiftAnswer_2, 1, R WriteAnswer_1, 3, ShiftAnswer_3, 1, R WriteAnswer_1, 4, ShiftAnswer_4, 1, R WriteAnswer_1, 5, ShiftAnswer_5, 1, R WriteAnswer_1, 6, ShiftAnswer_6, 1, R WriteAnswer_1, 7, ShiftAnswer_7, 1, R WriteAnswer_1, 8, ShiftAnswer_8, 1, R WriteAnswer_1, 9, ShiftAnswer_9, 1, R WriteAnswer_2, 0, ShiftAnswer_0, 2, R WriteAnswer_2, 1, ShiftAnswer_1, 2, R WriteAnswer_2, 2, ShiftAnswer_2, 2, R WriteAnswer_2, 3, ShiftAnswer_3, 2, R WriteAnswer_2, 4, ShiftAnswer_4, 2, R WriteAnswer_2, 5, ShiftAnswer_5, 2, R WriteAnswer_2, 6, ShiftAnswer_6, 2, R WriteAnswer_2, 7, ShiftAnswer_7, 2, R WriteAnswer_2, 8, ShiftAnswer_8, 2, R WriteAnswer_2, 9, ShiftAnswer_9, 2, R WriteAnswer_3, 0, ShiftAnswer_0, 3, R WriteAnswer_3, 1, ShiftAnswer_1, 3, R WriteAnswer_3, 2, ShiftAnswer_2, 3, R WriteAnswer_3, 3, ShiftAnswer_3, 3, R WriteAnswer_3, 4, ShiftAnswer_4, 3, R WriteAnswer_3, 5, ShiftAnswer_5, 3, R WriteAnswer_3, 6, ShiftAnswer_6, 3, R WriteAnswer_3, 7, ShiftAnswer_7, 3, R WriteAnswer_3, 8, ShiftAnswer_8, 3, R WriteAnswer_3, 9, ShiftAnswer_9, 3, R WriteAnswer_4, 0, ShiftAnswer_0, 4, R WriteAnswer_4, 1, ShiftAnswer_1, 4, R WriteAnswer_4, 2, ShiftAnswer_2, 4, R WriteAnswer_4, 3, ShiftAnswer_3, 4, R WriteAnswer_4, 4, ShiftAnswer_4, 4, R WriteAnswer_4, 5, ShiftAnswer_5, 4, R WriteAnswer_4, 6, ShiftAnswer_6, 4, R WriteAnswer_4, 7, ShiftAnswer_7, 4, R WriteAnswer_4, 8, ShiftAnswer_8, 4, R WriteAnswer_4, 9, ShiftAnswer_9, 4, R WriteAnswer_5, 0, ShiftAnswer_0, 5, R WriteAnswer_5, 1, ShiftAnswer_1, 5, R WriteAnswer_5, 2, ShiftAnswer_2, 5, R WriteAnswer_5, 3, ShiftAnswer_3, 5, R WriteAnswer_5, 4, ShiftAnswer_4, 5, R WriteAnswer_5, 5, ShiftAnswer_5, 5, R WriteAnswer_5, 6, ShiftAnswer_6, 5, R WriteAnswer_5, 7, ShiftAnswer_7, 5, R WriteAnswer_5, 8, ShiftAnswer_8, 5, R WriteAnswer_5, 9, ShiftAnswer_9, 5, R WriteAnswer_6, 0, ShiftAnswer_0, 6, R WriteAnswer_6, 1, ShiftAnswer_1, 6, R WriteAnswer_6, 2, ShiftAnswer_2, 6, R WriteAnswer_6, 3, ShiftAnswer_3, 6, R WriteAnswer_6, 4, ShiftAnswer_4, 6, R WriteAnswer_6, 5, ShiftAnswer_5, 6, R WriteAnswer_6, 6, ShiftAnswer_6, 6, R WriteAnswer_6, 7, ShiftAnswer_7, 6, R WriteAnswer_6, 8, ShiftAnswer_8, 6, R WriteAnswer_6, 9, ShiftAnswer_9, 6, R WriteAnswer_7, 0, ShiftAnswer_0, 7, R WriteAnswer_7, 1, ShiftAnswer_1, 7, R WriteAnswer_7, 2, ShiftAnswer_2, 7, R WriteAnswer_7, 3, ShiftAnswer_3, 7, R WriteAnswer_7, 4, ShiftAnswer_4, 7, R WriteAnswer_7, 5, ShiftAnswer_5, 7, R WriteAnswer_7, 6, ShiftAnswer_6, 7, R WriteAnswer_7, 7, ShiftAnswer_7, 7, R WriteAnswer_7, 8, ShiftAnswer_8, 7, R WriteAnswer_7, 9, ShiftAnswer_9, 7, R WriteAnswer_8, 0, ShiftAnswer_0, 8, R WriteAnswer_8, 1, ShiftAnswer_1, 8, R WriteAnswer_8, 2, ShiftAnswer_2, 8, R WriteAnswer_8, 3, ShiftAnswer_3, 8, R WriteAnswer_8, 4, ShiftAnswer_4, 8, R WriteAnswer_8, 5, ShiftAnswer_5, 8, R WriteAnswer_8, 6, ShiftAnswer_6, 8, R WriteAnswer_8, 7, ShiftAnswer_7, 8, R WriteAnswer_8, 8, ShiftAnswer_8, 8, R WriteAnswer_8, 9, ShiftAnswer_9, 8, R WriteAnswer_9, 0, ShiftAnswer_0, 9, R WriteAnswer_9, 1, ShiftAnswer_1, 9, R WriteAnswer_9, 2, ShiftAnswer_2, 9, R WriteAnswer_9, 3, ShiftAnswer_3, 9, R WriteAnswer_9, 4, ShiftAnswer_4, 9, R WriteAnswer_9, 5, ShiftAnswer_5, 9, R WriteAnswer_9, 6, ShiftAnswer_6, 9, R WriteAnswer_9, 7, ShiftAnswer_7, 9, R WriteAnswer_9, 8, ShiftAnswer_8, 9, R WriteAnswer_9, 9, ShiftAnswer_9, 9, R # If WriteAnswer was on a blank, then change direction right then. (10 rules) WriteAnswer_0, _, SkipAnswer, 0, L WriteAnswer_1, _, SkipAnswer, 1, L WriteAnswer_2, _, SkipAnswer, 2, L WriteAnswer_3, _, SkipAnswer, 3, L WriteAnswer_4, _, SkipAnswer, 4, L WriteAnswer_5, _, SkipAnswer, 5, L WriteAnswer_6, _, SkipAnswer, 6, L WriteAnswer_7, _, SkipAnswer, 7, L WriteAnswer_8, _, SkipAnswer, 8, L WriteAnswer_9, _, SkipAnswer, 9, L # Continue shifting the remaining old digits. (100 rules) ShiftAnswer_0, 0, ShiftAnswer_0, 0, R ShiftAnswer_0, 1, ShiftAnswer_1, 0, R ShiftAnswer_0, 2, ShiftAnswer_2, 0, R ShiftAnswer_0, 3, ShiftAnswer_3, 0, R ShiftAnswer_0, 4, ShiftAnswer_4, 0, R ShiftAnswer_0, 5, ShiftAnswer_5, 0, R ShiftAnswer_0, 6, ShiftAnswer_6, 0, R ShiftAnswer_0, 7, ShiftAnswer_7, 0, R ShiftAnswer_0, 8, ShiftAnswer_8, 0, R ShiftAnswer_0, 9, ShiftAnswer_9, 0, R ShiftAnswer_1, 0, ShiftAnswer_0, 1, R ShiftAnswer_1, 1, ShiftAnswer_1, 1, R ShiftAnswer_1, 2, ShiftAnswer_2, 1, R ShiftAnswer_1, 3, ShiftAnswer_3, 1, R ShiftAnswer_1, 4, ShiftAnswer_4, 1, R ShiftAnswer_1, 5, ShiftAnswer_5, 1, R ShiftAnswer_1, 6, ShiftAnswer_6, 1, R ShiftAnswer_1, 7, ShiftAnswer_7, 1, R ShiftAnswer_1, 8, ShiftAnswer_8, 1, R ShiftAnswer_1, 9, ShiftAnswer_9, 1, R ShiftAnswer_2, 0, ShiftAnswer_0, 2, R ShiftAnswer_2, 1, ShiftAnswer_1, 2, R ShiftAnswer_2, 2, ShiftAnswer_2, 2, R ShiftAnswer_2, 3, ShiftAnswer_3, 2, R ShiftAnswer_2, 4, ShiftAnswer_4, 2, R ShiftAnswer_2, 5, ShiftAnswer_5, 2, R ShiftAnswer_2, 6, ShiftAnswer_6, 2, R ShiftAnswer_2, 7, ShiftAnswer_7, 2, R ShiftAnswer_2, 8, ShiftAnswer_8, 2, R ShiftAnswer_2, 9, ShiftAnswer_9, 2, R ShiftAnswer_3, 0, ShiftAnswer_0, 3, R ShiftAnswer_3, 1, ShiftAnswer_1, 3, R ShiftAnswer_3, 2, ShiftAnswer_2, 3, R ShiftAnswer_3, 3, ShiftAnswer_3, 3, R ShiftAnswer_3, 4, ShiftAnswer_4, 3, R ShiftAnswer_3, 5, ShiftAnswer_5, 3, R ShiftAnswer_3, 6, ShiftAnswer_6, 3, R ShiftAnswer_3, 7, ShiftAnswer_7, 3, R ShiftAnswer_3, 8, ShiftAnswer_8, 3, R ShiftAnswer_3, 9, ShiftAnswer_9, 3, R ShiftAnswer_4, 0, ShiftAnswer_0, 4, R ShiftAnswer_4, 1, ShiftAnswer_1, 4, R ShiftAnswer_4, 2, ShiftAnswer_2, 4, R ShiftAnswer_4, 3, ShiftAnswer_3, 4, R ShiftAnswer_4, 4, ShiftAnswer_4, 4, R ShiftAnswer_4, 5, ShiftAnswer_5, 4, R ShiftAnswer_4, 6, ShiftAnswer_6, 4, R ShiftAnswer_4, 7, ShiftAnswer_7, 4, R ShiftAnswer_4, 8, ShiftAnswer_8, 4, R ShiftAnswer_4, 9, ShiftAnswer_9, 4, R ShiftAnswer_5, 0, ShiftAnswer_0, 5, R ShiftAnswer_5, 1, ShiftAnswer_1, 5, R ShiftAnswer_5, 2, ShiftAnswer_2, 5, R ShiftAnswer_5, 3, ShiftAnswer_3, 5, R ShiftAnswer_5, 4, ShiftAnswer_4, 5, R ShiftAnswer_5, 5, ShiftAnswer_5, 5, R ShiftAnswer_5, 6, ShiftAnswer_6, 5, R ShiftAnswer_5, 7, ShiftAnswer_7, 5, R ShiftAnswer_5, 8, ShiftAnswer_8, 5, R ShiftAnswer_5, 9, ShiftAnswer_9, 5, R ShiftAnswer_6, 0, ShiftAnswer_0, 6, R ShiftAnswer_6, 1, ShiftAnswer_1, 6, R ShiftAnswer_6, 2, ShiftAnswer_2, 6, R ShiftAnswer_6, 3, ShiftAnswer_3, 6, R ShiftAnswer_6, 4, ShiftAnswer_4, 6, R ShiftAnswer_6, 5, ShiftAnswer_5, 6, R ShiftAnswer_6, 6, ShiftAnswer_6, 6, R ShiftAnswer_6, 7, ShiftAnswer_7, 6, R ShiftAnswer_6, 8, ShiftAnswer_8, 6, R ShiftAnswer_6, 9, ShiftAnswer_9, 6, R ShiftAnswer_7, 0, ShiftAnswer_0, 7, R ShiftAnswer_7, 1, ShiftAnswer_1, 7, R ShiftAnswer_7, 2, ShiftAnswer_2, 7, R ShiftAnswer_7, 3, ShiftAnswer_3, 7, R ShiftAnswer_7, 4, ShiftAnswer_4, 7, R ShiftAnswer_7, 5, ShiftAnswer_5, 7, R ShiftAnswer_7, 6, ShiftAnswer_6, 7, R ShiftAnswer_7, 7, ShiftAnswer_7, 7, R ShiftAnswer_7, 8, ShiftAnswer_8, 7, R ShiftAnswer_7, 9, ShiftAnswer_9, 7, R ShiftAnswer_8, 0, ShiftAnswer_0, 8, R ShiftAnswer_8, 1, ShiftAnswer_1, 8, R ShiftAnswer_8, 2, ShiftAnswer_2, 8, R ShiftAnswer_8, 3, ShiftAnswer_3, 8, R ShiftAnswer_8, 4, ShiftAnswer_4, 8, R ShiftAnswer_8, 5, ShiftAnswer_5, 8, R ShiftAnswer_8, 6, ShiftAnswer_6, 8, R ShiftAnswer_8, 7, ShiftAnswer_7, 8, R ShiftAnswer_8, 8, ShiftAnswer_8, 8, R ShiftAnswer_8, 9, ShiftAnswer_9, 8, R ShiftAnswer_9, 0, ShiftAnswer_0, 9, R ShiftAnswer_9, 1, ShiftAnswer_1, 9, R ShiftAnswer_9, 2, ShiftAnswer_2, 9, R ShiftAnswer_9, 3, ShiftAnswer_3, 9, R ShiftAnswer_9, 4, ShiftAnswer_4, 9, R ShiftAnswer_9, 5, ShiftAnswer_5, 9, R ShiftAnswer_9, 6, ShiftAnswer_6, 9, R ShiftAnswer_9, 7, ShiftAnswer_7, 9, R ShiftAnswer_9, 8, ShiftAnswer_8, 9, R ShiftAnswer_9, 9, ShiftAnswer_9, 9, R # Stop shifting when we hit a blank. (10 rules) ShiftAnswer_0, _, SkipAnswer, 0, L ShiftAnswer_1, _, SkipAnswer, 1, L ShiftAnswer_2, _, SkipAnswer, 2, L ShiftAnswer_3, _, SkipAnswer, 3, L ShiftAnswer_4, _, SkipAnswer, 4, L ShiftAnswer_5, _, SkipAnswer, 5, L ShiftAnswer_6, _, SkipAnswer, 6, L ShiftAnswer_7, _, SkipAnswer, 7, L ShiftAnswer_8, _, SkipAnswer, 8, L ShiftAnswer_9, _, SkipAnswer, 9, L # Move left looking for the =. (10 rules) SkipAnswer, 0, SkipAnswer, 0, L SkipAnswer, 1, SkipAnswer, 1, L SkipAnswer, 2, SkipAnswer, 2, L SkipAnswer, 3, SkipAnswer, 3, L SkipAnswer, 4, SkipAnswer, 4, L SkipAnswer, 5, SkipAnswer, 5, L SkipAnswer, 6, SkipAnswer, 6, L SkipAnswer, 7, SkipAnswer, 7, L SkipAnswer, 8, SkipAnswer, 8, L SkipAnswer, 9, SkipAnswer, 9, L # When we get to that =, continue the main loop by looking for the next Y digit. SkipAnswer, =, FindY, =, L # --- All of that last stuff needs to be done again, remembering the carry, for n>9 # Write the 1's part of the new answer on top of the old; # start shifting the old digits. (100 rules) WriteAnswer_10, 0, ShiftAnswer_carry1_0, 0, R WriteAnswer_10, 1, ShiftAnswer_carry1_1, 0, R WriteAnswer_10, 2, ShiftAnswer_carry1_2, 0, R WriteAnswer_10, 3, ShiftAnswer_carry1_3, 0, R WriteAnswer_10, 4, ShiftAnswer_carry1_4, 0, R WriteAnswer_10, 5, ShiftAnswer_carry1_5, 0, R WriteAnswer_10, 6, ShiftAnswer_carry1_6, 0, R WriteAnswer_10, 7, ShiftAnswer_carry1_7, 0, R WriteAnswer_10, 8, ShiftAnswer_carry1_8, 0, R WriteAnswer_10, 9, ShiftAnswer_carry1_9, 0, R WriteAnswer_11, 0, ShiftAnswer_carry1_0, 1, R WriteAnswer_11, 1, ShiftAnswer_carry1_1, 1, R WriteAnswer_11, 2, ShiftAnswer_carry1_2, 1, R WriteAnswer_11, 3, ShiftAnswer_carry1_3, 1, R WriteAnswer_11, 4, ShiftAnswer_carry1_4, 1, R WriteAnswer_11, 5, ShiftAnswer_carry1_5, 1, R WriteAnswer_11, 6, ShiftAnswer_carry1_6, 1, R WriteAnswer_11, 7, ShiftAnswer_carry1_7, 1, R WriteAnswer_11, 8, ShiftAnswer_carry1_8, 1, R WriteAnswer_11, 9, ShiftAnswer_carry1_9, 1, R WriteAnswer_12, 0, ShiftAnswer_carry1_0, 2, R WriteAnswer_12, 1, ShiftAnswer_carry1_1, 2, R WriteAnswer_12, 2, ShiftAnswer_carry1_2, 2, R WriteAnswer_12, 3, ShiftAnswer_carry1_3, 2, R WriteAnswer_12, 4, ShiftAnswer_carry1_4, 2, R WriteAnswer_12, 5, ShiftAnswer_carry1_5, 2, R WriteAnswer_12, 6, ShiftAnswer_carry1_6, 2, R WriteAnswer_12, 7, ShiftAnswer_carry1_7, 2, R WriteAnswer_12, 8, ShiftAnswer_carry1_8, 2, R WriteAnswer_12, 9, ShiftAnswer_carry1_9, 2, R WriteAnswer_13, 0, ShiftAnswer_carry1_0, 3, R WriteAnswer_13, 1, ShiftAnswer_carry1_1, 3, R WriteAnswer_13, 2, ShiftAnswer_carry1_2, 3, R WriteAnswer_13, 3, ShiftAnswer_carry1_3, 3, R WriteAnswer_13, 4, ShiftAnswer_carry1_4, 3, R WriteAnswer_13, 5, ShiftAnswer_carry1_5, 3, R WriteAnswer_13, 6, ShiftAnswer_carry1_6, 3, R WriteAnswer_13, 7, ShiftAnswer_carry1_7, 3, R WriteAnswer_13, 8, ShiftAnswer_carry1_8, 3, R WriteAnswer_13, 9, ShiftAnswer_carry1_9, 3, R WriteAnswer_14, 0, ShiftAnswer_carry1_0, 4, R WriteAnswer_14, 1, ShiftAnswer_carry1_1, 4, R WriteAnswer_14, 2, ShiftAnswer_carry1_2, 4, R WriteAnswer_14, 3, ShiftAnswer_carry1_3, 4, R WriteAnswer_14, 4, ShiftAnswer_carry1_4, 4, R WriteAnswer_14, 5, ShiftAnswer_carry1_5, 4, R WriteAnswer_14, 6, ShiftAnswer_carry1_6, 4, R WriteAnswer_14, 7, ShiftAnswer_carry1_7, 4, R WriteAnswer_14, 8, ShiftAnswer_carry1_8, 4, R WriteAnswer_14, 9, ShiftAnswer_carry1_9, 4, R WriteAnswer_15, 0, ShiftAnswer_carry1_0, 5, R WriteAnswer_15, 1, ShiftAnswer_carry1_1, 5, R WriteAnswer_15, 2, ShiftAnswer_carry1_2, 5, R WriteAnswer_15, 3, ShiftAnswer_carry1_3, 5, R WriteAnswer_15, 4, ShiftAnswer_carry1_4, 5, R WriteAnswer_15, 5, ShiftAnswer_carry1_5, 5, R WriteAnswer_15, 6, ShiftAnswer_carry1_6, 5, R WriteAnswer_15, 7, ShiftAnswer_carry1_7, 5, R WriteAnswer_15, 8, ShiftAnswer_carry1_8, 5, R WriteAnswer_15, 9, ShiftAnswer_carry1_9, 5, R WriteAnswer_16, 0, ShiftAnswer_carry1_0, 6, R WriteAnswer_16, 1, ShiftAnswer_carry1_1, 6, R WriteAnswer_16, 2, ShiftAnswer_carry1_2, 6, R WriteAnswer_16, 3, ShiftAnswer_carry1_3, 6, R WriteAnswer_16, 4, ShiftAnswer_carry1_4, 6, R WriteAnswer_16, 5, ShiftAnswer_carry1_5, 6, R WriteAnswer_16, 6, ShiftAnswer_carry1_6, 6, R WriteAnswer_16, 7, ShiftAnswer_carry1_7, 6, R WriteAnswer_16, 8, ShiftAnswer_carry1_8, 6, R WriteAnswer_16, 9, ShiftAnswer_carry1_9, 6, R WriteAnswer_17, 0, ShiftAnswer_carry1_0, 7, R WriteAnswer_17, 1, ShiftAnswer_carry1_1, 7, R WriteAnswer_17, 2, ShiftAnswer_carry1_2, 7, R WriteAnswer_17, 3, ShiftAnswer_carry1_3, 7, R WriteAnswer_17, 4, ShiftAnswer_carry1_4, 7, R WriteAnswer_17, 5, ShiftAnswer_carry1_5, 7, R WriteAnswer_17, 6, ShiftAnswer_carry1_6, 7, R WriteAnswer_17, 7, ShiftAnswer_carry1_7, 7, R WriteAnswer_17, 8, ShiftAnswer_carry1_8, 7, R WriteAnswer_17, 9, ShiftAnswer_carry1_9, 7, R WriteAnswer_18, 0, ShiftAnswer_carry1_0, 8, R WriteAnswer_18, 1, ShiftAnswer_carry1_1, 8, R WriteAnswer_18, 2, ShiftAnswer_carry1_2, 8, R WriteAnswer_18, 3, ShiftAnswer_carry1_3, 8, R WriteAnswer_18, 4, ShiftAnswer_carry1_4, 8, R WriteAnswer_18, 5, ShiftAnswer_carry1_5, 8, R WriteAnswer_18, 6, ShiftAnswer_carry1_6, 8, R WriteAnswer_18, 7, ShiftAnswer_carry1_7, 8, R WriteAnswer_18, 8, ShiftAnswer_carry1_8, 8, R WriteAnswer_18, 9, ShiftAnswer_carry1_9, 8, R WriteAnswer_19, 0, ShiftAnswer_carry1_0, 9, R WriteAnswer_19, 1, ShiftAnswer_carry1_1, 9, R WriteAnswer_19, 2, ShiftAnswer_carry1_2, 9, R WriteAnswer_19, 3, ShiftAnswer_carry1_3, 9, R WriteAnswer_19, 4, ShiftAnswer_carry1_4, 9, R WriteAnswer_19, 5, ShiftAnswer_carry1_5, 9, R WriteAnswer_19, 6, ShiftAnswer_carry1_6, 9, R WriteAnswer_19, 7, ShiftAnswer_carry1_7, 9, R WriteAnswer_19, 8, ShiftAnswer_carry1_8, 9, R WriteAnswer_19, 9, ShiftAnswer_carry1_9, 9, R # If WriteAnswer was on a blank, then change direction right then. (10 rules) WriteAnswer_10, _, SkipAnswer_carry1, 0, L WriteAnswer_11, _, SkipAnswer_carry1, 1, L WriteAnswer_12, _, SkipAnswer_carry1, 2, L WriteAnswer_13, _, SkipAnswer_carry1, 3, L WriteAnswer_14, _, SkipAnswer_carry1, 4, L WriteAnswer_15, _, SkipAnswer_carry1, 5, L WriteAnswer_16, _, SkipAnswer_carry1, 6, L WriteAnswer_17, _, SkipAnswer_carry1, 7, L WriteAnswer_18, _, SkipAnswer_carry1, 8, L WriteAnswer_19, _, SkipAnswer_carry1, 9, L # Continue shifting the remaining old digits. (100 rules) ShiftAnswer_carry1_0, 0, ShiftAnswer_carry1_0, 0, R ShiftAnswer_carry1_0, 1, ShiftAnswer_carry1_1, 0, R ShiftAnswer_carry1_0, 2, ShiftAnswer_carry1_2, 0, R ShiftAnswer_carry1_0, 3, ShiftAnswer_carry1_3, 0, R ShiftAnswer_carry1_0, 4, ShiftAnswer_carry1_4, 0, R ShiftAnswer_carry1_0, 5, ShiftAnswer_carry1_5, 0, R ShiftAnswer_carry1_0, 6, ShiftAnswer_carry1_6, 0, R ShiftAnswer_carry1_0, 7, ShiftAnswer_carry1_7, 0, R ShiftAnswer_carry1_0, 8, ShiftAnswer_carry1_8, 0, R ShiftAnswer_carry1_0, 9, ShiftAnswer_carry1_9, 0, R ShiftAnswer_carry1_1, 0, ShiftAnswer_carry1_0, 1, R ShiftAnswer_carry1_1, 1, ShiftAnswer_carry1_1, 1, R ShiftAnswer_carry1_1, 2, ShiftAnswer_carry1_2, 1, R ShiftAnswer_carry1_1, 3, ShiftAnswer_carry1_3, 1, R ShiftAnswer_carry1_1, 4, ShiftAnswer_carry1_4, 1, R ShiftAnswer_carry1_1, 5, ShiftAnswer_carry1_5, 1, R ShiftAnswer_carry1_1, 6, ShiftAnswer_carry1_6, 1, R ShiftAnswer_carry1_1, 7, ShiftAnswer_carry1_7, 1, R ShiftAnswer_carry1_1, 8, ShiftAnswer_carry1_8, 1, R ShiftAnswer_carry1_1, 9, ShiftAnswer_carry1_9, 1, R ShiftAnswer_carry1_2, 0, ShiftAnswer_carry1_0, 2, R ShiftAnswer_carry1_2, 1, ShiftAnswer_carry1_1, 2, R ShiftAnswer_carry1_2, 2, ShiftAnswer_carry1_2, 2, R ShiftAnswer_carry1_2, 3, ShiftAnswer_carry1_3, 2, R ShiftAnswer_carry1_2, 4, ShiftAnswer_carry1_4, 2, R ShiftAnswer_carry1_2, 5, ShiftAnswer_carry1_5, 2, R ShiftAnswer_carry1_2, 6, ShiftAnswer_carry1_6, 2, R ShiftAnswer_carry1_2, 7, ShiftAnswer_carry1_7, 2, R ShiftAnswer_carry1_2, 8, ShiftAnswer_carry1_8, 2, R ShiftAnswer_carry1_2, 9, ShiftAnswer_carry1_9, 2, R ShiftAnswer_carry1_3, 0, ShiftAnswer_carry1_0, 3, R ShiftAnswer_carry1_3, 1, ShiftAnswer_carry1_1, 3, R ShiftAnswer_carry1_3, 2, ShiftAnswer_carry1_2, 3, R ShiftAnswer_carry1_3, 3, ShiftAnswer_carry1_3, 3, R ShiftAnswer_carry1_3, 4, ShiftAnswer_carry1_4, 3, R ShiftAnswer_carry1_3, 5, ShiftAnswer_carry1_5, 3, R ShiftAnswer_carry1_3, 6, ShiftAnswer_carry1_6, 3, R ShiftAnswer_carry1_3, 7, ShiftAnswer_carry1_7, 3, R ShiftAnswer_carry1_3, 8, ShiftAnswer_carry1_8, 3, R ShiftAnswer_carry1_3, 9, ShiftAnswer_carry1_9, 3, R ShiftAnswer_carry1_4, 0, ShiftAnswer_carry1_0, 4, R ShiftAnswer_carry1_4, 1, ShiftAnswer_carry1_1, 4, R ShiftAnswer_carry1_4, 2, ShiftAnswer_carry1_2, 4, R ShiftAnswer_carry1_4, 3, ShiftAnswer_carry1_3, 4, R ShiftAnswer_carry1_4, 4, ShiftAnswer_carry1_4, 4, R ShiftAnswer_carry1_4, 5, ShiftAnswer_carry1_5, 4, R ShiftAnswer_carry1_4, 6, ShiftAnswer_carry1_6, 4, R ShiftAnswer_carry1_4, 7, ShiftAnswer_carry1_7, 4, R ShiftAnswer_carry1_4, 8, ShiftAnswer_carry1_8, 4, R ShiftAnswer_carry1_4, 9, ShiftAnswer_carry1_9, 4, R ShiftAnswer_carry1_5, 0, ShiftAnswer_carry1_0, 5, R ShiftAnswer_carry1_5, 1, ShiftAnswer_carry1_1, 5, R ShiftAnswer_carry1_5, 2, ShiftAnswer_carry1_2, 5, R ShiftAnswer_carry1_5, 3, ShiftAnswer_carry1_3, 5, R ShiftAnswer_carry1_5, 4, ShiftAnswer_carry1_4, 5, R ShiftAnswer_carry1_5, 5, ShiftAnswer_carry1_5, 5, R ShiftAnswer_carry1_5, 6, ShiftAnswer_carry1_6, 5, R ShiftAnswer_carry1_5, 7, ShiftAnswer_carry1_7, 5, R ShiftAnswer_carry1_5, 8, ShiftAnswer_carry1_8, 5, R ShiftAnswer_carry1_5, 9, ShiftAnswer_carry1_9, 5, R ShiftAnswer_carry1_6, 0, ShiftAnswer_carry1_0, 6, R ShiftAnswer_carry1_6, 1, ShiftAnswer_carry1_1, 6, R ShiftAnswer_carry1_6, 2, ShiftAnswer_carry1_2, 6, R ShiftAnswer_carry1_6, 3, ShiftAnswer_carry1_3, 6, R ShiftAnswer_carry1_6, 4, ShiftAnswer_carry1_4, 6, R ShiftAnswer_carry1_6, 5, ShiftAnswer_carry1_5, 6, R ShiftAnswer_carry1_6, 6, ShiftAnswer_carry1_6, 6, R ShiftAnswer_carry1_6, 7, ShiftAnswer_carry1_7, 6, R ShiftAnswer_carry1_6, 8, ShiftAnswer_carry1_8, 6, R ShiftAnswer_carry1_6, 9, ShiftAnswer_carry1_9, 6, R ShiftAnswer_carry1_7, 0, ShiftAnswer_carry1_0, 7, R ShiftAnswer_carry1_7, 1, ShiftAnswer_carry1_1, 7, R ShiftAnswer_carry1_7, 2, ShiftAnswer_carry1_2, 7, R ShiftAnswer_carry1_7, 3, ShiftAnswer_carry1_3, 7, R ShiftAnswer_carry1_7, 4, ShiftAnswer_carry1_4, 7, R ShiftAnswer_carry1_7, 5, ShiftAnswer_carry1_5, 7, R ShiftAnswer_carry1_7, 6, ShiftAnswer_carry1_6, 7, R ShiftAnswer_carry1_7, 7, ShiftAnswer_carry1_7, 7, R ShiftAnswer_carry1_7, 8, ShiftAnswer_carry1_8, 7, R ShiftAnswer_carry1_7, 9, ShiftAnswer_carry1_9, 7, R ShiftAnswer_carry1_8, 0, ShiftAnswer_carry1_0, 8, R ShiftAnswer_carry1_8, 1, ShiftAnswer_carry1_1, 8, R ShiftAnswer_carry1_8, 2, ShiftAnswer_carry1_2, 8, R ShiftAnswer_carry1_8, 3, ShiftAnswer_carry1_3, 8, R ShiftAnswer_carry1_8, 4, ShiftAnswer_carry1_4, 8, R ShiftAnswer_carry1_8, 5, ShiftAnswer_carry1_5, 8, R ShiftAnswer_carry1_8, 6, ShiftAnswer_carry1_6, 8, R ShiftAnswer_carry1_8, 7, ShiftAnswer_carry1_7, 8, R ShiftAnswer_carry1_8, 8, ShiftAnswer_carry1_8, 8, R ShiftAnswer_carry1_8, 9, ShiftAnswer_carry1_9, 8, R ShiftAnswer_carry1_9, 0, ShiftAnswer_carry1_0, 9, R ShiftAnswer_carry1_9, 1, ShiftAnswer_carry1_1, 9, R ShiftAnswer_carry1_9, 2, ShiftAnswer_carry1_2, 9, R ShiftAnswer_carry1_9, 3, ShiftAnswer_carry1_3, 9, R ShiftAnswer_carry1_9, 4, ShiftAnswer_carry1_4, 9, R ShiftAnswer_carry1_9, 5, ShiftAnswer_carry1_5, 9, R ShiftAnswer_carry1_9, 6, ShiftAnswer_carry1_6, 9, R ShiftAnswer_carry1_9, 7, ShiftAnswer_carry1_7, 9, R ShiftAnswer_carry1_9, 8, ShiftAnswer_carry1_8, 9, R ShiftAnswer_carry1_9, 9, ShiftAnswer_carry1_9, 9, R # Stop shifting when we hit a blank. (10 rules) ShiftAnswer_carry1_0, _, SkipAnswer_carry1, 0, L ShiftAnswer_carry1_1, _, SkipAnswer_carry1, 1, L ShiftAnswer_carry1_2, _, SkipAnswer_carry1, 2, L ShiftAnswer_carry1_3, _, SkipAnswer_carry1, 3, L ShiftAnswer_carry1_4, _, SkipAnswer_carry1, 4, L ShiftAnswer_carry1_5, _, SkipAnswer_carry1, 5, L ShiftAnswer_carry1_6, _, SkipAnswer_carry1, 6, L ShiftAnswer_carry1_7, _, SkipAnswer_carry1, 7, L ShiftAnswer_carry1_8, _, SkipAnswer_carry1, 8, L ShiftAnswer_carry1_9, _, SkipAnswer_carry1, 9, L # Move left looking for the =. (10 rules) SkipAnswer_carry1, 0, SkipAnswer_carry1, 0, L SkipAnswer_carry1, 1, SkipAnswer_carry1, 1, L SkipAnswer_carry1, 2, SkipAnswer_carry1, 2, L SkipAnswer_carry1, 3, SkipAnswer_carry1, 3, L SkipAnswer_carry1, 4, SkipAnswer_carry1, 4, L SkipAnswer_carry1, 5, SkipAnswer_carry1, 5, L SkipAnswer_carry1, 6, SkipAnswer_carry1, 6, L SkipAnswer_carry1, 7, SkipAnswer_carry1, 7, L SkipAnswer_carry1, 8, SkipAnswer_carry1, 8, L SkipAnswer_carry1, 9, SkipAnswer_carry1, 9, L # When we get to that =, continue the main loop by looking for the next Y digit. SkipAnswer_carry1, =, FindY_carry1, =, L # ... and that's it.