Data update

This commit is contained in:
Ingy döt Net 2025-02-27 18:35:13 -05:00
parent 8e4e15fa56
commit 72eb4943cb
1853 changed files with 35514 additions and 9441 deletions

View file

@ -0,0 +1,138 @@
global right$[] left$[] pos blank$ .
proc show stat$ . .
write stat$
for i to 5 - len stat$
write " "
.
write "| "
h = -len left$[] + 1
for i = h to len right$[]
if i <= 0
c$ = left$[-i + 1]
else
c$ = right$[i]
.
if i = pos
write "*"
else
write " "
.
write c$ & " "
.
print ""
.
func$ get .
if pos <= 0
return left$[-pos + 1]
.
return right$[pos]
.
proc put s$ . .
if pos <= 0
left$[-pos + 1] = s$
else
right$[pos] = s$
.
.
proc mleft . .
pos -= 1
if pos <= 0 and len left$[] < (-pos + 1)
left$[] &= blank$
.
.
proc mright . .
pos += 1
if pos > 0 and len right$[] < pos
right$[] &= blank$
.
.
proc utm stat$ endstat$ bl$ init$ rules$[] trace . .
blank$ = bl$
pos = 1
right$[] = strsplit init$ " "
left$[] = [ ]
for r$ in rules$[]
r$[][] &= strsplit r$ " "
.
repeat
if trace = 1
show stat$
else
if steps mod 1000000 = 0
write "."
.
.
for i to len r$[][]
if r$[i][1] = stat$ and r$[i][2] = get
put r$[i][3]
if r$[i][4] = "left"
mleft
elif r$[i][4] = "right"
mright
.
stat$ = r$[i][5]
break 1
.
.
steps += 1
until stat$ = endstat$
.
if trace = 1
show stat$
else
print ""
print "Steps: " & steps
.
.
#
repeat
s$ = input
until s$ = ""
trace = 1
if substr s$ 1 7 = "5-state"
trace = 0
.
print "--- " & s$ & "---"
s$ = input
in1$[] = strsplit s$ " "
in2$ = input
r$[] = [ ]
repeat
s$ = input
until s$ = ""
r$[] &= s$
.
utm in1$[1] in1$[2] in1$[3] in2$ r$[] trace
print ""
.
#
input_data
Simple incrementer
q0 qf B
1 1 1
q0 1 1 right q0
q0 B 1 stay qf
Three-state busy beaver
a halt 0
0
a 0 1 right b
a 1 1 left c
b 0 1 left a
b 1 1 right b
c 0 1 left b
c 1 1 stay halt
5-state, 2-symbol probable Busy Beaver
A H 0
0
A 0 1 right B
A 1 1 left C
B 0 1 right C
B 1 1 right B
C 0 1 right D
C 1 0 left E
D 0 1 left A
D 1 1 left D
E 0 1 stay H
E 1 0 left A

View file

@ -0,0 +1,51 @@
[ this ] is halt ( --> halt )
[ stack ] is state ( --> s )
[ stack ] is machine ( --> s )
[ state share echo say ": "
split
swap witheach [ echo sp ]
behead nested echo sp
witheach [ echo sp ] cr ] is echotape ( tape head --> )
[ over dip [ unrot poke ] ] is write ( tape head value --> tape head )
[ write
dup 0 = iff
[ dip [ 0 swap join ] ]
else [ 1 - ] ] is left ( tape head value --> tape head )
[ write
1+
over size over = if
[ dip [ 0 join ] ] ] is right ( tape head value --> tape head )
[ write ] is stay ( tape head value --> tape head )
[ 0 state put
rot machine put
[ 2dup echotape
2dup peek
machine share
state share peek
swap peek do
state replace
state share
halt = until ]
echotape
state release
machine release ] is turing ( machine tape head --> )
say "Simple Incrementer"
cr cr
' [ [ [ 1 stay halt ] [ 1 right 0 ] ] ]
' [ 1 1 1 ] 0
turing
cr cr
say "Three-state Busy Beaver"
cr cr
' [ [ [ 1 right 1 ] [ 1 left 2 ] ]
[ [ 1 left 0 ] [ 1 right 1 ] ]
[ [ 1 left 1 ] [ 1 stay halt ] ] ]
' [ 0 ] 0
turing