|
1 | | -from collections import * |
2 | | -import time |
3 | | -from itertools import * |
4 | | -from functools import * |
5 | | -# import networkx as nx |
6 | 1 | import re |
7 | | -import sys |
8 | | -sys.setrecursionlimit(1000000) |
9 | 2 |
|
10 | | -s1 = s2 = 0 |
11 | | -# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} |
| 3 | +X, Y = 101, 103 |
| 4 | +nums = [list(map(int, re.findall(r"-?\d+", line))) for line in open(0)] |
12 | 5 |
|
13 | | -d4 = [1, 1j, -1, -1j] |
14 | | -d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] |
15 | | -d4half = [i/2 for i in d4] |
16 | | -d8half = [i/2 for i in d8] |
17 | | -def adjacent(coord, dirs=d4): |
18 | | - return [coord + d for d in dirs] |
19 | | - |
20 | | - |
21 | | - |
22 | | - |
23 | | -X = 101 |
24 | | -Y = 103 |
25 | | -# X = 11 |
26 | | -# Y = 7 |
27 | | -maps = [] |
28 | | -for line in open(0): |
29 | | - x, y, vx, vy = map(int, re.findall(r"-?\d+", line)) |
30 | | - maps.append((x, y, vx, vy)) |
31 | | -8 |
32 | | -70 |
33 | | -284 |
34 | | - |
35 | | -seen = set() |
36 | | - |
37 | | -for i in range(0, X * Y, 1): |
38 | | - counts = {} |
| 6 | +for i in range(X * Y): |
39 | 7 | quadrant = [0, 0, 0, 0] |
40 | | - nines = [0] * 9 |
41 | | - rows = Counter() |
42 | | - for x, y, vx, vy in maps: |
| 8 | + picture = [" "] * (X * Y) |
| 9 | + for x, y, vx, vy in nums: |
43 | 10 | nx = (x + vx * i) % X |
44 | 11 | ny = (y + vy * i) % Y |
45 | | - if (nx, ny) not in counts: |
46 | | - counts[(nx, ny)] = 0 |
47 | | - counts[(nx, ny)] += 1 |
48 | | - rows[ny] += 1 |
49 | | - # print(x, y, nx, ny) |
50 | | - # print(nx, (nx >= 55) + (ny >= 56) * 2) |
51 | | - # print(X // 2, Y // 2) |
52 | | - if nx != X // 2 and ny != Y // 2: |
53 | | - q = (nx > X//2) + (ny > Y//2) * 2 |
54 | | - #print(q) |
55 | | - quadrant[q] += 1 |
56 | | - n = (nx // (X//3+1)) + (ny // (Y//3+1)) * 3 |
57 | | - # print(n) |
58 | | - nines[n] += 1 |
59 | | - seen.add((tuple(sorted(quadrant)), i)) |
| 12 | + picture[ny * X + nx] = "#" |
| 13 | + if nx != X//2 and ny != Y//2: |
| 14 | + quadrant[(nx > X//2) + (ny > Y//2) * 2] += 1 |
60 | 15 |
|
| 16 | + if i == 100: |
| 17 | + print(quadrant[0] * quadrant[1] * quadrant[2] * quadrant[3]) |
61 | 18 |
|
62 | | - # key = tuple(counts.items()) |
63 | | - # if key in seen: |
64 | | - # break |
65 | | - # seen.add(key) |
66 | | - |
67 | | - s = quadrant[0] * quadrant[1] * quadrant[2] * quadrant[3] |
68 | | - # if any(q <= 10 for q in nines): |
69 | | - if rows[40] > 30: |
70 | | - for yy in range(Y): |
71 | | - print(end=str(yy)) |
72 | | - for xx in range(X): |
73 | | - print(end="#" if (xx, yy) in counts else " ") |
74 | | - # print(end=str(counts.get((xx, yy), " "))) |
75 | | - print() |
76 | | - |
77 | | - print(quadrant) |
| 19 | + if ("#" * 20) in ''.join(picture): |
78 | 20 | print(i) |
79 | | - print() |
80 | | - # time.sleep(0.1) |
81 | | - |
82 | | - # print(quadrant) |
83 | | - |
84 | | -# print(sorted(seen, reverse=True)) |
85 | | - |
86 | | -print(quadrant) |
87 | | - |
88 | | -print(s1, s2, sep="\n") |
| 21 | + break |
0 commit comments