JSFiddle - React, Tailwind, and code Playground
by shakhal
HTML
<table>
<tbody id='body'>
</tbody>
</table>
CSS
table{
border:solid;
}
JavaScript
function printArr(arr){
var tr = $("<tr></tr>");
for (var i in arr){
tr.append( $("<td>"+arr[i]+"</td>") );
}
$("#body").append(tr);
}
var inputArr = [0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0];
function calculateDistances(inputArr){
var counter = 0;
var foundFirstOne = false;
var resArr = new Array(inputArr.length);
//iterate array from left to right
for(var i = 0; i < inputArr.length; i++){
if (inputArr[i] == 1){ //look for first 1 digit in inputArr
foundFirstOne = true;
counter = 0;
}
if (foundFirstOne){ //put distance in resArr
resArr[i] = counter;
counter++;
}
else{ //mark digits before first 1 with MAX_VALUE
resArr[i] = Number.MAX_VALUE;
}
}
//iterate array backwards
foundFirstOne = false;
for(var i = inputArr.length; i >= 0; i--){
if (inputArr[i] == 1){ //look for first 1 digit in inputArr
foundFirstOne = true;
counter = 0;
}
if (foundFirstOne){ //put distance in resArr
resArr[i] = Math.min(counter, resArr[i]);
counter++;
}
}
return resArr;
}
//print input array and res array
printArr(inputArr);
printArr(calculateDistances(inputArr));