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 = { 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));