View Single Post
Luke 8, Advent of Code:

SPOILER ALERT! Vis spoiler

Mistenker at denne koden ikke akkurat er effektiv, men den fungerer. Brukte numpy, og transponerte bare matrisen for å "rulle" kolonnene.

Resultat:



Kode:

Kode

import numpy as np


def print_screen(screen):
    print '\n'.join(''.join('#' if i == 1 else ' '  for i in row) for row in screen)


def roll_row(screen, row, n):
    screen[row] = np.roll(screen[row], n)


def roll_col(screen, col, n):
    tmp = np.transpose(screen)
    tmp[col] = np.roll(tmp[col], n)
    screen = np.transpose(tmp)

def rect(screen, x, y):
    screen[0:y, 0:x] = 1

def day_8():
    screen = np.zeros((6, 50), dtype=np.int)
    with open('8.txt') as ifile:
        for instruction in ifile:
            words = instruction.strip().split(' ')
            if 'rect' in instruction:
                rect(screen, *map(int, words[1].split('x')))
            else:
                n = int(words[2][2:])
                x = int(words[-1])
                if words[1] == 'row':
                    roll_row(screen, n, x)
                else:
                    roll_col(screen, n, x)
    print_screen(screen)
    print '\nPixels lit: {}'.format(sum(sum(screen)))

if __name__ == '__main__':
    day_8()