JSFiddle - React, Tailwind, and code Playground
JavaScript
var entries = prompt('How many entries?'),
edgeLength = entries * 3
wallCount = entries * 2
eggCount = entries * 4
// build array
var a = new Array(edgeLength)
for (var i = 0; i < edgeLength; i++) {
a[i] = new Array(edgeLength)
for (var j = 0; j < edgeLength; j++) {
a[i][j] = ' '
}
}
// add outer walls
for (var i = 0; i < edgeLength; i++) {
a[0][i] = '#'
a[edgeLength-1][i] = '#'
a[i][0] = '#'
a[i][edgeLength-1] = '#'
}
// add inner walls
for (var __ = 0; __ < wallCount; __++) {
var wallLength = Math.floor(Math.random() * 9) + 2,
vertical = Math.random() < 0.5,
parallelIndex = Math.floor(Math.random() * (edgeLength - wallLength)),
perpendicularIndex = Math.floor(Math.random() * edgeLength)
for (var i = parallelIndex; i < parallelIndex + wallLength; i++) {
if (vertical) a[i][perpendicularIndex] = '#'
else a[perpendicularIndex][i] = '#'
}
}
// add eggs
for (var __ = 0; __ < eggCount; __++) {
var valid = false
while (!valid) {
var x = Math.floor(Math.random() * edgeLength),
y = Math.floor(Math.random() * edgeLength)
if (a[x][y] == ' ') {
valid = true
a[x][y] = 'o'
}
}
}
// render to ASCII
for (var i = 0; i < a.length; i++) a[i] = a[i].join('')
document.getElementById('p').innerText = a.join('\n')