mirror of
https://github.com/danbulant/adventOfCode
synced 2026-05-19 12:18:44 +00:00
75 lines
No EOL
1.9 KiB
TypeScript
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); |