Untitled
unknown
python
3 years ago
743 B
10
Indexable
def simulate_sand(rocks:set, lowest:int, floor:int|None):
# simulate sand
origin = 500
# counter for rest unit of sand
rest, sand = 0, origin
while True:
# check if steps are possible (in order)
for step in [0 + 1j, -1 +1j, 1 + 1j]:
tmp_sand = sand + step
if tmp_sand in rocks or (floor and tmp_sand.imag == floor):
continue
sand = tmp_sand
break
# otherwise rest and create new sand
else:
rest += 1
rocks.add(sand)
sand = origin
# check if over
if origin in rocks or (floor is None and sand.imag > lowest[sand.real]):
break
return restEditor is loading...