Universal Turing machine: Difference between revisions

m
mNo edit summary
Line 598:
#include <hopper.h>
#proto UniversalTuringMachine(_X_)
 
main:
.ctrlc
 
stbegin=0,stEnd=0,state=0,ptr=0
tape=0,states=0,rules=0,long=0,tapeSize=0
file="turing/prg01prg03.tm"
// load program, rules & states:
jsub(load Archive)
 
// RUN Universal Turing Machine program:
i=1
Line 617:
println
exit(0)
 
.locals
 
printTape:
#hl{
print(tape[1:(ptr-1)],"\R",tape[ptr],"\OFF",tape[(ptr+1):end],"\n")
//sleep(0.1)
}
up(1)
clear mark
back
 
Universal Turing Machine(rules)
cont=1
clear mark
 
#hl{
if( rules[1] == state )
Line 638:
tape[ptr] = rules[3]
ptr += rules[4]
if(ptr==0)
}
++tapeSize
{tapeSize,tape},array(RESIZE),
{0,1,tape}, array(INSERT), ++ptr
#hl{
else if(ptr>tapeSize)
}
++tapeSize
{tapeSize,tape},array(RESIZE),
[tapeSize]{0},put(tape),clear mark
#hl{
endif
state = rules[5]
if(state == stEnd)
Line 649 ⟶ 662:
}, {cont}
back
 
load Archive:
{","}tok sep
Line 663 ⟶ 676:
clear mark
{0}reshape(tape)
size(tape),lengthTape=0,mov(lengthTape),[2]get(lengthTape),mov(tapeSize)
#hl{
stbegin=states[1,1]
Line 673 ⟶ 687:
back
</lang>
 
Program PRG01.TM:
<pre>row 1: tape.
row 2: initial state, halt state, and initial pointer position.
row 3 to end, columns 1 to 5: rules.</pre>
<pre>
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Line 686 ⟶ 701:
c,0,1,LEFT,b
c,1,1,STAY,halt
</pre>
Program PRG02.TM:
<pre>
1,1,1,0,0
q0,qf,1
q0,1,1,RIGHT,q0
q0,0,1,STAY,qf
</pre>
Program PRG03.TM:
<pre>
0,0,0,0,0
A,H,1
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
</pre>
{{out}}
<pre>
PRG01.TM:
0111111000000000000000000
111111000
PRG02.TM:
11110
PRG03.TM (fragment, and veeeery slow :( ):
1111111111111100100100100100100100100100100100100100100100100100100100100111
</pre>
 
=={{header|APL}}==
{{works with|Dyalog APL}}
546

edits