Hofstadter Figure-Figure sequences: Difference between revisions

Added Sidef
m (trans, out templatting)
(Added Sidef)
Line 2,091:
r(10): 69
true</pre>
 
=={{header|Sidef}}==
{{trans|Perl}}
<lang ruby>var r = [nil, 1]
var s = [nil, 2]
 
func ffsr(n) {
while(r.end < n) {
r << s[r.end]+r[-1];
s << @[@(s[-1]+1 .. r[-1]-1), r[-1]+1].grep{ s[-1] < _ }
}
return n;
}
 
func ffr(n) { r[ffsr(n)] }
func ffs(n) { s[ffsr(n)] }
 
printf(" i: R(i) S(i)\n");
printf("==============\n");
10.of { |i|
printf("%3d: %3d %3d\n", i, ffr(i), ffs(i))
}
printf("\nR(40)=%3d S(960)=%3d R(41)=%3d\n", ffr(40), ffs(960), ffr(41));
 
var seen = Hash.new
 
40.of { |i| seen{ffr(i)} := 0 ++ }
960.of { |i| seen{ffs(i)} := 0 ++ }
 
if (seen.count {|k,v| (k.to_i >= 1) && (k.to_i <= 1000) && (v == 1) } == 1000) {
say "All occured exactly once.";
}
else {
var missed = (1..1000 -> grep { !seen.has_key(_) })
var dupped = seen.grep { |_, v| v > 1 }.keys.sort;
say "These were missed: #{missed}";
say "These were duplicated: #{dupped}";
}</lang>
{{out}}
<pre>
i: R(i) S(i)
==============
1: 1 2
2: 3 4
3: 7 5
4: 12 6
5: 18 8
6: 26 9
7: 35 10
8: 45 11
9: 56 13
10: 69 14
 
R(40)=982 S(960)=1000 R(41)=1030
All occured exactly once.
</pre>
 
=={{header|Tcl}}==
2,756

edits