Solution

 avatar
unknown
javascript
3 years ago
2.5 kB
7
Indexable
const compareAndFill = (a, b) => {
  let number = [[], []];
  if (a.length > b.length) {
    const diff = a.length - b.length;
    for (var i = 0; i < a.length; i++) {
      if (i < diff) {
        number[1][i] = 0;
      } else {
        number[1][i] = parseInt(b[i - diff]);
      }
      number[0][i] = parseInt(a[i]);
    }
  } else if (a.length < b.length) {
    const diff = b.length - a.length;
    for (var i = 0; i < b.length; i++) {
      if (i < diff) {
        number[0][i] = 0;
      } else {
        number[0][i] = parseInt(a[i - diff]);
      }
      number[1][i] = parseInt(b[i]);
    }
  } else {
    for (var i = 0; i < b.length; i++) {
      number[0][i] = parseInt(a[i]);
      number[1][i] = parseInt(b[i]);
    }
  }
  return number;
};

const fetchNeigbor = (numbers, k) => {
  let found = -1;
  for (var i = k - 1; i >= 0; i--) {
    const j = i;
    if (numbers[j] >= 1 && found == -1) {
      numbers[j] -= 1;
      found = j;
      break;
    }
  }
  if (found != -1) {
    for (var i = found + 1; i < k; i++) {
      numbers[i] += 9;
    }
    numbers[k] += 10;
    return { found: true, numbers };
  } else {
    return { found: false };
  }
};

const subtract = (numbers, negative = false) => {
  let sol = new Array(numbers[0].length).fill(0);

  for (var i = 0; i < numbers[0].length; i++) {
    const j = numbers[0].length - i - 1;
    const a = numbers[0][j];
    const b = numbers[1][j];

    if (a > b) {
      sol[j] = a - b;
      numbers[0][j] = a - b;
      numbers[1][j] = 0;
    } else if (a === b) {
      sol[j] = 0;
      numbers[0][j] = 0;
      numbers[1][j] = 0;
    } else if (a < b) {
      if (j == 0) {
        let temp = numbers[1];
        numbers[1] = numbers[0];
        numbers[0] = temp;
        return subtract(numbers, true);
      }
      const { found, numbers: new_n } = fetchNeigbor(numbers[0], j);
      if (found) {
        numbers[0] = new_n;
        return subtract(numbers, negative);
      } else {
        let temp = numbers[1];
        numbers[1] = numbers[0];
        numbers[0] = temp;
        return subtract(numbers, true);
      }
    }
  }
  return { sol, negative };
};

const main = (a, b) => {
  let sol = [];
  const numbers = compareAndFill(a, b);
  if (numbers[1][0] > numbers[0][1]) {
    let temp = numbers[1];
    numbers[1] = numbers[0];
    numbers[0] = temp;
    sol = subtract(numbers, true);
  } else {
    sol = subtract(numbers);
  }
  console.log(sol);
};

main("021431", "67911");
Editor is loading...