Solve 2025-01
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import { mod } from '../../utils/numbers.ts';
|
||||
|
||||
const size = 100;
|
||||
const initialValue = 50;
|
||||
|
||||
function parseInput(input: string) {
|
||||
const regex = /^([LR])(\d*)$/gm;
|
||||
const match = input.matchAll(regex);
|
||||
|
||||
return Array.from(match, (m) => Number(m[2]) * (m[1] === 'L' ? -1 : 1));
|
||||
}
|
||||
|
||||
export function solveFirst(input: string): number {
|
||||
let zeros = 0;
|
||||
parseInput(input).reduce((d, r) => {
|
||||
const newDial = (d + r) % size;
|
||||
if (newDial === 0) {
|
||||
zeros++;
|
||||
}
|
||||
return newDial;
|
||||
}, initialValue);
|
||||
|
||||
return zeros;
|
||||
}
|
||||
export function solveSecond(input: string): number {
|
||||
const rots = parseInput(input);
|
||||
|
||||
let zeros = 0;
|
||||
let dial = initialValue;
|
||||
|
||||
// brute force is easier than thinking
|
||||
for (const rot of rots) {
|
||||
if (rot === 0) {
|
||||
continue;
|
||||
}
|
||||
for (let i = 0; i < Math.abs(rot); i++) {
|
||||
dial = mod(dial + (rot > 0 ? 1 : -1), size);
|
||||
if (dial === 0) {
|
||||
zeros++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return zeros;
|
||||
}
|
||||
Reference in New Issue
Block a user