49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
file = "./input.txt"
|
|
Y_TALL = 103
|
|
X_WIDE = 101
|
|
|
|
#file = "./ex.txt"
|
|
#Y_TALL = 7
|
|
#X_WIDE = 11
|
|
|
|
from time import time
|
|
import re
|
|
start_time = time()
|
|
|
|
def parse_and_go(input_file:str, seconds) -> list[list[int]]:
|
|
global Y_TALL, X_WIDE
|
|
field = []
|
|
for i in range(Y_TALL):
|
|
temp = []
|
|
for j in range(X_WIDE):
|
|
temp.append(0)
|
|
field.append(temp)
|
|
with open(input_file, 'r') as d:
|
|
datei = d.read()
|
|
pat = r'p\=(-?\d+),(-?\d+) v\=(-?\d+),(-?\d+)'
|
|
match = re.findall(pat, datei)
|
|
for m in match:
|
|
x, y, vx, vy = map(int, m)
|
|
# move X seconds
|
|
x = (x + (seconds * vx)) % X_WIDE
|
|
y = (y + (seconds * vy)) % Y_TALL
|
|
field[y][x] += 1
|
|
return field
|
|
|
|
def print_field(f):
|
|
for r in f:
|
|
for s in r:
|
|
if s == 0:
|
|
print(".", end="")
|
|
else:
|
|
print(s, end="")
|
|
print()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
field_s = parse_and_go(file, 6516)
|
|
print_field(field_s)
|
|
print(f'Runtime: {time()-start_time:.2f} s') |