Public
Edited
Dec 8, 2022
Insert cell
Insert cell
Insert cell
"Z".charCodeAt(0)
Insert cell
Insert cell
function convertCode(code) {
// convert from ASCII charcode to the code we want
return code >= 97 ? code - 96 : code - 38;
}
Insert cell
function getCode(letter) {
return convertCode(letter.charCodeAt(0));
}
Insert cell
getCode("A")
Insert cell
Insert cell
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Insert cell
alphabet.indexOf("Z") + 1
Insert cell
Insert cell
function getRucksacks(arr) {
return arr.map((d) => {
let c1 = d.slice(0, d.length / 2);
let c2 = d.slice(d.length / 2);
return {
raw: d,
compartment1: c1,
compartment2: c2,
commonElements: getCommonElementsBetweenTwo(c1, c2)
};
});
}
Insert cell
function getCommonElementsBetweenTwo(s1, s2) {
let arr = [];
for (let i = 0; i < s1.length; i++) {
if (s2.indexOf(s1[i]) != -1) {
arr.push(s1[i]);
}
}
return arr.filter((value, index, self) => {
return self.indexOf(value) === index;
});
}
Insert cell
Insert cell
testRucksacks = getRucksacks(testData.split("\n"))
Insert cell
testTotal = testRucksacks
.map((d) => getCode(d.commonElements[0]))
.reduce((acc, cur) => acc + cur)
Insert cell
testRucksacks
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
rawData = FileAttachment("aocdata-3.txt").text()
Insert cell
rucksacks = getRucksacks(rawData.split("\n").slice(0, -1))
Insert cell
total = rucksacks
.map((d) => getCode(d.commonElements[0]))
.reduce((acc, cur) => acc + cur)
Insert cell
rucksacks
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
Insert cell
function getCommonElementsBetweenThree(s1, s2, s3) {
let arr = [];
for (let i = 0; i < s1.length; i++) {
if (s2.indexOf(s1[i]) != -1 && s3.indexOf(s1[i]) != -1) {
arr.push(s1[i]);
}
}
return arr.filter((value, index, self) => {
return self.indexOf(value) === index;
});
}
Insert cell
rucksacks
Insert cell
rucksackGroups = {
let arr = [];
for (let i = 0; i < rucksacks.length; i += 3) {
arr.push({
raw0: rucksacks[i].raw,
raw1: rucksacks[i + 1].raw,
raw2: rucksacks[i + 2].raw,
badge: getCommonElementsBetweenThree(
rucksacks[i].raw,
rucksacks[i + 1].raw,
rucksacks[i + 2].raw
)
});
}
return arr;
}
Insert cell
rucksackGroups.map((d) => getCode(d.badge[0])).reduce((acc, cur) => acc + cur)
Insert cell
rucksackGroups
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more