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