summaryrefslogtreecommitdiff
authorplurSKI <black.gavin@gmail.com>2010-10-24 02:15:58 (GMT)
committer plurSKI <black.gavin@gmail.com>2010-10-24 02:15:58 (GMT)
commit9a72de4bc75d12c0e52e83dcd7942a1425896f69 (patch)
tree7a8e39c72ee9d68f4cda402dbd2ea0e88381291a
downloadturingAutomata-master.zip
turingAutomata-master.tar.gz
Initial Commitmaster
-rw-r--r--turingAutomata.pde117
1 files changed, 117 insertions, 0 deletions
diff --git a/turingAutomata.pde b/turingAutomata.pde
new file mode 100644
index 0000000..c9d0d52
--- a/dev/null
+++ b/turingAutomata.pde
@@ -0,0 +1,117 @@
+int individualsX = 8; // How many automata across
+int individualsY = 8; // How many automata down
+int pixelSize = 5;
+
+// Colors to represent the symbols
+int[] colorsR = { 255, 0, 0, 255 };
+int[] colorsG = { 0, 255, 0, 255 };
+int[] colorsB = { 0, 0, 255, 255 };
+
+int symbols = 4;
+int states = symbols * symbols;
+int horizontalLen = states * individualsX;
+int verticalLen = states * individualsX;
+
+
+// Layout of an individual turing machine
+// 0 | 1 | 2 | 3
+// DIR | SYMBOL | STATE_A | STATE_B
+
+int[][] indX = new int[individualsX][individualsY];
+int[][] indY = new int[individualsX][individualsY];
+int[][] indState = new int[individualsX][individualsY];
+
+int[][] grid = new int[horizontalLen][verticalLen];
+
+void setup()
+{
+ size(horizontalLen*pixelSize, verticalLen*pixelSize, P2D);
+ frameRate(30);
+ //noLoop();
+ background(0);
+
+ // Randomly set a starting symbol state
+ for(int i = 0; i < horizontalLen; i ++)
+ {
+ for( int j = 0; j < verticalLen; j ++)
+ {
+ grid[i][j] = int(random(symbols));
+ }
+ }
+
+ // Randomly set positions for individuals
+ for(int i = 0; i < individualsX; i ++)
+ {
+ for( int j = 0; j < individualsY; j ++)
+ {
+ indX[i][j] = int(random(horizontalLen));
+ indY[i][j] = int(random(verticalLen));
+ indState[i][j] = int(random(states));
+ }
+ }
+
+
+}
+
+void draw()
+{
+ background(0);
+
+ // Draw the pixels
+ for(int i = 0; i < horizontalLen; i ++)
+ {
+ for( int j = 0; j < verticalLen; j ++)
+ {
+ int curVal = grid[i][j];
+ stroke(0);
+ fill( colorsR[curVal], colorsG[curVal], colorsB[curVal]);
+ rect(i * pixelSize, j * pixelSize, pixelSize, pixelSize);
+ }
+ }
+
+ // Evaluate each individual
+ for(int i = 0; i < individualsX; i ++)
+ {
+ for( int j = 0; j < individualsY; j ++)
+ {
+ int cX = indX[i][j];
+ int cY = indY[i][j];
+ int cState = indState[i][j];
+ int cSym = grid[ cX ][ cY ];
+ int xLookup = i * states + 4 * cSym;
+ int yLookup = j * states + cState;
+
+ //println("(" + cX + "," + cY + ") -- " + cState + " " + cSym);
+ // Write the symbol and change the state
+ grid[ cX ] [ cY ] = grid [xLookup + 1][ yLookup ];
+ indState[i][j] = symbols * (grid [xLookup + 2][ yLookup ]) + grid [xLookup + 3][ yLookup ];
+
+ // Move to new location
+ switch(grid [xLookup][yLookup])
+ {
+ case 0: // Move up
+ if( --cY < 0 ) cY = verticalLen - 1;
+ break;
+ case 1: // Move down
+ if( ++cY >= verticalLen ) cY = 0;
+ break;
+ case 2: // Move left
+ if( --cX < 0 ) cX = horizontalLen - 1;
+ break;
+ case 3: // Move right
+ if( ++cX >= horizontalLen ) cX = 0;
+ break;
+ default:
+ println("Unknown direction");
+ }
+ indX[i][j] = cX;
+ indY[i][j] = cY;
+ }
+ }
+}
+
+void mousePressed()
+{
+ redraw();
+}
+