Advent of Code 2022: Day 2
Rock, Paper, Scissors and Maps
by Amy L
HTML
<link rel="stylesheet" href="https://adventofcode.com/static/style.css?30">
<h1><a href="https://adventofcode.com/2022/day/2" target="_blank">Day 2</a></h1>
<diV class="puzzle-input">
<label for="INPUT_DATA">Input</label>
<textarea id="INPUT_DATA" autocomplete="off" placeholder="paste your input here" rows="7" cols="50"></textarea>
</diV>
<dl>
<dt>Part 1</dt>
<dd>
<label>Answer:
<input type="text" id="answer1" readonly />
</label>
</dd>
<dt>Part 2</dt>
<dd>
<label>Answer:
<input type="text" id="answer2" readonly />
</label>
</dd>
</dl>
JavaScript 1.7
const CONSTANTS = {
SYMBOLS: {
OPPONENT: {
A: 'ROCK',
B: 'PAPER',
C: 'SCISSORS'
},
ME: {
X: 'ROCK',
Y: 'PAPER',
Z: 'SCISSORS'
},
DESIRED_OUTCOME: {
X: 'LOSE',
Y: 'TIE',
Z: 'WIN'
}
},
VALUES: {
ROCK: 1,
PAPER: 2,
SCISSORS: 3
},
OUTCOMES: {
WIN: 6,
TIE: 3,
LOSE: 0
}
};
const OUTCOME_RESOLUTION = {
ROCK_PAPER: CONSTANTS.OUTCOMES.LOSE,
ROCK_SCISSORS: CONSTANTS.OUTCOMES.WIN,
PAPER_ROCK: CONSTANTS.OUTCOMES.WIN,
PAPER_SCISSORS: CONSTANTS.OUTCOMES.LOSE,
SCISSORS_PAPER: CONSTANTS.OUTCOMES.WIN,
SCISSORS_ROCK: CONSTANTS.OUTCOMES.LOSE
};
function Day2(input) {
const rounds = getRounds(input);
let part1TotalScore = 0;
let part2TotalScore = 0;
rounds.forEach((round) => {
const {opponentRoundScore, myRoundScore} = playRound(round);
// console.log('round', round, opponentRoundScore, myRoundScore)
part1TotalScore += myRoundScore;
const part2RoundScore = playRoundPart2(round);
//console.log('round', round, part2RoundScore)
part2TotalScore += part2RoundScore;
});
return {
part1: part1TotalScore,
part2: part2TotalScore
};
}
document.addEventListener('DOMContentLoaded', () => {
getInputData('INPUT_DATA', (input) => {
const answers = Day2(input);
const [answer1El, answer2El] = [
document.getElementById('answer1'),
document.getElementById('answer2')
];
answer1El.value = answers.part1;
answer2El.value = answers.part2;
});
});
/*******************************************************************
Utility libs
**/
function getRounds(data) {
return data.split('\n').map((round) => {
const [opponentSymbol, mySymbol] = round.split(' ');
return {opponentSymbol, mySymbol};
});
}
function playRound({opponentSymbol, mySymbol}) {
const myShape = getMyShape(mySymbol);
const myScore = shapeScore(myShape);
const opponentShape = getOpponentShape(opponentSymbol);
const opponentScore =...