#include <iostream>
#include <windows.h>
#include <iterator>
#include <fstream>
#include <string>
using namespace std;
const int N = 100; // Line amount
const int n = 5; // Rule amount
int rule = 0, length = 0;
void reader(int &head, string &tape, string a[N][n]);
int main()
{
int head, position;
string tape;
string p, d = "0";
string a[N][n] = { "" };
reader(head, tape, a);
position = head - 1; // variable position
p = tape[position]; // variable in the line
while (d != "X")
{
for (int y = 0; y < length; y++)
if ((d == a[y][0]) && (p == a[y][1]))
{
tape[position] = a[y][2][0];
if (a[y][3] == "L") // if string equals L (or R) it switches/moves
position--;
else
position++;
p = tape[position];
d = a[y][4];
y = length;
}
for (int j = 0; j < rule; j++)
{
cout << tape[j];
//Sleep(1);
}
cout << endl;
}
system("PAUSE");
return 0;
}
void reader(int &head, string &tape, string a[N][n])
{
string filename;
cout << "which file do you want to open?" << endl;
cin >> filename;
ifstream df(filename.c_str());
df >> head;
//cout << head << endl;
df >> tape;
rule = tape.size(); // how many symbols we have in our line
//cout << tape << endl;
for (int i = 0; i < N; i++)
if (df >> a[i][0])
{
//cout << a[i][0] << ' ';
for (int j = 1; j < n; j++)
{
df >> a[i][j];
//cout << a[i][j] << ' ';
}
//cout << endl;
}
else
{
length = i; //how many lines of rules we have
i = N;
}
//cout << rule << endl;
//cout << length << endl;
//cout << tape[23] << endl;
df.close();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8d2luZG93cy5oPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxmc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxMDA7IC8vIExpbmUgYW1vdW50CmNvbnN0IGludCBuID0gNTsgLy8gUnVsZSBhbW91bnQKCmludCBydWxlID0gMCwgbGVuZ3RoID0gMDsKCnZvaWQgcmVhZGVyKGludCAmaGVhZCwgc3RyaW5nICZ0YXBlLCBzdHJpbmcgYVtOXVtuXSk7CgppbnQgbWFpbigpCnsKICAgIGludCBoZWFkLCBwb3NpdGlvbjsKICAgIHN0cmluZyB0YXBlOwogICAgc3RyaW5nIHAsIGQgPSAiMCI7CiAgICBzdHJpbmcgYVtOXVtuXSA9IHsgIiIgfTsKICAgIHJlYWRlcihoZWFkLCB0YXBlLCBhKTsKICAgIHBvc2l0aW9uID0gaGVhZCAtIDE7CS8vIHZhcmlhYmxlIHBvc2l0aW9uCiAgICBwID0gdGFwZVtwb3NpdGlvbl07CS8vIHZhcmlhYmxlIGluIHRoZSBsaW5lCiAgICB3aGlsZSAoZCAhPSAiWCIpCiAgICB7CiAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBsZW5ndGg7IHkrKykKICAgICAgICAgICAgaWYgKChkID09IGFbeV1bMF0pICYmIChwID09IGFbeV1bMV0pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0YXBlW3Bvc2l0aW9uXSA9IGFbeV1bMl1bMF07CiAgICAgICAgICAgICAgICBpZiAoYVt5XVszXSA9PSAiTCIpIC8vIGlmIHN0cmluZyBlcXVhbHMgTCAob3IgUikgaXQgc3dpdGNoZXMvbW92ZXMKICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi0tOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICAgICAgICBwID0gdGFwZVtwb3NpdGlvbl07CiAgICAgICAgICAgICAgICBkID0gYVt5XVs0XTsKICAgICAgICAgICAgICAgIHkgPSBsZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJ1bGU7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgdGFwZVtqXTsKICAgICAgICAgICAgLy9TbGVlcCgxKTsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQogICAgc3lzdGVtKCJQQVVTRSIpOwogICAgcmV0dXJuIDA7Cn0Kdm9pZCByZWFkZXIoaW50ICZoZWFkLCBzdHJpbmcgJnRhcGUsIHN0cmluZyBhW05dW25dKQp7CiAgICBzdHJpbmcgZmlsZW5hbWU7CiAgICBjb3V0IDw8ICJ3aGljaCBmaWxlIGRvIHlvdSB3YW50IHRvIG9wZW4/IiA8PCBlbmRsOwogICAgY2luID4+IGZpbGVuYW1lOwoKICAgIGlmc3RyZWFtIGRmKGZpbGVuYW1lLmNfc3RyKCkpOwogICAgZGYgPj4gaGVhZDsKICAgIC8vY291dCA8PCBoZWFkIDw8IGVuZGw7CiAgICBkZiA+PiB0YXBlOwogICAgcnVsZSA9IHRhcGUuc2l6ZSgpOyAvLyBob3cgbWFueSBzeW1ib2xzIHdlIGhhdmUgaW4gb3VyIGxpbmUKICAgIC8vY291dCA8PCB0YXBlIDw8IGVuZGw7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKICAgICAgICBpZiAoZGYgPj4gYVtpXVswXSkKICAgICAgICB7CiAgICAgICAgICAgIC8vY291dCA8PCBhW2ldWzBdIDw8ICcgJzsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCBuOyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRmID4+IGFbaV1bal07CiAgICAgICAgICAgICAgICAvL2NvdXQgPDwgYVtpXVtqXSA8PCAnICc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9jb3V0IDw8IGVuZGw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGxlbmd0aCA9IGk7IC8vaG93IG1hbnkgbGluZXMgb2YgcnVsZXMgd2UgaGF2ZQogICAgICAgICAgICBpID0gTjsKICAgICAgICB9CiAgICAvL2NvdXQgPDwgcnVsZSA8PCBlbmRsOwogICAgLy9jb3V0IDw8IGxlbmd0aCA8PCBlbmRsOwogICAgLy9jb3V0IDw8IHRhcGVbMjNdIDw8IGVuZGw7CiAgICBkZi5jbG9zZSgpOwp9