tak sem se pokusil ten program pro TS simulovat. tady je zdroj:
#include <stdio.h>
const int max_cycles = 65536 * 32767;
const int dotafter = max_cycles / 256;
const int tape_min = -32768 * 16;
const int tape_max = +32767 * 16;
int tape[-tape_min + tape_max + 1];
int pos = 0;
int state = 1;
int minpos = 0;
int maxpos = 0;
int getval() {
return tape[pos - tape_min];
}
void setval(int val) {
tape[pos - tape_min] = val;
}
bool terminate = false;
void goleft() {
if(pos>tape_min) {
pos--;
if(pos<minpos) minpos = pos;
} else {
printf("left -> out of range!\n");
terminate = true;
}
}
void goright() {
if(pos<tape_max) {
pos++;
if(pos>maxpos) maxpos = pos;
} else {
printf("goright() -> out of range!\n");
terminate = true;
}
}
int main(void) {
printf("br0\n");
for(int i = tape_min; i <= tape_max; i++) {
tape[i - tape_min] = 0;
}
bool terminate = false;
printf("br1\n");
int c = max_cycles;
printf("br2\n");
do {
switch(getval()) {
case 0:
switch(state) {
case 1:
state = 2;
setval(1);
goright();
break;
case 2:
state = 3;
setval(0);
goright();
break;
case 3:
state = 4;
setval(1);
goleft();
break;
case 4:
state = 5;
setval(0);
goleft();
break;
case 5:
state = 1;
setval(0);
goright();
break;
case 6:
state = 1;
setval(1);
goleft();
break;
default:
printf("0, 7 \n");
terminate = true;
}
break;
case 1:
switch(state) {
case 1:
state = 6;
setval(0);
goleft();
break;
case 2:
state = 4;
setval(0);
goright();
break;
case 3:
state = 5;
setval(1);
goright();
break;
case 4:
state = 4;
setval(0);
goleft();
break;
case 5:
state = 3;
setval(1);
goright();
break;
case 6:
state = 7;
setval(1);
goright();
break;
default:
printf("1, 7 \n");
terminate = true;
}
break;
default:
terminate = true;
}
c--;
if(c % dotafter == 0) {
printf(".");
}
terminate = terminate or (c <= 0 );
} while(not terminate);
printf(">>>>>>> %i\n", c);
printf("minpos = %i, maxpos = %i\n\n", minpos, maxpos);
}
ale nedospel sem k zadnemu reseni. po ukonceni (po vynulovani pocitadla - provedlo se 65536*32767=2 147 418 112 kroku) to skoncilo ve stavu:
minpos=-69975, maxpos=38, jelikoz testy s mensim poctem kroku skoncily min 'nalevo', predpokladam, ze jde o nekonecny cyklus...