int[] rows = new int[5]; int[] rowsA = new int[5]; int[] rowsB = new int[5]; boolean waves = true; int add = 1; int maxAdd = 10; void setup() { framerate(10); size(120,120); rows[0] = 1; rows[1] = 1; rows[2] = 1; rows[3] = 1; rows[4] = 1; rowsA[0] = 1; rowsA[1] = 1; rowsA[2] = 1; rowsA[3] = 1; rowsA[4] = 1; rowsB[0] = (int)pow(2,3); rowsB[1] = (int)pow(2,4); rowsB[2] = (int)pow(2,4); rowsB[3] = (int)pow(2,3); rowsB[4] = (int)pow(2,2); } void draw() { background(200); for(int i = 0; i < rows.length; i++) { for(int j = 0; j < rows.length; j++) { if((rows[i] & (int)pow(2,j)) != 0) { fill(255,255,255); rect(100-20*j,20*i,20,20); } } } if(waves) iterateSin(); else iterate(); } void iterate() { rows[0] = rows[1]; rows[1] = rows[2]; rows[2] = rows[3]; rows[3] = rows[4]; rows[4] = rows[4] + add; // good numbers are 2 } void iterateSin() { // seed row[4] and row[3] // group A rowsA[0] = rowsA[1]; rowsA[1] = rowsA[2]; rowsA[2] = rowsA[3]; for(int i = 3; i <= 4; i++) { if((rowsA[i-1] & (int)pow(2,0)) != 0) { // if zero bit of previous row is on if((rowsA[i-2] & (int)pow(2,0)) != 0) { rowsA[i] = (int)pow(2,1); } else { rowsA[i] = (int)pow(2,0); } } else if((rowsA[i-1] & (int)pow(2,4)) != 0) { // if max bit of previous row is on if((rowsA[i-2] & (int)pow(2,4)) != 0) { rowsA[i] = (int)pow(2,3); } else { rowsA[i] = (int)pow(2,4); } } else if(rowsA[i-2] > rowsA[i-1]) { rowsA[i] = rowsA[i-1] >> 1; } else { rowsA[i] = rowsA[i-1] << 1; } } // group B rowsB[0] = rowsB[1]; rowsB[1] = rowsB[2]; rowsB[2] = rowsB[3]; for(int i = 3; i <= 4; i++) { if((rowsB[i-1] & (int)pow(2,0)) != 0) { // if zero bit of previous row is on if((rowsB[i-2] & (int)pow(2,0)) != 0) { rowsB[i] = (int)pow(2,1); } else { rowsB[i] = (int)pow(2,0); } } else if((rowsB[i-1] & (int)pow(2,4)) != 0) { // if max bit of previous row is on if((rowsB[i-2] & (int)pow(2,4)) != 0) { rowsB[i] = (int)pow(2,3); } else { rowsB[i] = (int)pow(2,4); } } else if(rowsB[i-2] > rowsB[i-1]) { rowsB[i] = rowsB[i-1] >> 1; } else { rowsB[i] = rowsB[i-1] << 1; } } for(int i = 0; i < rows.length; i++) { rows[i] = rowsA[i] | rowsB[i]; } } void mousePressed() { if(waves) { waves = false; add = 1; } else { if(add < maxAdd) { add++; } else { waves = true; add = 1; } } setup(); }