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 =...