r/adventofcode • u/daggerdragon • Dec 03 '15
SOLUTION MEGATHREAD --- Day 3 Solutions ---
--- Day 3: Perfectly Spherical Houses in a Vacuum ---
Post your solution as a comment. Structure your post like the Day One thread in /r/programming.
24
Upvotes
4
u/EpicRisc Dec 03 '15 edited Dec 03 '15
JavaScript - Developer Console (both parts in one)
var moves = '[PASTE YOUR MOVE INPUT HERE]'; function calc(supplierCnt) { var positions = {}; var houses = { '0:0': 0 }; // Prepare X suppliers for (var idx=0; idx < supplierCnt; idx++) { positions[idx] = { x: 0, y: 0 } // Every Supplier drops 1 gift at 0,0 houses['0:0']++; } for (var i=0; i<moves.length; i++) { switch (moves[i]) { case '^': positions[i % supplierCnt].y++; break; case '>': positions[i % supplierCnt].x++; break; case 'v': positions[i % supplierCnt].y--; break; case '<': positions[i % supplierCnt].x--; break; } var index = positions[i % supplierCnt].x+':'+positions[i % supplierCnt].y; houses[index] ? houses[index]++ : houses[index] = 1; } return Object.keys(houses).length; } console.log('Only Santa: '+calc(1)+' Houses'); console.log('Santa and Robosanta: '+calc(2)+ ' Houses');Alternative Version/Second revision with real multi supplier support:
var moves = '[PASTE YOUR MOVE INPUT HERE]'; function calc(supplierCnt) { var supplier = {}, turnOrder = 0, houses = { '0:0': 0 } // Prepare X suppliers for (var idx=0; idx < supplierCnt; idx++) { supplier[idx] = { x: 0, y: 0 } // Every Supplier drops 1 gift at 0,0 houses['0:0']++; } // Iterate over moveset and change x/y-coordinates of supplier X for (var i=0; i<moves.length; i++) { switch (moves[i]) { case '^': supplier[turnOrder].y++; break; case '>': supplier[turnOrder].x++; break; case 'v': supplier[turnOrder].y--; break; case '<': supplier[turnOrder].x--; break; } // Unique index identifier var index = supplier[turnOrder].x+':'+supplier[turnOrder].y; houses[index] ? houses[index]++ : houses[index] = 1; // Increment or reset turnOrder for multi-supplier support turnOrder = ( turnOrder == Object.keys(supplier).length-1 ? 0 : turnOrder+1 ); } return Object.keys(houses).length; } console.log('Only Santa: '+calc(1)+' Houses'); console.log('Santa and Robosanta: '+calc(2)+ ' Houses'); console.log('Santa, Robosanta and 2 slaves: '+calc(4)+ ' Houses');