adventOfCode/2022/2/part2.ts
2023-12-02 10:46:52 +01:00

75 lines
No EOL
1.9 KiB
TypeScript

const input = await Deno.readTextFile('./input.txt');
const playerValues = {
A: 1,
B: 2,
C: 3,
};
const userMap = {
A: "R",
B: "P",
C: "S",
X: "Lose",
Y: "Draw",
Z: "Win"
};
const resultValues = {
X: 0,
Y: 3,
Z: 6
}
function mapFromValue(value: number) {
return userMap[Object.entries(playerValues).find(([_, val]) => val === value)![0] as keyof typeof playerValues];
}
function mapResultFromValue(value: number) {
return userMap[Object.entries(resultValues).find(([_, val]) => val === value)![0] as keyof typeof resultValues];
}
function log(...args: any[]) {
console.log(args.join("\t"));
}
function logResult(pv: number, ov: number, rv: number, score: number) {
log(mapResultFromValue(rv), pv + " " + mapFromValue(pv), ov + " " + mapFromValue(ov), rv, rv+pv, score);
}
log("state", "pv", "ov", "result", "score", "totalScore");
let score = 0;
for(const line of input.split("\n")) {
const opponent = line[0] as (keyof typeof playerValues);
const result = line[2] as (keyof typeof resultValues);
const ov = playerValues[opponent];
score += resultValues[result];
// simple rock paper scissors
if(result === "Y") {
// need to draw
score += playerValues[opponent];
logResult(ov, ov, resultValues[result], score);
} else if(result === "X") {
// need to win
if(ov === 1) {
score += 3;
logResult(ov, 3, resultValues[result], score);
} else {
score += ov - 1;
logResult(ov, ov - 1, resultValues[result], score);
}
} else {
// need to lose
if(ov === 3) {
score += 1;
logResult(ov, 1, resultValues[result], score);
} else {
score += ov + 1;
logResult(ov, ov + 1, resultValues[result], score);
}
}
}
console.log(score);