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...