RosettaCodeData/Task/Iterated-digits-squaring/BBC-BASIC/iterated-digits-squaring.basic

59 lines
1.5 KiB
Plaintext

REM Version 1: Brute force
REM ---------------------------------------------------------
T%=TIME
N%=0
FOR I%=1 TO 100000000
J%=I%
REPEAT
K%=0:REPEAT K%+=(J%MOD10)^2:J%=J%DIV10:UNTIL J%=0
J%=K%
UNTIL J%=89 OR J%=1
IF J%>1 N%+=1
NEXT
PRINT "Version 1: ";N% " in ";(TIME-T%)/100 " seconds."
REM Version 2: Brute force + building lookup table
REM ---------------------------------------------------------
T%=TIME
DIM B% 9*9*8,H%(9)
N%=0
FOR I%=1 TO 100000000
J%=I%
H%=0
REPEAT
K%=0:REPEAT K%+=(J%MOD10)^2:J%=J%DIV10:UNTIL J%=0
H%(H%)=K%:H%+=1
J%=K%
IF B%?J%=1 EXIT REPEAT
UNTIL J%=89 OR J%=1
IF J%>1 N%+=1:WHILE H%>0:H%-=1:B%?H%(H%)=1:ENDWHILE
NEXT
PRINT "Version 2: ";N% " in ";(TIME-T%)/100 " seconds."
REM Version 3: Calc possible combinations (translation of C)
REM ---------------------------------------------------------
T%=TIME
DIM B%(9*9*8):B%(0)=1
FOR N%=1 TO 8
FOR I%=9*9*N% TO 1 STEP -1
FOR J%=1 TO 9
S%=J%*J%
IF S%>I% EXIT FOR
B%(I%)+=B%(I%-S%)
NEXT
NEXT
NEXT
N%=0
FOR I%=1 TO 9*9*8
J%=I%
REPEAT
K%=0:REPEAT K%+=(J%MOD10)^2:J%=J%DIV10:UNTIL J%=0
J%=K%
UNTIL J%=89 OR J%=1
IF J%>1 N%+=B%(I%)
NEXT
PRINT "Version 3: ";N% " in ";(TIME-T%)/100 " seconds."
END