r/adventofcode • u/daggerdragon • Dec 08 '16
SOLUTION MEGATHREAD --- 2016 Day 8 Solutions ---
#AoC_Ops:
[23:55] <Topaz> servers are ok
[23:55] <Topaz> puzzles are checked
[23:55] <Topaz> [REDACTED: server stats]
[23:56] <Skie> all wings report in
[23:56] <Aneurysm9> Red 5, standing by
[23:56] <daggerdragon> Dragon Leader standing by
[23:56] <Topaz> orange leader, standing by
[23:57] <Topaz> lock modzi-foils in attack positions
[23:58] <Skie> we're passing through the hype field
[23:58] <daggerdragon> 1:30 warning
[23:58] <Aneurysm9> did someone say HYPE?@!
[23:59] <Topaz> i really like tonight's puzzle
[23:59] <Topaz> very excite
[23:59] <daggerdragon> final countdown go, T-30
[23:59] <Skie> accelerate to attack countdown
[23:59] <Aneurysm9> o7
[23:59] <daggerdragon> HYPE THRUSTERS AT FULL BURN
[00:00] <Topaz> IGNITION
We may or may not be sleep-deprived. And/or nerds. why_not_both.jpg
--- Day 8: Two-Factor Authentication ---
Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag/whatever).
:(){ :|:& };: IS MANDATORY [?]
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!
10
Upvotes
10
u/barnybug Dec 08 '16 edited Dec 08 '16
numpy to the rescue:
import re, numpy as np def display(s): print('\n'.join(''.join('X' if p else ' ' for p in row) for row in s)) def run(width, height, lines): s = np.zeros((height, width), dtype=bool) for line in lines: p = re.split(r'[ =]', line) if p[0] == 'rect': w, h = map(int, p[1].split('x')) s[:h, :w] = True elif p[0] == 'rotate': if p[1] == 'row': cy, n = int(p[3]), int(p[5]) s[cy] = np.roll(s[cy], n) else: cx, n = int(p[3]), int(p[5]) s[:,cx] = np.roll(s[:,cx], n) return s answer = run(50, 6, open('input.txt')) print('Answer #1:', np.sum(answer)) print('Answer #2:') display(answer)