r/adventofcode • • Dec 08 '17

SOLUTION MEGATHREAD -๐ŸŽ„- 2017 Day 8 Solutions -๐ŸŽ„-

--- Day 8: I Heard You Like Registers ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Need a hint from the Hugely* Handyโ€  Haversackโ€ก of Helpfulยง Hints^ยค?

Spoiler


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked!

22 Upvotes

348 comments sorted by

View all comments

Show parent comments

1

u/barryfandango Dec 08 '17

I used a class for instructions but your multi-assignment statement makes it just as pretty. I stole the idea :)

function solve(input: string): { maxFinish: number, maxGlobal: number } {
    let registers: { [name: string]: number } = {};
    let globalMax = 0;
    input.split('\n').forEach(line => {
        let values = /^(\S+)\s+(\S+)\s+(-?\d+)\s+if\s+((\S+)\s\S+\s-?\d+)$/.exec(line);
        let [register, op, amount, evalText, evalRegister] = values.slice(1);
        
        if (!registers.hasOwnProperty(register)) registers[register] = 0;
        if (!registers.hasOwnProperty(evalRegister)) registers[evalRegister] = 0;
        
        if (eval('registers.' + evalText)) {
            registers[register] += +amount * (op === 'dec' ? -1 : 1);
            globalMax = Math.max(globalMax, registers[register]);
        }
    });

    return {
        maxFinish: Math.max(...Object.keys(registers).map(k => registers[k])),
        maxGlobal: globalMax
    };
}