Goldfish/Implementation

Goldfish implementation in C++ by User:Fergusq.

using namespace std;
 * 1) include
 * 2) include
 * 3) include
 * 4) include

const int SIZE = 10000; const int HALF = SIZE/2;

int vars[SIZE]; string funcs[SIZE];

int runFunction(int n, int p);

int main(int argc, char * argv[]) { if (argc != 2) { cerr << "usage: goldfish " << endl; return 1; }

ifstream in(argv[1]);

if (in.is_open) while (!in.eof) { int n;		string code; char chr;

in >> n;		chr = in.get; while (chr != '\n' && chr != '\r' && !in.eof) { if (!isspace(chr)) code += chr; chr = in.get; }

if (code.length) { funcs[HALF+n] = code; }	} else { cerr << "io error" << endl; return 1; }

runFunction(0, 0);

return 0; }

/** * Runs a function */ int runFunction(int n, int p) { int &v = vars[HALF+n];

string code = funcs[HALF+n];

int i = 0; while (code[i]) { switch (code[i++]) { case 'i': v++; break; case 'I': p++; break; case 'd': v--; break; case 'D': p--; break; case 's': v *= v;			break; case 'S': p *= p;			break; case 'n': v=0; break; case 'N': p=0; break; case 'c': v = runFunction(v, p); break; case 'C': v = runFunction(p, v); break; case 'x': case 'X': { int tmp = p; p = v; v = tmp; }break; case 'm': funcs[HALF+p] = funcs[HALF+v]; break; case 'M': funcs[HALF+v] = funcs[HALF+p]; break; case 'o': cout << (char)v; cout.flush; break; case 'O': cout << (char)p; cout.flush; break; case 'r': cin >> (char&)v; break; case 'R': cin >> (char&)p; break; case 'h': case 'H': exit(0); break; }	}	return v; }