Skip to content

Instantly share code, notes, and snippets.

@Munksgaard
Created March 21, 2014 14:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Munksgaard/9687950 to your computer and use it in GitHub Desktop.
Save Munksgaard/9687950 to your computer and use it in GitHub Desktop.
Bankopladegenerator
var count = 0;
function nextrow(row) {
var i,j;
for (i = 0; i < 5; i++) {
if (i == 4 && row[i] == 8) {
return null;
} else if (i == 4 || row[i] < row[i+1] - 1) {
row[i]++;
for (j=0; j<i; j++) row[j] = j;
break;
}
}
return row;
}
function nextconf(conf) {
var i,j, k;
for (i = 0; i < 3; i++) {
if (nextrow(conf[i]) == null) {
for (j = 0; j<=i; j++) {
for (k = 0; k<5; k++) conf[j][k] = k;
}
} else {
break;
}
}
count++;
return conf;
}
function validconf(conf) {
var i,j;
var test = [false, false, false, false, false, false, false, false, false];
for (i=0; i<3; i++) {
for (j=0; j<9; j++) {
test[conf[i][j]] = true;
}
}
for (i=0; i<9; i++) {
if (test[i] == false) return false;
}
return true;
}
function nextvalidconf(conf) {
var newconf = nextconf(conf);
if (!validconf(conf)) {
return nextvalidconf(newconf);
} else {
return newconf;
}
}
function sanitizeplade(plade) {
var i,j,n;
for (i=0; i<9; i++) {
n = 0;
for (j=0; j<3; j++) {
if (isNaN(plade[i][j])) {
continue;
}
plade[i][j] = plade[i][j] + n;
n = n + 1;
}
}
return plade;
}
function startplade(conf) {
var plade = [[NaN, NaN, NaN], [NaN, NaN, NaN], [NaN, NaN, NaN], [NaN, NaN, NaN], [NaN, NaN, NaN], [NaN, NaN, NaN], [NaN, NaN, NaN], [NaN, NaN, NaN], [NaN, NaN, NaN]];
var i,j,k;
for (i=0; i<3; i++) {
for (j=0; j<5; j++) {
tmp = conf[i][j];
plade[tmp][i] = conf[i][j] == 0 ? 1 : conf[i][j] * 10;
}
}
return sanitizeplade(plade);
}
function nextplade(conf, plade) {
var i,j,k;
var resetter = startplade(conf);
for (i=0; i<9; i++) {
for (j=0; j<3; j++) {
if (isNaN(plade[i][j])) {
continue;
}
if (plade[i][j] == 90 || plade[i][j] == ((i+1) * 10)-1) {
plade[i][j] = resetter[i][j];
continue;
}
for (k=j+1; k<=3; k++) {
if (k == 3) {
plade[i][j] = plade[i][j] + 1;
return plade;
}
if (isNaN(plade[i][k])) {
continue;
}
if (plade[i][j] + 1 == plade[i][k]) {
plade[i][j] = resetter[i][j];
break;
}
plade[i][j] = plade[i][j] + 1;
return plade;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment