Skip to content

Instantly share code, notes, and snippets.

@questsin
Created February 20, 2019 14:57
Show Gist options
  • Save questsin/03666441ab85be55d187d007550d41a5 to your computer and use it in GitHub Desktop.
Save questsin/03666441ab85be55d187d007550d41a5 to your computer and use it in GitHub Desktop.
var startStr = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
var board = [ 'rnbqkbnr','pppppppp','8','8','8','8','PPPPPPPP','RNBQKBNR'];
var meta = ' w KQkq - 0 1';
function generateChess960() {
var C960Array = new Array(8);
var str = "01234567";
var Bwx = (Math.floor(Math.random() * 4) * 2) + 1;
C960Array[Bwx] = "B";
var Bbx = Math.floor(Math.random() * 4) * 2;
C960Array[Bbx] = "B";
for (var i = str.length - 1; i >= 0; i--) {
if ((str.charAt(i) == Bbx) || (str.charAt(i) == Bwx))
str = str.substr(0, i) + str.substr(i + 1);
}
var Qx = Math.floor(Math.random() * 6);
C960Array[str.charAt(Qx)] = "Q";
str = str.substr(0, Qx) + str.substr(Qx + 1);
var Nx = Math.floor(Math.random() * 5);
C960Array[str.charAt(Nx)] = "N";
str = str.substr(0, Nx) + str.substr(Nx + 1);
Nx = Math.floor(Math.random() * 4);
C960Array[str.charAt(Nx)] = "N";
str = str.substr(0, Nx) + str.substr(Nx + 1);
C960Array[str.charAt(0)] = "R";
str = str.substr(1);
C960Array[str.charAt(0)] = "K";
str = str.substr(1);
C960Array[str] = "R";
return C960Array.join("");
}
function Chess960Number(str) {
var Bb, Bw;
var tempStr = str.replace(/Q|B/g, "");
var N1 = tempStr.indexOf("N");
var N2 = tempStr.lastIndexOf("N");
tempStr = str.replace(/B/g, "");
var Q = tempStr.indexOf("Q");
for (var i = 0; i < 4; i++) {
if (str.charAt(i * 2) == "B")
Bb = i;
if (str.charAt((i * 2) + 1) == "B")
Bw = i;
}
return (96 * (5 - (((3 - N1) * (4 - N1)) / 2) + N2)) + (16 * Q) + (4 * Bb) + Bw;
}
function generate960FEN() {
var x = generateChess960();
board[0] = x.toLowerCase();
board[7] = x.toUpperCase();
return board.join("/") + meta;
}
function generateFEN() {
return startStr;
}
console.log(generateFEN());
console.log(generate960FEN());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment