<div></div>
function shuffle(o){
for (var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
var width = 10
, height = 10
// initialize the grid
var grid = []
, cells = []
// duplicate to avoid overriding
, w = width
, h = height
while (w--) cells.push(0)
while (h--) grid.push(cells)
var N = 1
, S = 2
, E = 4
, W = 8
, dirs = ['N', 'E', 'S', 'W']
, dirsValue = { N: N, E: E, S: S, W: W }
, DX = { E: 1, W: -1, N: 0, S: 0 }
, DY = { E: 0, W: 0, N: -1, S: 1 }
, OPPOSITE = { E: W, W: E, N: S, S: N }
function carve_passages_from(cx, cy, grid) {
var directions = shuffle(dirs)
directions.forEach(function(direction) {
var nx = cx + DX[direction]
, ny = cy + DY[direction]
if (ny >= 0 && ny <= (grid.length - 1) && nx >= 0
&& nx <= (grid.length - 1) && grid[ny][nx] === 0) {
grid[cy][cx] += dirsValue[direction]
grid[ny][nx] += OPPOSITE[direction]
carve_passages_from(nx, ny, grid)
}
})
}
carve_passages_from(0, 0, grid)
document.querySelector('div').innerHTML = grid
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |