CLS
INPUT n
DIM a(n, n)
p$ = STRING$(LEN(STR$(n * n)), "#")
x = 1: y = 1: m = 1
a(x, y) = m
DO
IF x + 1 <= n THEN
x = x + 1: GOSUB pin
ELSE
IF y + 1 <= n THEN y = y + 1: GOSUB pin
END IF
WHILE x - 1 >= 1 AND y + 1 <= n
x = x - 1: y = y + 1: GOSUB pin
WEND
IF y + 1 <= n THEN
y = y + 1: GOSUB pin
ELSE
IF x + 1 <= n THEN x = x + 1: GOSUB pin
END IF
WHILE x + 1 <= n AND y - 1 >= 1
x = x + 1: y = y - 1: GOSUB pin
WEND
LOOP WHILE x <> n OR y <> n
FOR i = 1 TO n
FOR j = 1 TO n
PRINT USING p$; a(i, j);
NEXT j
PRINT
NEXT i
END
pin:
m = m + 1
a(x, y) = m
RETURN
------------------------------------
? 5
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25
INPUT n
DIM a(n, n)
p$ = STRING$(LEN(STR$(n * n)), "#")
x = 1: y = 1: m = 1
a(x, y) = m
DO
IF x + 1 <= n THEN
x = x + 1: GOSUB pin
ELSE
IF y + 1 <= n THEN y = y + 1: GOSUB pin
END IF
WHILE x - 1 >= 1 AND y + 1 <= n
x = x - 1: y = y + 1: GOSUB pin
WEND
IF y + 1 <= n THEN
y = y + 1: GOSUB pin
ELSE
IF x + 1 <= n THEN x = x + 1: GOSUB pin
END IF
WHILE x + 1 <= n AND y - 1 >= 1
x = x + 1: y = y - 1: GOSUB pin
WEND
LOOP WHILE x <> n OR y <> n
FOR i = 1 TO n
FOR j = 1 TO n
PRINT USING p$; a(i, j);
NEXT j
NEXT i
END
pin:
m = m + 1
a(x, y) = m
RETURN
------------------------------------
? 5
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25