JS Johnson Trotter Permuter
by Taylor Lopez
HTML
<script src="https://cdn.rawgit.com/iAmMortos/JSConsole/master/console.min.js"></script>
JavaScript
function main()
{
enableConsole();
console.log("Starting...");
var jtp = new JTPermuter(chars);
/*
while(jtp.hasMobile())
{
curPerm = jtp.getNext();
var grid = new CharGrid(10, 8, curPerm);
if(grid.valid)
{
console.log(grid);
}
}
//*/
}
function CharGrid(width, height, list)
{
this.valid = true;
this.grid = new Array(height);
for (var y = 0; y < this.grid.length; y++)
{
this.grid[y] = new Array(width);
for (var x = 0; x < this.grid[y].length; x++)
{
this.grid[y][x] = list[y*this.grid[y].length + x];
if (this.checkNewChar(x, y) === false)
{
this.valid = false;
return;
}
}
}
}
CharGrid.prototype.checkNewChar = function(x, y)
{
var checkLeft = true;
var checkUp = true;
if (x == 0)
{
checkLeft = false;
if (this.grid[y][x].conn[3] !== 0)
return false;
}
else if (x == this.grid[y].length - 1)
if (this.grid[y][x].conn[1] !== 0)
return false;
if (y == 0)
{
checkUp = false;
if (this.grid[y][x].conn[0] !== 0)
return false;
}
else if (y == this.grid.length - 1)
if (this.grid[y][x].conn[2] !== 0)
return false;
if (checkLeft)
if (this.grid[y][x].conn[3] !== this.grid[y][x-1].conn[1])
return false;
if (checkUp)
if (this.grid[y][x].conn[0] !== this.grid[y-1][x].conn[2])
return false;
return true;
};
CharGrid.prototype.toString = function()
{
str = "";
for (var i = 0; i < this.grid.length; i++)
str += this.grid[i].join("") + "\n";
return str;
}
var chars = [
{'char':'─', 'conn':[0,1,0,1]},
{'char':'│', 'conn':[1,0,1,0]},
{'char':'┌', 'conn':[0,1,1,0]},
{'char':'┐', 'conn':[0,0,1,1]},
{'char':'└', 'conn':[1,1,0,0]},
...