Rule:Bct

From LifeWiki
Revision as of 19:31, 4 October 2023 by Ian07 (talk | contribs) (from discord)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

@RULE bct

An implementation of bitwise cyclic tag.

state 0: Vacuum.

state 1: Data-tape 0. state 2: Data-tape 1.

state 3: Program-tape 0. state 4: Program-tape 1.

state 5: Shifter. Moves both itself and the data tape one unit down to render program execution cyclic.


state 6: Transitory program-tape 0. state 7: Transitory program-tape 1.

state 8: Pre-copying program-tape 0. (Used when a prgm-tape bit is the x in a 1x instruction) state 9: Pre-copying program-tape 1. (Ditto)

state 10: Post-copying program-tape 0. (Used to stop a prgm-tape 1 from moving down before the data has been appended) state 11: Post-copying program-tape 1. (Ditto but 0)

state 12: Rightward-moving data-tape 0. state 13: Rightward-moving data-tape 1.

state 14: Transitory reflector. state 15: Ditto but about to turn into normal reflector.

state 16: To-be-moved-down data-tape 0. state 17: To-be-moved-down data-tape 1.

@COLORS 1 235 235 235 lighter gray 2 30 30 30 darker gray 12 235 235 235 lighter gray 13 30 30 30 darker gray 16 235 235 235 lighter gray 17 30 30 30 darker gray 3 200 200 200 light gray 4 90 90 90 dark gray 5 0 255 255 cyan 14 0 255 255 cyan 15 0 255 255 cyan

@TABLE n_states:18 neighborhood:Moore symmetries:none

var anya={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17} var anyb=anya var anyc=anya var anyd=anya var anye=anya var anyf=anya var anyg=anya var anyh=anya

var dataa={1,2} var datab=dataa

var vacdataa={0,1,2} var vacdatab=vacdataa

var rdataa={12,13} var vacrdataa={0,12,13}

var ddataa={16,17} var vacddataa={0,16,17}

  1. If a shifter is encountered, reflect + shift data tape down 2 cell
  2. go right

vacddataa,1,anya,anyb,anyc,anyd,anye,anyf,5,16 vacddataa,2,anya,anyb,anyc,anyd,anye,anyf,5,17 ddataa,0,anya,anyb,anyc,anyd,anye,anyf,5,0

  1. pull down

vacrdataa,16,anya,anyb,anyc,anyd,anye,anyf,anyg,12 vacrdataa,17,anya,anyb,anyc,anyd,anye,anyf,anyg,13

  1. go left

vacdataa,12,5,anya,anyb,anyc,anyd,anye,anyf,1 vacdataa,13,5,anya,anyb,anyc,anyd,anye,anyf,2

  1. Move rightward-moving data to the right

vacrdataa,anya,anyb,anyc,anyd,anye,anyf,rdataa,anyg,rdataa rdataa,anya,anyb,anyc,anyd,anye,anyf,0,anyg,0

  1. shift the shifter down two as well
  2. right

0,5,anya,anyb,anyc,anyd,anye,0,rdataa,14

  1. left

0,5,dataa,0,anyb,anyc,anyd,anye,anyd,14

  1. finally

0,14,anya,anyb,anyc,anyd,anye,anyf,anyg,15 14,anya,anyb,anyc,anyd,anye,anyf,anyg,anyh,0 0,15,anya,anyb,anyc,anyd,anye,anyf,anyg,5 15,anya,anyb,anyc,anyd,anye,anyf,anyg,anyh,0

  1. delete shifter at end of its input stream

5,0,0,0,ddataa,0,0,0,0,0 5,0,0,0,0,0,dataa,0,0,0

  1. Shift prgm tape down 1 if rightward data above it

3,rdataa,anya,anyb,anyc,anyd,anye,anyf,anyg,10 4,rdataa,anya,anyb,anyc,anyd,anye,anyf,anyg,11

  1. If a data bit has a shifter to its right,don't attempt to copy it

dataa,anya,anyb,5,anyc,anyd,anye,anyf,anyg,0

  1. If a prgm-tape 1 is encountered, shift it downward
  2. and append the command to its left (by copying+shifting down) onto the right end of the data tape,
  3. if the leftmost bit is 1 -- otherwise just shift it down
  4. ----
  5. check the x in 1x
  6. leftmost bit 1?

3,anya,2,4,anyb,anyc,anyd,anye,anyf,8 # copy+shift down 4,anya,2,4,anyb,anyc,anyd,anye,anyf,9 # copy+shift down

  1. ----
  2. leftmost bit 0?

3,anya,1,4,anyb,anyc,anyd,anye,anyf,6 # just shift down 4,anya,1,4,anyb,anyc,anyd,anye,anyf,7 # just shift down

  1. ----
  2. shift the 1 in 1x down

4,dataa,anya,anyb,anyc,anyd,anye,anyf,anyg,7 0,7,anya,anyb,anyc,anyd,anye,anyf,anyg,11

  1. ----
  2. state 8 becomes state 1 and below it state 3

8,anya,anyb,anyc,anyd,anye,anyf,anyg,anyh,1 0,8,anya,anyb,anyc,anyd,anye,anyf,anyg,10

  1. state 9 becomes state 2 and below it state 4

9,anya,anyb,anyc,anyd,anye,anyf,anyg,anyh,2 0,9,anya,anyb,anyc,anyd,anye,anyf,anyg,11

  1. ----
  2. states 10 and 11 become 3 and 4 moving down

0,10,anya,anyb,anyc,anyd,anye,anyf,anyg,3 0,11,anya,anyb,anyc,anyd,anye,anyf,anyg,4 10,anya,anyb,anyc,anyd,anye,anyf,anyg,anyh,0 11,anya,anyb,anyc,anyd,anye,anyf,anyg,anyh,0

  1. If a bit of data has reached the right end of the tape,append it
  2. and delete the waiting data

dataa,anya,anyb,0,anyc,datab,anyd,anye,anyf,datab

  1. next line accounts for single-item data tape being appended to

dataa,anya,anyb,0,datab,anyd,anye,anyf,anyg,datab dataa,datab,0,anya,anyb,anyc,anyd,anye,anyf,0 7,anya,anyb,anyc,anyd,anye,anyf,anyg,anyh,0

  1. If a prgm-tape 0 is encountered, shift it down and delete the leftmost data-tape bit

3,dataa,anya,anyb,anyc,anyd,anye,anyf,anyg,6 0,6,anya,anyb,anyc,anyd,anye,anyf,anyg,10 #3 6,anya,anyb,anyc,anyd,anye,anyf,anyg,anyh,0

  1. Delete the leftmost bit if a program-tape 0 is encountered

0,anya,anyb,dataa,3,anyc,anyd,anye,anyf,0

  1. Keep a data-tape bit in place if it's waiting below the data tape (to prepare for moving to the end)

dataa,datab,anya,anyb,anyc,anyd,anye,anyf,anyg,dataa 0,dataa,anya,datab,anyb,anyc,anyd,anye,anyf,0

  1. Move data tape to the left otherwise

0,anya,dataa,datab,anyb,anyc,anyd,anye,anyf,0 vacdataa,anya,anyb,vacdatab,anyc,anyd,anye,anyf,anyg,vacdatab