Hofstadter Figure-Figure sequences: Difference between revisions

Added BBC BASIC
(→‎{{header|REXX}}: redesigned the computation and search algorithms. -- ~~~~)
(Added BBC BASIC)
Line 128:
<lang> 1 3 7 12 18 26 35 45 56 69
Test Passed: No overlap between FFR(I) and FFS(J)</lang>
 
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<lang bbcbasic> PRINT "First 10 values of R:"
FOR i% = 1 TO 10 : PRINT ;FNffr(i%) " "; : NEXT : PRINT
PRINT "First 10 values of S:"
FOR i% = 1 TO 10 : PRINT ;FNffs(i%) " "; : NEXT : PRINT
PRINT "Checking for first 1000 integers:"
r% = 1 : s% = 1
ffr% = FNffr(r%)
ffs% = FNffs(s%)
FOR wanted% = 1 TO 1000
CASE TRUE OF
WHEN wanted% = ffr% : r% += 1 : ffr% = FNffr(r%)
WHEN wanted% = ffs% : s% += 1 : ffs% = FNffs(s%)
OTHERWISE: EXIT FOR
ENDCASE
NEXT
IF r% = 41 AND s% = 961 PRINT "Test passed" ELSE PRINT "Test failed"
END
DEF FNffr(N%)
LOCAL I%, J%, R%, S%, V%
DIM V% LOCAL 2*N%+1
V%?1 = 1
IF N% = 1 THEN = 1
R% = 1
S% = 2
FOR I% = 2 TO N%
FOR J% = S% TO 2*N%
IF V%?J% = 0 EXIT FOR
NEXT
V%?J% = 1
S% = J%
R% += S%
IF R% <= 2*N% V%?R% = 1
NEXT I%
= R%
DEF FNffs(N%)
LOCAL I%, J%, R%, S%, V%
DIM V% LOCAL 2*N%+1
V%?1 = 1
IF N% = 1 THEN = 2
R% = 1
S% = 2
FOR I% = 1 TO N%
FOR J% = S% TO 2*N%
IF V%?J% = 0 EXIT FOR
NEXT
V%?J% = 1
S% = J%
R% += S%
IF R% <= 2*N% V%?R% = 1
NEXT I%
= S%</lang>
<pre>
First 10 values of R:
1 3 7 12 18 26 35 45 56 69
First 10 values of S:
2 4 5 6 8 9 10 11 13 14
Checking for first 1000 integers:
Test passed
</pre>
 
=={{header|Common Lisp}}==