Public
Edited
Dec 1, 2023
Insert cell
Insert cell
Insert cell
moves = puzzleInput
.split(",")
.map((move) => [move[0], move.substring(1).split("/")])
Insert cell
Insert cell
function dance(progText) {
let programs = [...progText];
for (let [cmd, args] of moves) {
switch (cmd) {
case "s": // Spin
const offset = 16 - Number(args[0]);
programs = [...programs.slice(offset), ...programs.slice(0, offset)];
break;
case "x": // Exchange
const [posA, posB] = args.map(Number);
[programs[posA], programs[posB]] = [programs[posB], programs[posA]];
break;
case "p": // Partner
const [progA, progB] = args;
const [iA, iB] = [programs.indexOf(progA), programs.indexOf(progB)];
[programs[iA], programs[iB]] = [programs[iB], programs[iA]];
break;
}
}
return programs.join("");
}
Insert cell
function part1(input) {
return dance("abcdefghijklmnop");
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
function part2(input) {
let progText = "abcdefghijklmnop";
const [period, _] = AOC.sequenceCycle(100, progText, dance);
for (let i = 0; i < 1000000000 % period; i++) {
progText = dance(progText);
}
return progText;
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
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