Best street side
Calculate location of best street side
by Vo_Vik
HTML
<!DOCTYPE html>
<html>
<head>
<title>Best location</title>
<meta charset="UTF-8" />
</head>
<body>
<div id="app">
<h2>Street params</h2>
<div id="params">
<label>Coma separated list of available buildings</label>
<br/><input size="256" id="buildings" value="shop,gym,school" />
<br/><label>Street size<label>
<br/><input id="street_size" value="10" />
<br/><label>Max buildings per side</label>
<br/><input id="max_per_side" value="3" />
<br/><label>Search for buildings(Coma separated list)</label>
<br/><input id="search" size="256" value="shop,gym,school" />
<br/><label>Density coefficient (0-1]</label>
<br/><input id="density" value="0.25" />
<br/><label>Visualization delay [0-1000]</label>
<br/><input id="delay" value="500" />
<br/><button type="button" onclick="generate()" id="run">Generate Street</button>
<button type="button" onclick="run()" id="run">Find Best Spot</button>
</div>
<div id="streetJSON"></div>
<div id="streetMap">
<ul id="streetMapUl"></ul>
</div>
</div>
</body>
</html>
CSS
.black::before {
color: black; /*bullet color*/
}
.green::before {
color: green; /*bullet color*/
}
JavaScript
var street = [];
var buildings = [];
var delay = 1000;
var best_spot = -1;
function generate() {
console.log("start street generation");
generateStreet();
};
function run() {
var destinations = [];
var last_locations = [];
var search = document.getElementById("search").value.split(",");
console.log("search:"+search);
console.log("total buildings to search:"+search.length);
var NotFoundException = {};
try {
search.forEach(function (search_building, index){
if (buildings.indexOf(search_building) === -1) {
NotFoundException.message = search_building + " not found";
throw NotFoundException;
}
last_locations[index] = -1;
});
} catch (e) {
if (e !== NotFoundException) throw e;
console.log(NotFoundException.message);
}
delay = parseInt(document.getElementById("delay").value);
if (delay > 1000) delay = 1000;
if (delay < 0) delay = 0;
console.log("delay:"+delay);
try {
street = JSON.parse(document.getElementById("streetJSON").innerHTML);
} catch (e) {
return;
}
console.log("street size:"+street.lenght);
if (!street.length) return;
(function streetLoop(size, side_index) {
console.log("Checking side #"+side_index);
document.getElementById("side"+side_index).className = "green";
search.forEach(function (search_building, index){
if (street[side_index].indexOf(search_building) !== -1) {
}
});
setTimeout(function () {
document.getElementById("side"+side_index).className = "black";
}, delay);
if (side_index++ < size) {
setTimeout(streetLoop(size, side_index), delay);
}
}) (street.lenght, 0);
}
function generateStreet () {
best_spot = -1;
street = [];
var street_size = parseInt(document.getElementById("street_size").value);
console.log("street_size:"+street_size);
buildings = document.getElementById("buildings").value.split(",");
console.log("buildings:"+buildings);
console.log("total buildings...