Public
Edited
Dec 6, 2022
1 fork
1 star
Insert cell
Insert cell
Insert cell
input = FileAttachment("input.txt").text()
Insert cell
rpsRounds = input.trim().split("\n").map(round => round.split(" "))
Insert cell
rockValues = new Set(["A", "X"])
Insert cell
paperValues = new Set(["B", "Y"])
Insert cell
scissorsValues = new Set(["C", "Z"])
Insert cell
function findResult([letter1, letter2]) {
// Tie
if (rockValues.has(letter1) && rockValues.has(letter2)) return 3 + 1;
if (paperValues.has(letter1) && paperValues.has(letter2)) return 3 + 2;
if (scissorsValues.has(letter1) && scissorsValues.has(letter2)) return 3 + 3;

// letter2 win
if (scissorsValues.has(letter1) && rockValues.has(letter2)) return 6 + 1;
if (rockValues.has(letter1) && paperValues.has(letter2)) return 6 + 2;
if (paperValues.has(letter1) && scissorsValues.has(letter2)) return 6 + 3;

// letter2 loss
if (rockValues.has(letter2)) return 1;
if (paperValues.has(letter2)) return 2;
return 3;
}
Insert cell
totalScore = rpsRounds
.map(pair => findResult(pair))
.reduce((totalScore, roundScore) => totalScore + roundScore);
Insert cell
Insert cell
function findDecryptedResult([letter1, letter2]) {
// Tie
if (rockValues.has(letter1) && letter2 === "Y") return 3 + 1;
if (paperValues.has(letter1) && letter2 === "Y") return 3 + 2;
if (scissorsValues.has(letter1) && letter2 === "Y") return 3 + 3;

// Win
if (rockValues.has(letter1) && letter2 === "Z") return 6 + 2; // With paper
if (paperValues.has(letter1) && letter2 === "Z") return 6 + 3; // With scissors
if (scissorsValues.has(letter1) && letter2 === "Z") return 6 + 1; // With rock

// Lose
if (rockValues.has(letter1)) return 3; // With scissors
if (paperValues.has(letter1)) return 1; // With rock
return 2; // With paper
}
Insert cell
totalDecryptedScore = rpsRounds
.map(pair => findDecryptedResult(pair))
.reduce((totalScore, roundScore) => totalScore + roundScore);
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