Advertisement
pineapplemachine

Staq reverse Collatz (97 bytes)

Oct 30th, 2014
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.20 KB | None | 0 0
  1. {2&ii}&i2qqt{R[t|@-[d". "]xX|d@:2iqi;x2*X@$@RXs&+Xd2i@%(x/d[i2@%[xXXX@$@RXs&&&&&!]xX!]?)xxx@i!]}R
  2.  
  3. &[
  4. HI! This is a weird language. Anything enclosed like so: &[ ... ]x is a comment.
  5. Anyway it's called Staq. I made it ages ago and it kind of sucks, but it's fantastic
  6. for fitting a lot of operations into only a few characters.
  7.  
  8. You can find Staq online here: http://esolangs.org/wiki/Staq
  9.  
  10. Above is the code with no comments or whitespace. It's fully functional! And only 97
  11. bytes long. To see how it actually works you can take a look at the expanded version
  12. below, even run it if you're feeling adventurous.
  13.  
  14. First, though, here's a SLIGHTLY expanded version to give a sort of overview of the
  15. program flow. This will run exactly as the code above.
  16.  
  17.  
  18. &[ define 2 as a function that pushes a 2 to the stack ]x
  19. {2&ii}
  20.  
  21. &[ initialize with arguments: recursion depth = 16, initial value = 1 ]x
  22. &i2qqt
  23.  
  24. &[ define R as a recursive function for outputting a tree of Collatz sequences ]x
  25. {R[
  26. &[ output dots followed by the current value ]x
  27. t|@-[d". "]xX|d@:2iqi;x
  28.  
  29. &[ call recursively for val * 2 ]x
  30. 2*X@$@RXs
  31.  
  32. &[ call recursively for (val - 1) / 3 ]x
  33. &+Xd2i@%(x/d[i2@%[xXXX@$@RXs&&&&&!]xX!]?)xxx@i
  34. !]}
  35.  
  36. &[ finally, run R ]x
  37. R
  38.  
  39.  
  40. And here's the full output:
  41.  
  42.  
  43. 1
  44. . 2
  45. . . 4
  46. . . . 8
  47. . . . . 16
  48. . . . . . 32
  49. . . . . . . 64
  50. . . . . . . . 128
  51. . . . . . . . . 256
  52. . . . . . . . . . 512
  53. . . . . . . . . . . 1024
  54. . . . . . . . . . . . 2048
  55. . . . . . . . . . . . . 4096
  56. . . . . . . . . . . . . . 8192
  57. . . . . . . . . . . . . . . 16384
  58. . . . . . . . . . . . . . . . 32768
  59. . . . . . . . . . . . . . . . 5461
  60. . . . . . . . . . . . . . 1365
  61. . . . . . . . . . . . . . . 2730
  62. . . . . . . . . . . . . . . . 5460
  63. . . . . . . . . . . . 341
  64. . . . . . . . . . . . . 682
  65. . . . . . . . . . . . . . 1364
  66. . . . . . . . . . . . . . . 2728
  67. . . . . . . . . . . . . . . . 5456
  68. . . . . . . . . . . . . . . . 909
  69. . . . . . . . . . . . . . 227
  70. . . . . . . . . . . . . . . 454
  71. . . . . . . . . . . . . . . . 908
  72. . . . . . . . . . . . . . . . 151
  73. . . . . . . . . . 85
  74. . . . . . . . . . . 170
  75. . . . . . . . . . . . 340
  76. . . . . . . . . . . . . 680
  77. . . . . . . . . . . . . . 1360
  78. . . . . . . . . . . . . . . 2720
  79. . . . . . . . . . . . . . . . 5440
  80. . . . . . . . . . . . . . . 453
  81. . . . . . . . . . . . . . . . 906
  82. . . . . . . . . . . . . 113
  83. . . . . . . . . . . . . . 226
  84. . . . . . . . . . . . . . . 452
  85. . . . . . . . . . . . . . . . 904
  86. . . . . . . . . . . . . . . 75
  87. . . . . . . . . . . . . . . . 150
  88. . . . . . . . 21
  89. . . . . . . . . 42
  90. . . . . . . . . . 84
  91. . . . . . . . . . . 168
  92. . . . . . . . . . . . 336
  93. . . . . . . . . . . . . 672
  94. . . . . . . . . . . . . . 1344
  95. . . . . . . . . . . . . . . 2688
  96. . . . . . . . . . . . . . . . 5376
  97. . . . . . 5
  98. . . . . . . 10
  99. . . . . . . . 20
  100. . . . . . . . . 40
  101. . . . . . . . . . 80
  102. . . . . . . . . . . 160
  103. . . . . . . . . . . . 320
  104. . . . . . . . . . . . . 640
  105. . . . . . . . . . . . . . 1280
  106. . . . . . . . . . . . . . . 2560
  107. . . . . . . . . . . . . . . . 5120
  108. . . . . . . . . . . . . . . . 853
  109. . . . . . . . . . . . . . 213
  110. . . . . . . . . . . . . . . 426
  111. . . . . . . . . . . . . . . . 852
  112. . . . . . . . . . . . 53
  113. . . . . . . . . . . . . 106
  114. . . . . . . . . . . . . . 212
  115. . . . . . . . . . . . . . . 424
  116. . . . . . . . . . . . . . . . 848
  117. . . . . . . . . . . . . . . . 141
  118. . . . . . . . . . . . . . 35
  119. . . . . . . . . . . . . . . 70
  120. . . . . . . . . . . . . . . . 140
  121. . . . . . . . . . . . . . . . 23
  122. . . . . . . . . . 13
  123. . . . . . . . . . . 26
  124. . . . . . . . . . . . 52
  125. . . . . . . . . . . . . 104
  126. . . . . . . . . . . . . . 208
  127. . . . . . . . . . . . . . . 416
  128. . . . . . . . . . . . . . . . 832
  129. . . . . . . . . . . . . . . 69
  130. . . . . . . . . . . . . . . . 138
  131. . . . . . . . . . . . . 17
  132. . . . . . . . . . . . . . 34
  133. . . . . . . . . . . . . . . 68
  134. . . . . . . . . . . . . . . . 136
  135. . . . . . . . . . . . . . . 11
  136. . . . . . . . . . . . . . . . 22
  137. . . . . . . . 3
  138. . . . . . . . . 6
  139. . . . . . . . . . 12
  140. . . . . . . . . . . 24
  141. . . . . . . . . . . . 48
  142. . . . . . . . . . . . . 96
  143. . . . . . . . . . . . . . 192
  144. . . . . . . . . . . . . . . 384
  145. . . . . . . . . . . . . . . . 768
  146.  
  147.  
  148. And, without further ado, the fully expanded code. This is how I wrote it, the
  149. whitespaceless and commentless code came after. This will also run exactly as
  150. the code above.
  151.  
  152.  
  153. &[ define func: push a 2 to the stack ]x
  154. {2 &ii}
  155.  
  156. &[ set initial stack state to ( 16, 1 ) ]x
  157. &i2qq
  158.  
  159. &[ before execution, copy the top value (16) to the ALT stack ]x
  160. t
  161.  
  162. &[ define and call recursive function ]x
  163. &[ expects initial stack ( itr, val, ... ) with ALT stack ( initial val ) ]x
  164. {R
  165.  
  166. &[ if itr > 0 ]x
  167. [
  168.  
  169. &[ output dots to console ]x
  170.  
  171. &[ get num dots to output ]x
  172. t| &[ ALT: itr, init ]x
  173. @ &[ ALT: init, itr ]x
  174. - &[ ALT: init-itr, init, itr ]x
  175.  
  176. &[ while( num-- ) print ". " ]x
  177. [d". "]
  178.  
  179. &[ reset ALT stack ]x
  180. x &[ ALT: init, itr ]x
  181. X| &[ ALT: init ]x
  182.  
  183. &[ itr-- ]x
  184. d
  185.  
  186. &[ reorganize ]x
  187. @ &[ val, itr, ... ]x
  188.  
  189. &[ print val ]x
  190. :
  191.  
  192. &[ print a newline ]x
  193. 2iqi;x
  194.  
  195. &[ push val*2 ]x
  196. 2*X &[ val*2, val, itr, ... ]x
  197.  
  198. &[ reorganize ]x
  199. @ &[ val, val*2, itr, ... ]x
  200. $ &[ val*2, itr, ..., val ]x
  201. @ &[ itr, val*2, ..., val ]x
  202.  
  203. &[ call recursively ]x
  204. R
  205.  
  206. &[ remove val*2 and undo reorganize ]x
  207. X &[ itr, ..., val ]x
  208. s &[ val, itr, ... ]x
  209.  
  210. &[ push val-1 ]x
  211. &+X &[ val, val, itr, ... ]x
  212. d &[ val-1, val, itr, ... ]x
  213.  
  214. &[ push (val-1)%3 ]x
  215. 2i &[ 3, val-1, val, itr, ... ]x
  216. @ &[ val-1, 3, val, itr, ... ]x
  217. % &[ (val-1)%3, val-1, 3, val, itr, ... ]x
  218.  
  219. &[ if (val-1)%3 == 0 ]x
  220. (
  221.  
  222. &[ push (val-1)/3 ]x
  223. x &[ val-1, 3, val, itr, ... ]x
  224. / &[ (val-1)/3, val-1, 3, val, itr, ... ]x
  225.  
  226. &[ if (val-1)/3 > 1 ]x
  227. d[i
  228.  
  229. &[ push ((val-1)/3)%2 ]x
  230. 2 &[ 2, (val-1)/3, val-1, 3, val, itr, ... ]x
  231. @ &[ (val-1)/3, 2, val-1, 3, val, itr, ... ]x
  232. % &[ ((val-1)/3)%2, (val-1)/3, 2, val-1, 3, val, itr, ... ]x
  233.  
  234. &[ if ((val-1)/3)%2 ]x
  235. [
  236.  
  237. &[ reorganize ]x
  238. x &[ (val-1)/3, 2, val-1, 3, val, itr, ... ]x
  239. X &[ (val-1)/3, val-1, 3, val, itr, ... ]x
  240. X &[ (val-1)/3, 3, val, itr, ... ]x
  241. X &[ (val-1)/3, val, itr, ... ]x
  242. @ &[ val, (val-1)/3, itr, ... ]x
  243. $ &[ (val-1)/3, itr, ..., val ]x
  244. @ &[ itr, (val-1)/3, ..., val ]x
  245.  
  246. &[ call recursively ]x
  247. R
  248.  
  249. &[ undo changes to stack ]x
  250. X &[ itr, ..., val ]x
  251. s &[ val, itr, ... ]x
  252. &&&&& &[ 0, 0, 0, 0, 0, val, itr, ... ]x
  253.  
  254. !]
  255.  
  256. &[ undo changes to stack ]x
  257. x &[ (val-1)/3, 2, val-1, 3, val, itr, ... ]x
  258. X &[ (val-1)/3, val-1, 3, val, itr, ... ]x
  259.  
  260. !]
  261.  
  262. ?)
  263.  
  264. &[ undo changes to stack ]x
  265. x &[ val-1, 3, val, itr, ... ]x
  266. x &[ val-1, val, itr, ... ]x
  267. x &[ val, itr, ... ]x
  268. @ &[ itr, val, ... ]x
  269.  
  270. &[ undo itr-- ]x
  271. i
  272.  
  273. !]
  274.  
  275. }R
  276.  
  277.  
  278. ]x
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement