finished part 2 of day 2
This commit is contained in:
parent
1c171f77bd
commit
2c1151fe33
|
@ -0,0 +1,141 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
const inputText = fs.readFileSync("./input.txt").toString("utf-8");
|
||||||
|
const splitInputText = inputText.split("\n");
|
||||||
|
|
||||||
|
const splitTestData = `
|
||||||
|
A Y
|
||||||
|
B X
|
||||||
|
C Z
|
||||||
|
`.split("\n");
|
||||||
|
|
||||||
|
function processData(input) {
|
||||||
|
let currentScore = 0;
|
||||||
|
|
||||||
|
input.forEach((line) => {
|
||||||
|
if (line.length > 0) {
|
||||||
|
//add line check the moves are ABC / XYZ if not skip line
|
||||||
|
const playerOneMove = convertMove(line[0]);
|
||||||
|
const playerTwoMove = calculatePlayerMove(playerOneMove, line[2]);
|
||||||
|
// console.log(playerTwo);
|
||||||
|
const score = calculateScoreForRound(playerOneMove, playerTwoMove);
|
||||||
|
|
||||||
|
currentScore += score;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return currentScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [calculatePlayerMove description]
|
||||||
|
*
|
||||||
|
* @param {String} playerMove [playerMove description]
|
||||||
|
* @param {String} outcome [outcome description]
|
||||||
|
*
|
||||||
|
* @return {String} [return description]
|
||||||
|
*/
|
||||||
|
function calculatePlayerMove(playerMove, outcome) {
|
||||||
|
let calculatedMove = "";
|
||||||
|
|
||||||
|
// WIN
|
||||||
|
if (outcome === "Z") {
|
||||||
|
switch (playerMove) {
|
||||||
|
case "rock":
|
||||||
|
calculatedMove = "paper";
|
||||||
|
break;
|
||||||
|
case "paper":
|
||||||
|
calculatedMove = "scissors";
|
||||||
|
break;
|
||||||
|
case "scissors":
|
||||||
|
calculatedMove = "rock";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (outcome === "Y") {
|
||||||
|
//DRAW
|
||||||
|
calculatedMove = playerMove;
|
||||||
|
} else if (outcome === "X") {
|
||||||
|
// LOSE
|
||||||
|
switch (playerMove) {
|
||||||
|
case "rock":
|
||||||
|
calculatedMove = "scissors";
|
||||||
|
break;
|
||||||
|
case "paper":
|
||||||
|
calculatedMove = "rock";
|
||||||
|
break;
|
||||||
|
case "scissors":
|
||||||
|
calculatedMove = "paper";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return calculatedMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [convertMove description]
|
||||||
|
*
|
||||||
|
* @param {String} input [input description]
|
||||||
|
*
|
||||||
|
* @return {String} [return description]
|
||||||
|
*/
|
||||||
|
function convertMove(input) {
|
||||||
|
let move = "";
|
||||||
|
|
||||||
|
let santatizedInput = input.toUpperCase();
|
||||||
|
|
||||||
|
// console.log(santatizedInput);
|
||||||
|
switch (santatizedInput) {
|
||||||
|
case "A":
|
||||||
|
case "X":
|
||||||
|
move = "rock";
|
||||||
|
break;
|
||||||
|
case "B":
|
||||||
|
case "Y":
|
||||||
|
move = "paper";
|
||||||
|
break;
|
||||||
|
case "C":
|
||||||
|
case "Z":
|
||||||
|
move = "scissors";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return move;
|
||||||
|
}
|
||||||
|
|
||||||
|
function calculateScoreForRound(playerOneMove, playerTwoMove) {
|
||||||
|
let score = 0;
|
||||||
|
switch (playerTwoMove) {
|
||||||
|
case "rock":
|
||||||
|
score = 1;
|
||||||
|
break;
|
||||||
|
case "paper":
|
||||||
|
score = 2;
|
||||||
|
break;
|
||||||
|
case "scissors":
|
||||||
|
score = 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playerOneMove === playerTwoMove) {
|
||||||
|
// draw
|
||||||
|
score += 3;
|
||||||
|
} else if (
|
||||||
|
(playerOneMove === "rock" && playerTwoMove === "scissors") ||
|
||||||
|
(playerOneMove === "paper" && playerTwoMove === "rock") ||
|
||||||
|
(playerOneMove === "scissors" && playerTwoMove === "paper")
|
||||||
|
) {
|
||||||
|
// loss player 1
|
||||||
|
} else {
|
||||||
|
// win for player 2
|
||||||
|
score += 6;
|
||||||
|
}
|
||||||
|
console.log(`P1: ${playerOneMove} P2:${playerTwoMove} = ${score}`);
|
||||||
|
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("TestData, Expected 12 got " + processData(splitTestData));
|
||||||
|
|
||||||
|
console.log("Real Data, got " + processData(splitInputText));
|
Loading…
Reference in New Issue