Skip to content

Instantly share code, notes, and snippets.

@tomstuart
Created August 27, 2013 09:57
Show Gist options
  • Save tomstuart/6351701 to your computer and use it in GitHub Desktop.
Save tomstuart/6351701 to your computer and use it in GitHub Desktop.
MACHINE_RULEBOOK = DTMRulebook.new([
TMRule.new(:delete_next_bit, '0', :increment_counter, 'X', :left), # cross out 0 from input
TMRule.new(:delete_next_bit, '1', :increment_counter, 'X', :left), # cross out 1 from input
TMRule.new(:delete_next_bit, '_', :clean_up, '_', :left), # clean up the tape
TMRule.new(:delete_next_bit, 'X', :delete_next_bit, 'X', :right), # scan right
TMRule.new(:delete_next_bit, 'Z', :delete_next_bit, 'Z', :right), # scan right
TMRule.new(:increment_counter, '1', :increment_counter, 'Z', :left), # increment counter, carry the 1
TMRule.new(:increment_counter, 'Z', :delete_next_bit, '1', :right), # increment counter
TMRule.new(:increment_counter, '_', :delete_next_bit, '1', :right), # increment counter (overflowed)
TMRule.new(:increment_counter, 'X', :increment_counter, 'X', :left), # scan left
TMRule.new(:clean_up, 'X', :clean_up, '_', :left), # erase crossed-out input
TMRule.new(:clean_up, 'Z', :clean_up, '0', :left), # convert Z to 0 (binary)
TMRule.new(:clean_up, '1', :clean_up, '1', :left), # scan left
])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment