const SIZE = 20;
let free = [[0, SIZE]];
let hash = {};
function park(size, lic){
  let ok = false
  for(let i = 0; i < free.length; i++){
    let [start, end] = free[i];
    if(end - start >= size){
      // if(start + size > SIZE) return false
    if(start + size < end){
        free[i] = [start + size, end];
    } else {
        free.splice(i, 1)
    }      
      hash[lic] = [start, size];
      ok = true
      break;
    }
  }
  return ok;
}

function retrieve(lic){
  if(!(lic in hash)) return false;
  let [pos, size] = hash[lic];
    console.log(pos, pos + size)
    let N = free.length;
  if(pos < free[0][0]) {
      if(pos + size == free[0][0]){
          console.log("case 1")
          free[0] = [pos, free[0][1]];
      } else {
          free.unshift([pos, pos + size]);
          console.log("case 2")
      }
  } else if(pos >= free[N - 1][1]){
      if(pos == free[N - 1][1]){
        free[N - 1] = [free[N - 1][0], pos];
          console.log("case 3")
      } else {
          free.push([pos, pos + size]);
          console.log("case 4")
      }
  }
  else {
      for(let i = 0; i < free.length - 1; i++){
          let [start, end] = free[i];
          let [nextStart, nextEnd] = free[i + 1];
          if(pos >= end && pos + size <= nextStart){
              if(pos > end && pos + size < nextStart){
                  free.splice(i + 1, 0, [pos, pos + size]);
                  console.log("case 6")
              } else if(pos == end && pos + size < nextStart){
                  free[i] = [start, pos + size];
                  console.log("case 7")
              } else if(pos > end && pos + size == nextStart){
                  free[i + 1] = [pos, nextEnd];
                  console.log("case 8")
              } else {
                  free.splice(i, 1)
                  free[i] = [start, nextEnd];
                  console.log("case 9")
              }
              break
          }
      }
  }
  delete hash[lic];
  return true;
}


park(3, 'c')
console.log(free, hash)
park(2, 'b')
console.log(free, hash)

park(1, 'a')
console.log(free, hash)

retrieve('b')
console.log(free, hash)

park(2, 'd')
console.log(free, hash)

park(3, 'e')
console.log(free, hash)

retrieve('c')
console.log(free, hash)

retrieve('a')
console.log(free, hash)

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: