optimizations

This commit is contained in:
Tyrel Souza 2022-12-17 23:40:05 -05:00
parent 9611bfedf4
commit 58f2b05590
1 changed files with 14 additions and 37 deletions

View File

@ -1,7 +1,8 @@
import matrix
import shared
from dataclasses import dataclass
from typing import Tuple
from dataclasses import dataclass, field
from functools import cached_property
from typing import Tuple, List
import operator
@ -66,30 +67,20 @@ class Shape:
@property
def coords(self):
actual_coords = []
for y,x in self.shape[1]:
actual_coords.append((y+self.y,x+self.x))
return actual_coords
return [ (y+self.y,x+self.x) for y,x in self.shape[1]]
# TODO: check left/right movement into an object
def find_highest(shapes, default_height):
if not shapes:
return default_height
all_y = []
for s in shapes:
for y,_ in s.coords:
all_y.append(y)
return min(all_y)
def all_coords(shapes):
coords = set()
for s in shapes:
for c in s.coords:
coords.add(c)
return coords
#return min([y for s in shapes for y,_ in s.coords])
return min([s.coords[0][0] for s in shapes[-20:]])
#all_y = []
#for s in shapes[-20:]:
# all_y.append(s.coords[0][0])
#return min(all_y)
all_coords = set()
@ -119,11 +110,8 @@ def out_of_bounds(height, width, shapes, offset):
return False
# @shared.profile
@shared.profile
def part1(rows):
print(rows)
instructions = [r for r in rows]
height = 20
height = 2022*4+4
@ -133,15 +121,14 @@ def part1(rows):
rock = 0
shapes = []
spawning = True
while rock < 2022:
while rock < 2022: #1_000_000_000_000:
if spawning:
# Add last rock's coords to all coords
if shapes:
for c in shapes[-1].coords:
all_coords.add(c)
if rock % 1000 == 0:
print("Spawn rock #", rock)
X = 2
Y = find_highest(shapes, height) - 4
Y = find_highest(shapes, height) - 4
shape = Shape(rock=rock, y=Y, x=X, shape=ORDER[rock%len(ORDER)])
shapes.append(shape)
spawning = False
@ -158,19 +145,14 @@ def part1(rows):
# Try to move right/left
#print(f"Jet of gas pushes {shapes[-1].at_rest_char} rock", next_move)
next_offset = OFF[next_move]
if not out_of_bounds(height,width, shapes, (0, next_offset[1])) and not collision_at(shapes, next_offset):
shapes[-1].x += next_offset[1]
else:
pass
#print("but nothing happens")
# check if hit bottom
next_offset = (1, next_offset[1])
if out_of_bounds(height, width, shapes, (next_offset[0],0)):
#print("rock comes to rest")
# hit bottom dont move down
shapes[-1].moving = False
spawning = True
@ -185,13 +167,8 @@ def part1(rows):
else:
# can move down
shapes[-1].y += 1
#print("rock falls one unit")
#render(width, height, shapes)
print(shapes[0], height, shapes[0].coords)
print("LAST ROCK COUNT", rock+1)
print(height - find_highest(shapes, height))