AOC2022/src/02_RockPaperScissors/RockPaperScissors.ts

44 lines
1.0 KiB
TypeScript

const input = Deno.readTextFileSync('./input.txt').split('\n');
type OP = 'A' | 'B' | 'C';
type ME = 'X' | 'Y' | 'Z';
type RPC = 0 | 1 | 2;
const signVal: Record<OP | ME, RPC> = {
A: 0,
X: 0,
B: 1,
Y: 1,
C: 2,
Z: 2,
};
function rpcPlay(op: RPC, me: RPC): number {
if (op === me) return me + 4;
if (me - op === 1 || me - op === -2) return me + 7;
return me + 1;
}
function getSign(op: RPC, winType: ME): RPC {
if (winType === 'Y') return op;
if (winType === 'X') return ((op + 2) % 3) as RPC;
return ((op + 1) % 3) as RPC;
}
function calcScore(firstPuzzle = true): number {
let myScore = 0;
for (const line of input) {
if (line === '') continue;
const [op, me] = line.split(' ') as [OP, ME];
if (firstPuzzle) myScore += rpcPlay(signVal[op], signVal[me]);
else {
const ops = signVal[op];
myScore += rpcPlay(ops, getSign(ops, me));
}
}
return myScore;
}
console.log('Solution first Puzzle:\t', calcScore());
console.log('Solution second Puzzle:\t', calcScore(false));