Public
Edited
May 5, 2023
1 fork
1 star
Insert cell
Insert cell
Insert cell
Insert cell
keypad1FSM = ({
"1": { R: "2", D: "4" },
"2": { L: "1", R: "3", D: "5" },
"3": { L: "2", D: "6" },
"4": { R: "5", U: "1", D: "7" },
"5": { L: "4", R: "6", U: "2", D: "8" },
"6": { L: "5", U: "3", D: "9" },
"7": { R: "8", U: "4" },
"8": { L: "7", R: "9", U: "5" },
"9": { L: "8", U: "6" }
})
Insert cell
Insert cell
function keyPresses(lines, fsm) {
return lines
.map((line) => line.split("").reduce((key, mv) => fsm[key][mv] || key, "5"))
.join("");
}
Insert cell
function part1(input) {
return keyPresses(input.split("\n"), keypad1FSM);
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
keypad2FSM = ({
"1": { D: "3" },
"2": { R: "3", D: "6" },
"3": { L: "2", R: "4", U: "1", D: "7" },
"4": { L: "3", D: "8" },
"5": { R: "6" },
"6": { L: "5", R: "7", U: "2", D: "A" },
"7": { L: "6", R: "8", U: "3", D: "B" },
"8": { L: "7", R: "9", U: "4", D: "C" },
"9": { L: "8" },
A: { R: "B", U: "6" },
B: { L: "A", R: "C", U: "7", D: "D" },
C: { L: "B", U: "8" },
D: { U: "B" }
})
Insert cell
function part2(input) {
return keyPresses(input.split("\n"), keypad2FSM);
}
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