'SQPUZZLE.BAS DEFINT A-Z 'all integers DIM sq4(36, 4), sq2(6, 2) CLS ct = 1 'count FOR n = 32 TO 99: nsq = n * n sq4(ct, 0) = nsq sq4(ct, 1) = INT(nsq / 1000) sq4(ct, 2) = INT((nsq MOD 1000) / 100) sq4(ct, 3) = INT((nsq MOD 100) / 10) sq4(ct, 4) = INT(nsq MOD 10) FOR i = 2 TO 4 FOR j = 1 TO i - 1 IF sq4(ct, i) = sq4(ct, j) THEN EXIT FOR NEXT j IF j i THEN EXIT FOR NEXT i IF i = 5 THEN 'all different digits PRINT ct; sq4(ct, 0); " "; ct = ct + 1 'next array slot END IF NEXT n PRINT : PRINT "Note, 36 4-digit squares." 'now do 2-digit squares FOR m = 1 TO 6: msq = (m + 3) * (m + 3) sq2(m, 0) = msq sq2(m, 1) = INT(msq / 10) sq2(m, 2) = INT(msq MOD 10) NEXT m DO: LOOP WHILE INKEY$ = "" ct = 1 'reset count FOR no1 = 1 TO 35 '1st 4-digit FOR no2 = no1 + 1 TO 36 '2nd 4-digit FOR i = 1 TO 4 FOR j = 1 TO 4 IF sq4(no1,i) =sq4(no2,j) THEN EXIT FOR NEXT j IF j 5 THEN EXIT FOR NEXT i IF i = 5 THEN 'suitable pair PRINT ct; sq4(no1, 0); sq4(no2, 0); FOR no3 = 1 TO 6 'check 2-digits FOR x = 1 TO 2 FOR z = 1 TO 4 IF sq2(no3,x)=sq4(no1,z)THEN EXIT FOR IF sq2(no3,x)=sq4(no2,z)THEN EXIT FOR NEXT z IF z 5 THEN EXIT FOR NEXT x IF x = 3 THEN 'all digits used PRINT : PRINT "EUREKA -"; sq4(no1, 0); PRINT "(=";(sq4(no1, 0))^.5; "sqrd),"; PRINT sq4(no2,0);"(=";(sq4(no2,0))^.5; PRINT "sqrd) and"; sq2(no3, 0); "(="; PRINT (sq2(no3, 0)) ^ .5; "sqrd)" END IF NEXT no3 ct = ct + 1 END IF NEXT no2 NEXT no1 PRINT: PRINT "39 pairs of 4-digit squares." PRINT "2 pairs form sets with 81 (9 x 9)." DO: LOOP WHILE INKEY$ = ""