GAIさんへのお返事です。
a,b,cは整数、M,A,B,Cは行列として「M+a*A+b*B+c*C による変形」で検索しました。
0~999の数字を使った場合、重複を除いて存在しません。
しかも、提示された魔方陣が唯一重複なし2段階のものです。
!3×3魔方陣で3段階になるものを検索する
OPTION ARITHMETIC NATIVE !CPUパワー
DIM nm$(0 TO 19) !0~19
DATA "Zero" !0
DATA "One" !1
DATA "Two" !2
DATA "Three" !3
DATA "Four" !4
DATA "Five" !5
DATA "Six" !6
DATA "Seven" !7
DATA "Eight" !8
DATA "Nine" !9
DATA "Ten" !10
DATA "Eleven" !11
DATA "Twelve" !12
DATA "Thirteen" !13
DATA "Fourteen" !14
DATA "Fifteen" !15
DATA "Sixteen" !16
DATA "Seventeen" !17
DATA "Eighteen" !18
DATA "Nineteen" !19
MAT READ nm$
DIM nm2$(2 TO 9) !20以上
DATA "Twenty" !20
DATA "Thirty" !30
DATA "Fourty" !40
DATA "Fifty" !50
DATA "Sixty" !60
DATA "Seventy" !70
DATA "Eigthy" !80
DATA "Ninety" !90
MAT READ nm2$
FUNCTION f(x) !数値を英語読みに変換する ※0~999
LET v=0
IF x>=100 THEN LET v=LEN(nm$(INT(x/100))) + LEN("hundred") !百の位
LET xx=MOD(x,100) !0~99の部分
IF xx<>0 THEN
IF xx<20 THEN !0~19なら
LET v=v+LEN(nm$(xx))
ELSE
LET v=v+LEN(nm2$(INT(xx/10))) !十の位
LET w=MOD(xx,10) !一の位
IF w<>0 THEN LET v=v+LEN(nm$(w))
END IF
END IF
LET f=v
END FUNCTION
!------------------------------
DIM M(9) !3×3基本形
!DATA 2,9,4 !合計は、15
!DATA 7,5,3
!DATA 6,1,8
!MAT READ M
MAT M=ZER
! M+a*A+b*B+c*C による変形 合計は、15+3*a となる。
DIM A(9)
DATA +1,+1,+1
DATA +1,+1,+1
DATA +1,+1,+1
MAT READ A
DIM B(9)
DATA 0,-1,+1
DATA +1, 0,-1
DATA -1,+1, 0
MAT READ B
DIM C(9) !※Bを90°回転
DATA +1,-1, 0
DATA -1, 0,+1
DATA 0,+1,-1
MAT READ C
LET cTRUE=-1 !真
LET cFALSE=0 !偽
FUNCTION CheckRange(T()) !1~999
LET CheckRange=cFALSE
FOR i=1 TO 9
IF T(i)<0 OR T(i)>999 THEN EXIT FUNCTION
NEXT i
LET CheckRange=cTRUE
END FUNCTION
FUNCTION CheckUnique(T()) !同じ数字かどうか
LET CheckUnique=cFALSE
FOR i=1 TO 8
FOR j=i+1 TO 9
IF T(i)=T(j) THEN EXIT FUNCTION
NEXT j
NEXT i
LET CheckUnique=cTRUE
END FUNCTION
FUNCTION CheckSum(T()) !合計
LET CheckSum=cFALSE
LET v=3*T(5)
IF v<>T(1)+T(2)+T(3) THEN EXIT FUNCTION !横
IF v<>T(4)+T(5)+T(6) THEN EXIT FUNCTION
IF v<>T(7)+T(8)+T(9) THEN EXIT FUNCTION
IF v<>T(1)+T(4)+T(7) THEN EXIT FUNCTION !縦
IF v<>T(2)+T(5)+T(8) THEN EXIT FUNCTION
IF v<>T(3)+T(6)+T(9) THEN EXIT FUNCTION
IF v<>T(1)+T(5)+T(9) THEN EXIT FUNCTION !斜め
IF v<>T(3)+T(5)+T(7) THEN EXIT FUNCTION
LET CheckSum=cTRUE
END FUNCTION
!------------------------------
DIM T(9),TT(9)
!FOR aa=111 TO 0 STEP -1
FOR aa=0 TO 111 !※
DIM Ta(9)
MAT TT=aa*A
MAT Ta=M+TT
PRINT "合計=";3*M(5)+3*aa; aa
FOR bb=0-Ta(8) TO 999-Ta(8) !※
DIM Tb(9)
MAT TT=bb*B
MAT Tb=Ta+TT
FOR cc=0-Ta(8) TO 999-Ta(8) !※
MAT TT=cc*C
MAT T=Tb+TT !1段階目
!IF CheckRange(T)=cTRUE AND CheckUnique(T)=cTRUE THEN !重複なし
IF CheckRange(T)=cTRUE THEN !重複あり
DIM T1(9)
MAT T1=T !save it
FOR i=1 TO 9 !2段階目
LET T(i)=f(T(i))
NEXT i
!IF CheckUnique(T)=cTRUE AND CheckSum(T)=cTRUE THEN
IF CheckSum(T)=cTRUE THEN
DIM T2(9)
MAT T2=T !save it
!!!MAT PRINT T; !debug
FOR i=1 TO 9 !3段階目
LET T(i)=f(T(i))
NEXT i
!IF CheckUnique(T)=cTRUE AND CheckSum(T)=cTRUE THEN
IF CheckSum(T)=cTRUE THEN
MAT PRINT T1;T2;T; !魔方陣を表示する
PRINT
END IF
END IF
END IF
NEXT cc
NEXT bb
NEXT aa
END