Skip to content

Instantly share code, notes, and snippets.

@BiosBoy
Last active December 4, 2022 11:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BiosBoy/84457116c1b76ffb4d4ded70143694c2 to your computer and use it in GitHub Desktop.
Save BiosBoy/84457116c1b76ffb4d4ded70143694c2 to your computer and use it in GitHub Desktop.
const fs = require('fs');
const path = require('path');
// RCMRQjLLWGTjnlnZwwnZJRZH
// qnvfhpSbvSppNddNdSqbbmmdPrwttJVrVPDVrJtHtwPZhrPJ
// BFpFzSSqSFFSvQsnWgCMjTLzng
// DbWVcVRRdlLffvtqjTWNgQ
// mJJMpsmrMrJSHJpsHrFHvBvgHvqfNvzffgTvfj
// mMhPjmjmFPJhMSGGcDRlwRdcLGPc
const data = fs.readFileSync(path.join(__dirname, './input2.txt'), 'utf8');
const alphabet = 'abcdefghijklmnopqrstuvwxyz';
const fullAlphabetArr = `${alphabet}${alphabet.toUpperCase()}`.split('');
const rucksacks = data.split(/\r?\n/);
const game1 = () => {
let sum = 0;
rucksacks.forEach((stuff) => {
const rearrangedItems = [];
const firstHalfOfCompartmentItems = stuff.slice(0, stuff.length / 2).split('');
const secondHalfOfCompartmentItems = stuff.slice(stuff.length / 2, stuff.length).split('');
firstHalfOfCompartmentItems.forEach(item => {
const isRearrangeRequired = secondHalfOfCompartmentItems.some(secondHalfItem => secondHalfItem === item);
const isItemAlreadyRearranged = rearrangedItems.find(storedItem => storedItem === item);
if (isRearrangeRequired && !isItemAlreadyRearranged) {
rearrangedItems.push(item);
sum += fullAlphabetArr.findIndex(letter => letter === item) + 1;
}
});
})
return sum;
};
const game2 = () => {
const groupLimit = 3;
const groups = [];
let tempGroup = [];
let sum = 0;
rucksacks.forEach((stuff, idx) => {
if ((idx + 1) % groupLimit === 0) {
tempGroup.push(stuff);
groups.push(tempGroup);
tempGroup = [];
} else {
tempGroup.push(stuff);
}
});
groups.forEach(group => {
const rearrangedItems = [];
const isItemAlreadyRearranged = (item) => rearrangedItems.some(storedItem => storedItem === item);
group[0].split('').forEach(item => {
const findMatch = (itemsList) => itemsList.split('').some(groupItem => groupItem === item);
if (findMatch(group[1]) && findMatch(group[2]) && !isItemAlreadyRearranged(item)) {
rearrangedItems.push(item);
sum += fullAlphabetArr.findIndex(letter => letter === item) + 1;
}
})
})
return sum;
};
console.log(game1(), 'game1');
console.log(game2(), 'game2');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment