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]},
   ...