Skip to content

Instantly share code, notes, and snippets.

@TarVK
Last active September 12, 2022 20:17
Show Gist options
  • Save TarVK/ab3795714ba1940dc9f28303d395c37e to your computer and use it in GitHub Desktop.
Save TarVK/ab3795714ba1940dc9f28303d395c37e to your computer and use it in GitHub Desktop.
https://turingmachinesimulator.com/ example input 1101__1011
name: binaryAddition
init: init0
accept: done
// if cursor is started between 2 values:
// init: return2
// Example input: 11011_10101
// 13 states, 34 instructions (when removing init: 12 states, 31 instructions)
// Init that's not needed if input is left and right of the cursor
init0,_
start,0,<
init0,0
init0,0,>
init0,1
init0,1,>
// Return to the start
return,0
return2,_,<
return,1
return2,_,<
return2,0
return2,0,<
return2,1
return2,1,<
return2,_
start,0,<
// Start the bit adding
start,0
add0,_,>
start,1
add1,_,>
start,_
finish,_,>
// Add 0
add0,0
add0,0,>
add0,1
add0_1,1,>
add0_1,0
add0,0,>
add0_1,1
add0_1,1,>
add0,_
return,0,<
add0_1,_
return,1,<
// Add 1
add1,0
add1,0,>
add1,1
add1_1,1,>
add1_1,0
add1,0,>
add1_1,1
add1_1,1,>
add1,_
return,1,<
add1_1,_
carryShift,0,<
carryShift,1
carry,_,<
carry,0
return2,1,<
carry,1
carry,0,<
// Cleaning up
finish,0
finish,_,>
finish,1
finish2_1,_,>
finish2,0
finish2,0,>
finish2,_
done,0,>
finish2,1
finish2_1,0,>
finish2_1,0
finish2,1,>
finish2_1,1
finish2_1,1,>
finish2_1,_
done,1,>
@TarVK
Copy link
Author

TarVK commented Sep 12, 2022

Binary multiplication using a 4 symbol alphabet:

name: binaryMultiply
init: returnStart
accept: done

// Example input: 11011_10101

// Uses 19 states and 59 transitions

// Returning to the 2nd value
returnStart,0
return0,_,>

returnStart,1
return1,_,>

return0,0
return0,0,>

return0,1
return1,0,>

return1,0
return0,1,>

return1,1
return1,1,>

return0,_
start,0,>

return1,_
start,1,>

// Check whether to add then shift, or only shift
start,_
finish,_,<

start,0
shift,_,<

start,1
add,_,<

// Check what bit to add
add,0
add0,_,<

add,1
add1,*,<

add,_
outputCleanup,_,<

// Return after adding bit
addBitReturn,0
addBitReturn,0,>

addBitReturn,1
addBitReturn,1,>

addBitReturn,_
add,0,<

addBitReturn,*
add,1,<

// Add 1 bit
add1,0
add1,0,<

add1,1
add1,1,<

add1,_
add1SearchBit,_,<

add1SearchBit,0
add1SearchBit,0,<

add1SearchBit,1
add1SearchBit,1,<

add1SearchBit,_
markBit,1,<

add1SearchBit,*
carryMarkBit,0,<

carryMarkBit,_
addBitReturnStart,*,>

carryMarkBit,0
addBitReturnStart,*,>

carryMarkBit,1
carry,_,<

carry,1
carry,0,<

carry,_
carryReturn,1,>

carry,0
carryReturn,1,>

carryReturn,0
carryReturn,0,>

carryReturn,_
addBitReturnStart,_,>

addBitReturnStart,0
addBitReturnStart,0,>

addBitReturnStart,1
addBitReturnStart,1,>

addBitReturnStart,_
addBitReturn,_,>

// Add 0 bit
add0,0
add0,0,<

add0,1
add0,1,<

add0,_
add0SearchBit,_,<

add0SearchBit,0
add0SearchBit,0,<

add0SearchBit,1
add0SearchBit,1,<

add0SearchBit,_
markBit,0,<

add0SearchBit,*
markBit,1,<

markBit,_
addBitReturnStart,_,>

markBit,0
addBitReturnStart,_,>

markBit,1
addBitReturnStart,*,>

// Cleanup output after modifying output, and return after
outputCleanup,0
outputCleanup,0,<

outputCleanup,1
outputCleanup,1,<

outputCleanup,*
outputCleanupReturn,1,>

outputCleanup,_
outputCleanupReturn,0,>

outputCleanupReturn,0
outputCleanupReturn,0,>

outputCleanupReturn,1
outputCleanupReturn,1,>

outputCleanupReturn,_
returnStart,_,>

// Shift value
shift,0
shift,0,<

shift,1
shift,1,<

shift,_
outputCleanup,_,<

// Finish up
finish,0
finish,_,<

finish,1
finish,_,<

finish,_
done,_,<

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment