#!/usr/bin/env python3
import sys
from itertools import islice
from time import sleep
from intcode import read_program, run_getter

def makegrid(game):
    x, y, ident = islice(game, 3)
    coords = []
    while x != -1:
        coords.append((x, y, ident))
        x, y, ident = islice(game, 3)
    score = ident

    width = max(x for x, y, ident in coords) + 1
    height = max(y for x, y, ident in coords) + 1
    grid = [[0] * width for y in range(height)]
    for x, y, ident in coords:
        grid[y][x] = ident

    return grid, score

def draw(grid, score):
    print('\033c', end='')
    for row in grid:
        print(''.join(' @x_o'[c] for c in row))
    print('score:', score)

def play(code, verbose):
    game = run_getter(code, lambda: xball - xpaddle)
    grid, score = makegrid(game)
    xpaddle = xball = 0
    if verbose:
        draw(grid, score)
    try:
        while True:
            x, y, ident = islice(game, 3)
            if x == -1:
                score = ident
            else:
                grid[y][x] = ident
                if ident == 3:
                    xpaddle = x
                elif ident == 4:
                    xball = x
                if verbose:
                    draw(grid, score)
                    sleep(.003)
    except (StopIteration, ValueError):
        return score

# part 1
code = read_program(sys.stdin)
outp = list(run_getter(code, lambda: 0))
print(outp[2::3].count(2))

# part 2
code[0] = 2
print(play(code, '-v' in sys.argv))
