def main(number, clockwise):
numberSquared = number * number
arrayOfNumbers = [[0 for x in range(number)] for y in range(number)]
charactersPerNumber = 2
n = numberSquared
while(n / 10 >= 1):
charactersPerNumber += 1
n = int(n/10)
x = 0
y = 0
stepValue = 1
upperBound = number - 1
lowerBound = 0
forward = True
for i in range(1,numberSquared + 1):
if (clockwise):
arrayOfNumbers[y][x] = resize(i, charactersPerNumber)
else:
arrayOfNumbers[x][y] = resize(i, charactersPerNumber)
#print(str(x) + ", " + str(y))
if ((x < upperBound and forward) or (x > lowerBound and not forward)):
x += stepValue
continue
if ((y < upperBound and forward) or (y > (lowerBound + 1) and not forward)):
y += stepValue
continue
if (forward):
upperBound -= 1
else:
lowerBound += 1
forward = not forward
stepValue = -stepValue
x += stepValue
for x in range(0,number):
str = ""
for y in range(0,number):
str += arrayOfNumbers[x][y]
print(str)
def resize(number, characters):
lengthOfNumber = len(str(number))
numString = str(number)
while(lengthOfNumber < characters):
# numString += " "
numString = " " + numString
lengthOfNumber += 1
return numString
if __name__ == "__main__":
main(5, True)
print('\n\n')
main(4, False)
ZGVmIG1haW4obnVtYmVyLCBjbG9ja3dpc2UpOgogICAgbnVtYmVyU3F1YXJlZCA9IG51bWJlciAqIG51bWJlcgogICAgYXJyYXlPZk51bWJlcnMgPSBbWzAgZm9yIHggaW4gcmFuZ2UobnVtYmVyKV0gZm9yIHkgaW4gcmFuZ2UobnVtYmVyKV0KICAgIAogICAgY2hhcmFjdGVyc1Blck51bWJlciA9IDIKICAgIAogICAgbiA9IG51bWJlclNxdWFyZWQKICAgIHdoaWxlKG4gLyAxMCA+PSAxKToKICAgICAgICBjaGFyYWN0ZXJzUGVyTnVtYmVyICs9IDEKICAgICAgICBuID0gaW50KG4vMTApCiAgICAKICAgIHggPSAwCiAgICB5ID0gMAogICAgCiAgICBzdGVwVmFsdWUgPSAxCiAgICAKICAgIHVwcGVyQm91bmQgPSBudW1iZXIgLSAxCiAgICBsb3dlckJvdW5kID0gMAogICAgCiAgICBmb3J3YXJkID0gVHJ1ZQogICAgCiAgICBmb3IgaSBpbiByYW5nZSgxLG51bWJlclNxdWFyZWQgKyAxKToKICAgICAgICBpZiAoY2xvY2t3aXNlKToKICAgICAgICAgICAgYXJyYXlPZk51bWJlcnNbeV1beF0gPSByZXNpemUoaSwgY2hhcmFjdGVyc1Blck51bWJlcikKICAgICAgICBlbHNlOgogICAgICAgICAgICBhcnJheU9mTnVtYmVyc1t4XVt5XSA9IHJlc2l6ZShpLCBjaGFyYWN0ZXJzUGVyTnVtYmVyKQogICAgICAgICNwcmludChzdHIoeCkgKyAiLCAiICsgc3RyKHkpKQogICAgICAgIAogICAgICAgIGlmICgoeCA8IHVwcGVyQm91bmQgYW5kIGZvcndhcmQpIG9yICh4ID4gbG93ZXJCb3VuZCBhbmQgbm90IGZvcndhcmQpKToKICAgICAgICAgICAgeCArPSBzdGVwVmFsdWUKICAgICAgICAgICAgY29udGludWUKICAgICAgICAKICAgICAgICBpZiAoKHkgPCB1cHBlckJvdW5kIGFuZCBmb3J3YXJkKSBvciAoeSA+IChsb3dlckJvdW5kICsgMSkgYW5kIG5vdCBmb3J3YXJkKSk6CiAgICAgICAgICAgIHkgKz0gc3RlcFZhbHVlCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgCiAgICAgICAgaWYgKGZvcndhcmQpOgogICAgICAgICAgICB1cHBlckJvdW5kIC09IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb3dlckJvdW5kICs9IDEKICAgICAgICAKICAgICAgICBmb3J3YXJkID0gbm90IGZvcndhcmQKICAgICAgICBzdGVwVmFsdWUgPSAtc3RlcFZhbHVlCiAgICAgICAgCiAgICAgICAgeCArPSBzdGVwVmFsdWUKICAgIAogICAgZm9yIHggaW4gcmFuZ2UoMCxudW1iZXIpOgogICAgICAgIHN0ciA9ICIiCiAgICAgICAgZm9yIHkgaW4gcmFuZ2UoMCxudW1iZXIpOgogICAgICAgICAgICBzdHIgKz0gYXJyYXlPZk51bWJlcnNbeF1beV0KICAgICAgICAKICAgICAgICBwcmludChzdHIpCiAgICAKICAgIApkZWYgcmVzaXplKG51bWJlciwgY2hhcmFjdGVycyk6CiAgICBsZW5ndGhPZk51bWJlciA9IGxlbihzdHIobnVtYmVyKSkKICAgIG51bVN0cmluZyA9IHN0cihudW1iZXIpCiAgICAKICAgIHdoaWxlKGxlbmd0aE9mTnVtYmVyIDwgY2hhcmFjdGVycyk6CiAgICAgICAgIyBudW1TdHJpbmcgKz0gIiAiCiAgICAgICAgbnVtU3RyaW5nID0gIiAiICsgbnVtU3RyaW5nCiAgICAgICAgbGVuZ3RoT2ZOdW1iZXIgKz0gMQogICAgCiAgICByZXR1cm4gbnVtU3RyaW5nCiAgICAgICAgICAgICAgICAKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oNSwgVHJ1ZSkKICAgIHByaW50KCdcblxuJykKICAgIG1haW4oNCwgRmFsc2Up