Advent of Code 2022: Day 3

Comparing Arrays and find uniques

by Amy L

HTML

<link rel="stylesheet" href="https://adventofcode.com/static/style.css?30">
<h1><a href="https://adventofcode.com/2022/day/3" target="_blank">Day 3</a></h1>
<diV class="puzzle-input">
  <label for="INPUT_DATA">Input</label>
  <textarea id="INPUT_DATA" autocomplete="off" placeholder="paste your input here" rows="7" cols="50"></textarea>
</diV>
<dl>
<dt>Part 1</dt>
  <dd>
    <label>Answer:
      <input type="text" id="answer1" readonly />
    </label>
  </dd>
  
  <dt>Part 2</dt>
  <dd>
    <label>Answer:
      <input type="text" id="answer2" readonly />
    </label>
  </dd>
</dl>

JavaScript 1.7

const PRIORITY_VALUES = (function generatePriorityValues() {
	const alpha = 'abcdefghijklmnopqrstuvwxyz';
  return `_${alpha}${alpha.toUpperCase()}`;
}());
 
function Day3(input) {
   function solvePart1(input) {
    const bags = getBags(input);
    return bags
      .map((bag) => findItemsThatExistInBothCompartments(bag))
      .reduce((subtotal, item) => subtotal += getPriorityValue(item), 0);
  }
  function solvePart2(input) {
    const groups = groupedBags(getBags(input));
    return groups
      .map((group) => {
        const first = compareCompartments(group[0], group[1]);
        const second = compareCompartments(group[1], group[2]);
        const third = compareCompartments(first.join(''), second.join(''));
        return getUnique(third);
      })
      .reduce((subtotal, item) => subtotal += getPriorityValue(item), 0);
  }
  
  return {
  	part1: solvePart1(input),
    part2: solvePart2(input)
  };
}

document.addEventListener('DOMContentLoaded', () => {
  getInputData('INPUT_DATA', (input) => {
  	const answers = Day3(input);
    const [answer1El, answer2El] = [
      document.getElementById('answer1'),
      document.getElementById('answer2')
    ];
    answer1El.value = answers.part1;
    answer2El.value = answers.part2;
  });
});

/*******************************************************************
	Utility libs
**/
function getPriorityValue(item) {
	return PRIORITY_VALUES.indexOf(item);
}
function getBags(everything) {
	return everything.split('\n');
}
function findItemsThatExistInBothCompartments(items) {
	const numItemsPerCompartment = items.length / 2;
  const leftCompartment = items.substr(0, numItemsPerCompartment);
  const rightCompartment = items.substr(numItemsPerCompartment);
  const matchedItemsInLeft = compareCompartments(leftCompartment, rightCompartment);
  return getUnique(matchedItemsInLeft);
}
function getUnique(items) {
  return [...new Set(items)];
}
function compareCompartments(itemsToCheck, otherCompartmentItems) {
  const...