Finding 3-Digit Even Numbers

EasyArrayHash TableSortingEnumeration

Solution

export function findEvenNumbers(digits: number[]): number[] {
  function* getDigits(num: number) {
    for (const digit of num.toString()) {
      yield parseInt(digit);
    }
  }
 
  function canMakeNumber(counter: Map<number, number>, num: number) {
    const digitCounter = new Map<number, number>();
    for (const digit of getDigits(num)) {
      digitCounter.set(digit, (digitCounter.get(digit) ?? 0) + 1);
    }
 
    return [...digitCounter.entries()].every(
      ([digit, count]) => count <= (counter.get(digit) ?? 0),
    );
  }
 
  const counter = new Map<number, number>();
  digits.forEach((digit) => {
    counter.set(digit, (counter.get(digit) ?? 0) + 1);
  });
 
  const answer: number[] = [];
  for (let num = 100; num <= 999; num += 2) {
    if (canMakeNumber(counter, num)) {
      answer.push(num);
    }
  }
  return answer;
}