Advertisement
SosnoviyBor

Turing Machine

Dec 23rd, 2020
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.30 KB | None | 0 0
  1. ;http://morphett.info/turing/
  2.  
  3. ;Replace _ with f - first, s - second
  4.  
  5. 0 * * l r1
  6. r1 * q r r0
  7.  
  8. r0 _ f r 1
  9. r0 * * r *
  10.  
  11. 1 _ s l 2
  12. 1 * * r 1
  13.  
  14. 2 f * l find_max_number1
  15. 2 * * l 2
  16.  
  17. ;Find max number
  18.  
  19. find_max_number1 1 i r find_max_number2
  20. find_max_number1 0 o r find_max_number2
  21. find_max_number1 _ * r number1_is_over
  22. find_max_number1 * * l find_max_number1
  23.  
  24. find_max_number2 1 i l find_max_number1
  25. find_max_number2 0 o l find_max_number1
  26. find_max_number2 s * * number2_is_over
  27. find_max_number2 * * r find_max_number2
  28.  
  29. ; "a" mean that 2 number is bigger, "b" - 1 number is bigger
  30. number1_is_over s a l check_if_length_is_similar
  31. number1_is_over a * l check_if_length_is_similar
  32. number1_is_over * * r number1_is_over
  33. number2_is_over _ * l type_b
  34. number2_is_over * * r number2_is_over
  35. type_b * b * refresh_numbers
  36.  
  37. check_if_length_is_similar 1 * r move_to_the_end0
  38. check_if_length_is_similar 0 * r move_to_the_end0
  39. check_if_length_is_similar f * r length_is_similar
  40. check_if_length_is_similar * * l *
  41.  
  42. move_to_the_end0 a * l refresh_numbers
  43. move_to_the_end0 b * l refresh_numbers
  44. move_to_the_end0 * * r *
  45.  
  46. length_is_similar * * * move_to_the_start
  47. move_to_the_start _ * r compare_by_numbers
  48. move_to_the_start * * l *
  49.  
  50. compare_by_numbers i 1 r compare_by_numbers1
  51. compare_by_numbers o 0 r compare_by_numbers0
  52. compare_by_numbers * * r *
  53.  
  54. compare_by_numbers1 f * r compare_by_numbers12
  55. compare_by_numbers1 * * r *
  56.  
  57. compare_by_numbers0 f * r compare_by_numbers02
  58. compare_by_numbers0 * * r compare_by_numbers02
  59.  
  60. compare_by_numbers12 i 1 * move_to_the_start
  61. compare_by_numbers02 o 0 * move_to_the_start
  62.  
  63. compare_by_numbers12 f * r *
  64. compare_by_numbers02 f * r *
  65.  
  66. compare_by_numbers12 o 0 * number2_is_over
  67. compare_by_numbers02 i 1 * number1_is_over
  68.  
  69. compare_by_numbers12 * * r *
  70. compare_by_numbers02 * * r *
  71.  
  72. refresh_numbers i 1 l *
  73. refresh_numbers o 0 l *
  74. refresh_numbers _ * r move_to_end
  75. refresh_numbers * * l *
  76.  
  77. move_to_end a * * put_a_1
  78. move_to_end b * * move_to_blank
  79. move_to_end * * r *
  80.  
  81. put_a_1 * a r put_a_2
  82. put_a_2 * a r put_a_3
  83. put_a_3 * a r put_a_4
  84. put_a_4 * a r put_a_5
  85. put_a_5 * a r put_a_6
  86. put_a_6 * a r put_a_7
  87. put_a_7 * a r put_a_8
  88. put_a_8 * a r put_a_9
  89. put_a_9 * a r put_a_10
  90. put_a_10 * a r put_a_11
  91. put_a_11 * a r put_a_12
  92. put_a_12 * a r put_a_13
  93. put_a_13 * a r put_a_14
  94. put_a_14 * a r put_a_15
  95. put_a_15 * a r put_a_16
  96. put_a_16 * a r put_a_17
  97. put_a_17 * a r put_a_18
  98. put_a_18 * a r put_a_19
  99. put_a_19 * a * move_to_f
  100.  
  101. move_to_f f * r push_number_to_right
  102. move_to_f * * l move_to_f
  103.  
  104. push_number_to_right 1 i r push_1_to_right
  105. push_number_to_right 0 o r push_0_to_right
  106. push_number_to_right a * * push_number_to_right_second
  107. push_number_to_right b * * push_number_to_right_second
  108. push_number_to_right_second a * * add_letter_at_the_end
  109. push_number_to_right_second b * * add_letter_at_the_end
  110. push_number_to_right_second * * * move_to_start1
  111. push_number_to_right f * * add_letter_at_the_end
  112. push_number_to_right * * r *
  113.  
  114. push_1_to_right _ j * move_left_to_letter
  115. push_0_to_right _ c * move_left_to_letter
  116. push_1_to_right * * r *
  117. push_0_to_right * * r *
  118.  
  119. move_left_to_letter a * * move_to_f
  120. move_left_to_letter b * * move_to_blank
  121. move_left_to_letter * * l *
  122.  
  123. move_to_blank _ * r push_number_to_right
  124. move_to_blank * * l *
  125.  
  126. move_to_start1 _ * * push_number_to_right
  127. move_to_start1 * * l *
  128.  
  129. add_letter_at_the_end _ x * push_another_number
  130. add_letter_at_the_end * * r add_letter_at_the_end
  131.  
  132. push_another_number _ * r push_another_number1
  133. push_another_number * * l *
  134.  
  135. push_another_number1 1 i r push_another_number11
  136. push_another_number1 0 o r push_another_number10
  137. push_another_number1 _ * * refresh_before_operation
  138. push_another_number1 * * r *
  139.  
  140. push_another_number10 _ c * push_another_number
  141. push_another_number11 _ j * push_another_number
  142. push_another_number10 * * r push_another_number10
  143. push_another_number11 * * r push_another_number11
  144.  
  145. refresh_before_operation q * * move_to_x
  146. refresh_before_operation j 1 l *
  147. refresh_before_operation c 0 l *
  148. refresh_before_operation * * l *
  149.  
  150. refresh_before_operation1 * _ l refresh_before_operation2
  151. refresh_before_operation2 * _ l move_to_x
  152.  
  153. move_to_x a * r move_to_x_for_a
  154. move_to_x b * r move_to_x_for_b
  155. move_to_x * * r *
  156.  
  157. move_to_x_for_b x _ r q1
  158. move_to_x_for_b * * r *
  159.  
  160. move_to_x_for_a x _ l refresh_before_multiplication
  161. move_to_x_for_a * * r *
  162.  
  163. q0 _ _ r q1
  164. q0 * * r q0
  165. q1 _ _ l q2
  166. q1 * * r q1
  167. q2 0 _ l 3x
  168. q2 1 _ l 3y
  169. q2 _ _ l 7
  170. 3x _ _ l 4x
  171. 3x * * l 3x
  172. 3y _ _ l 4y
  173. 3y * * l 3y
  174. 4x 0 x r q0
  175. 4x 1 y r q0
  176. 4x _ x r q0
  177. 4x * * l 4x ; skip the x/y's
  178. 4y 0 1 * 5
  179. 4y 1 0 l 4y
  180. 4y _ 1 * 5
  181. 4y * * l 4y ; skip the x/y's
  182. 5 x x l 6
  183. 5 y y l 6
  184. 5 _ _ l 6
  185. 5 * * r 5
  186. 6 0 x r q0
  187. 6 1 y r q0
  188.  
  189. refresh_before_multiplication a _ l *
  190. refresh_before_multiplication i * r refresh_before_multiplication1
  191. refresh_before_multiplication o * r refresh_before_multiplication1
  192. refresh_before_multiplication * * l *
  193.  
  194. refresh_before_multiplication1 _ * r *
  195. refresh_before_multiplication1 * * * m0
  196.  
  197. m0 * * l m1
  198. m1 _ _ l m2
  199. m2 _ 0 r m3
  200. m3 _ _ r 10
  201.  
  202. ; Find end of num1
  203. 10 _ _ l 11
  204. 10 x x l 11
  205. 10 0 0 r 10
  206. 10 1 1 r 10
  207.  
  208.  
  209. ; If last digit of num1 is 0, multiply num2 by 2
  210. 11 0 x r 20
  211. ; If last digit of num1 is 1, add num2 to tally and then multiply num2 by 2
  212. 11 1 x r 30
  213.  
  214.  
  215. ; Multiply num2 by 2
  216. 20 _ _ r 20
  217. 20 x x r 20
  218. 20 * * r 21
  219. 21 _ 0 l 25 ; Multiplication by 2 done, return to end of num1
  220. 21 * * r 21
  221. 25 _ _ l 26
  222. 25 * * l 25
  223. 26 _ _ r 80 ; Finished multiplying. Clean up
  224. 26 x x l 26
  225. 26 0 0 * 11
  226. 26 1 1 * 11
  227.  
  228. ; Add num2 to tally
  229. 30 _ _ r 30
  230. 30 x x r 30
  231. 30 * * r 31
  232. 31 _ _ l 32
  233. 31 * * r 31
  234. 32 0 o l 40 ; Add a zero
  235. 32 1 i l 50 ; Add a one
  236. 32 o o l 32
  237. 32 i i l 32
  238. 32 _ _ r 70 ; Finished adding
  239.  
  240. ; Adding a 0 to tally
  241. 40 _ _ l 41
  242. 40 * * l 40 ; Found end of num2
  243. 41 _ _ l 41
  244. 41 * * l 42 ; Found start of num1
  245. 42 _ _ l 43 ; Found end of num1
  246. 42 * * l 42
  247. 43 o o l 43
  248. 43 i i l 43
  249. 43 0 o r 44
  250. 43 1 i r 44
  251. 43 _ o r 44
  252. 44 _ _ r 45 ; Found end of tally
  253. 44 * * r 44
  254. 45 _ _ r 45
  255. 45 * * r 46 ; Found start of num1
  256. 46 _ _ r 47 ; Found end of num1
  257. 46 * * r 46
  258. 47 _ _ r 47
  259. 47 * * r 48
  260. 48 _ _ l 32 ; Found end of num2
  261. 48 * * r 48
  262.  
  263. ; Adding a 1 to tally
  264. 50 _ _ l 51 ; Found end of num2
  265. 50 * * l 50
  266. 51 _ _ l 51
  267. 51 * * l 52 ; Found start of num1
  268. 52 _ _ l 53 ; Found end of num1
  269. 52 * * l 52
  270. 53 o o l 53
  271. 53 i i l 53
  272. 53 _ i r 55
  273. 53 0 i r 55 ; return to num2
  274. 53 1 o l 54
  275. 54 0 1 r 55
  276. 54 1 0 l 54
  277. 54 _ 1 r 55
  278. 55 _ _ r 56 ; Found end of tally
  279. 55 * * r 55
  280. 56 _ _ r 56
  281. 56 * * r 57 ; Found start of num1
  282. 57 _ _ r 58 ; Found end of num1
  283. 57 * * r 57
  284. 58 _ _ r 58
  285. 58 * * r 59
  286. 59 _ _ l 32 ; Found end of num2
  287. 59 * * r 59
  288.  
  289. ; Finished adding, clean up
  290. 70 i 1 r 70
  291. 70 o 0 r 70
  292. 70 _ _ l 71
  293. 71 _ _ l 72 ; Found end of num2
  294. 71 * * l 71
  295. 72 _ _ l 72
  296. 72 * * l 73 ; Found start of num1
  297. 73 _ _ l 74
  298. 73 * * l 73
  299. 74 o 0 l 74
  300. 74 i 1 l 74
  301. 74 * * r 75 ; Finished cleaning up tally
  302. 75 _ _ r 76
  303. 75 * * r 75
  304. 76 _ _ r 20 ; Multiply num2 by 2
  305. 76 * * r 76
  306.  
  307. ; Finished multiplying, clean up
  308. 80 x _ r 80
  309. 80 _ _ r 81
  310. 81 _ _ l 82
  311. 81 * _ r 81
  312. 82 _ _ l 82
  313. 82 * * * refresh_end1
  314.  
  315. 7 x 0 l 7
  316. 7 y 1 l 7
  317. 7 b _ r refresh_end1
  318. 7 a _ r refresh_end1
  319. 7 * * l 7
  320.  
  321. refresh_end1 i 1 l *
  322. refresh_end1 o 0 l *
  323. refresh_end1 f _ l *
  324. refresh_end1 a _ l *
  325. refresh_end1 b _ l *
  326. refresh_end1 q _ r halt
  327. refresh_end1 * * l *
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement