Есть одна задачка, вроде бы и легкая, но меня она постоянно заставляет задуматься.
Нарисовать числовую змейку в массиве NxN (число N -нечетное) при том, так чтобы змейка закручивалась. Лучше на примере покажу:
[13, 14, 15, 16, 17]
[12, 3, 4, 5, 18]
[11, 2, 1, 6, 19]
[10, 9, 8, 7, 20]
[25, 24, 23, 22, 21]
Если посмотреть то цифры идут от центра и по спирали. Вот моя реализация на Python'е, интересно ваше мнение. Возможно, мое мнение плохое, так как я дилетант в программировании, ничего лучше придумать не смог.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
tp = 1
while tp:
try:
N = int(input("Введите число N: \n"))
tp = 0
break
except:
print("Ошибка: введенное значение не является целым числом!!!")
tp=1
counter = 1
ring = 1
while ring<=N:
# Первое кольцо
if ring == 1:
array = [[counter]]
# Задаем направление закручивания
left = 1
#for ig in array:
#print(str(ig))
#print("\n")
# Переходим ко всем остальным кольцам
else:
counter = counter+1
left = 1
low = len(array)-1
# Влево
array[low].insert(0,counter)
#for ig in array:
#print(str(ig))
#print("\n")
up = 1
# Вверх
while up <= (2*(ring-1)-1):
counter = counter + 1
if up == (2*(ring-1)-1):
array.insert(0,[counter])
else:
low=low-1
array[low].insert(0,counter)
up = up+1
#for ig in array:
#print(str(ig))
#print("\n")
right = 1
# Вправо
while right<=2*(ring-1):
counter = counter + 1
array[0].append(counter)
right = right+1
#for ig in array:
#print(str(ig))
#print("\n")
# Вниз
down = 1
high=0
while down <= 2*(ring-1):
counter = counter+1
if down<2*(ring-1):
high = high+1
array[high].append(counter)
else:
array.append([counter])
down = down + 1
#for ig in array:
#print(str(ig))
#print("\n")
# Снова налево
while left<=(ring-1)*2:
counter = counter + 1
low = len(array)-1
array[low].insert(0,counter)
left=left+1
ring = ring+1
for ig in array:
print(str(ig))