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...