| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #!/usr/bin/env python3
- import sys
- class Screen:
- def __init__(self, width, height):
- self.rows = [[False] * width for y in range(height)]
- def fill_rect(self, width, height):
- for y in range(height):
- for x in range(width):
- self.rows[y][x] = True
- def rotate_row(self, row, amount):
- self.rows[row][:] = self.rows[row][-amount:] + self.rows[row][:-amount]
- def rotate_col(self, col, amount):
- old = [row[col] for row in self.rows]
- for y, row in enumerate(self.rows):
- row[col] = old[y - amount]
- def count_on(self):
- return sum(sum(map(int, row)) for row in self.rows)
- def process(self, f):
- for line in f:
- words = line.split()
- if words[0] == 'rect':
- a, b = words[1].split('x')
- self.fill_rect(int(a), int(b))
- else:
- assert words[0] == 'rotate'
- fn = self.rotate_row if words[1] == 'row' else self.rotate_col
- fn(int(words[2][2:]), int(words[4]))
- def print(self):
- for row in self.rows:
- print(''.join('#' if px else '.' for px in row))
- screen = Screen(50, 6)
- screen.process(sys.stdin)
- print(screen.count_on(), 'pixels on:')
- screen.print()
|