fiddled with 2017.03.2 not working

This commit is contained in:
dusk 2025-07-25 23:27:45 +00:00
parent 6ddcc106ec
commit e01bd4c86d

167
2017/03/2spiral_memory.py Executable file
View File

@ -0,0 +1,167 @@
#!/home/dusk/.local/share/pipx/venvs/numpy/bin/python3
import numpy
if __name__ == '__main__':
target = 277678
colstep = 1
rowstep = -1
square = 1
pointer = [0, 0]
memory = [[1]]
value = 0
def grow_right(array):
new_array = []
i = 0
for row in array:
new_row = row + [0]
new_array = new_array + [new_row]
i += 1
return new_array
def grow_left(array):
new_array = []
i = 0
for row in array:
new_row = [0] + row
new_array = new_array + [new_row]
i += 1
return new_array
def grow_down(array):
row_width = len(array[0])
new_array = array + numpy.zeros(row_width)
return new_array
def grow_up(array):
row_width = len(array[0])
new_array = numpy.zeros(row_width) + array
return new_array
def get_adj(array, row, col, coords):
adj_value = 0
for coord in coords:
pointer_row = row
pointer_col = col
match coord:
case 0:
pointer_col += 1
case 1:
pointer_col += 1
pointer_row += -1
case 2:
pointer_row += -1
case 3:
pointer_row += -1
pointer_col += -1
case 4:
pointer_col += -1
case 5:
pointer_col += -1
pointer_row += 1
case 6:
pointer_row += 1
case 7:
pointer_row += 1
pointer_col += 1
print(array)
adj_value += array[pointer_row][pointer_col]
adj_value = int(adj_value)
print(adj_value)
return adj_value
def get_new_value(array, pointer):
adj_values = numpy.zeros(8)
# adjacent square coordinates:
# 3 2 1
# 4 * 0
# 5 6 7
height = len(array)
width = len(array[0])
row = pointer[0]
col = pointer[1]
is_right = False
is_up = False
is_left = False
is_down = False
if row == 0:
is_up = True
if row == (height - 1):
is_down = True
if col == 0:
is_left = True
if col == (width - 1):
is_right = True
new_value = 0
if not is_right:
new_value += get_adj(array, row, col, [0])
if not is_up:
new_value += get_adj(array, row, col, [2])
if not is_left:
new_value += get_adj(array, row, col, [4])
if not is_down:
new_value += get_adj(array, row, col, [6])
if (not is_right) and (not is_up):
new_value += get_adj(array, row, col, [1])
if (not is_up) and (not is_left):
new_value += get_adj(array, row, col, [3])
if (not is_left) and (not is_down):
new_value += get_adj(array, row, col, [5])
if (not is_down) and (not is_right):
new_value += get_adj(array, row, col, [7])
if is_right and is_up and is_left and is_down:
new_value += 1
new_value = int(new_value)
return new_value
def increment_step(step):
sign = int(step / abs(step)) # +/- 1
new_sign = int(-1 * sign)
new_step = int(new_sign * (abs(step) + 1))
return new_step
while value <= target:
# colstep
i = 1
if colstep >= 0:
memory = grow_right(memory)
else:
memory = grow_left(memory)
pointer[1] += 1
while value <= target and i <= abs(colstep):
square += 1
# step to next col
if colstep >= 0:
pointer[1] += 1
else:
pointer[1] += -1
value = get_new_value(memory, pointer)
memory[pointer[0]][pointer[1]] = value
i += 1
print(memory)
colstep = increment_step(colstep)
# now for rowstep
i = 1
if rowstep >= 0:
memory = grow_down(memory)
else:
memory = grow_up(memory)
pointer[0] += 1
while value <= target and i <= abs(rowstep):
square += 1
if rowstep >= 0:
pointer[0] += 1
else:
pointer[0] += -1
value = get_new_value(memory, pointer)
memory[pointer[0]][pointer[1]] = value
i += 1
print(memory)
rowstep = increment_step(rowstep)
print(value)