Hofstadter Figure-Figure sequences: Difference between revisions

Content added Content deleted
(Added JavaScript)
Line 575: Line 575:
(1+i.1000) -: /:~ (ffr 1+i.40), ffs 1+i.960
(1+i.1000) -: /:~ (ffr 1+i.40), ffs 1+i.960
1</lang>
1</lang>
=={{header|JavaScript}}==
Translated from Ruby.
<lang JavaScript>var R = [null, 1];
var S = [null, 2];

var extend_sequences = function (n) {
var current = Math.max(R[R.length-1],S[S.length-1]);
var i;
while (R.length <= n || S.length <= n) {
i = Math.min(R.length, S.length) - 1;
current += 1;
if (current === R[i] + S[i]) {
R.push(current);
} else {
S.push(current);
}
}
}

var ffr = function(n) {
extend_sequences(n);
return R[n];
};

var ffs = function(n) {
extend_sequences(n);
return S[n];
};

for (var i = 1; i <=10; i += 1) {
console.log('R('+ i +') = ' + ffr(i));
}

var int_array = [];

for (var i = 1; i <= 40; i += 1) {
int_array.push(ffr(i));
}
for (var i = 1; i <= 960; i += 1) {
int_array.push(ffs(i));
}

int_array.sort(function(a,b){return a-b;});

for (var i = 1; i <= 1000; i += 1) {
if (int_array[i-1] !== i) {
throw "Something's wrong!"
} else { console.log("1000 integer check ok."); }
}</lang>
Output:
<pre>R(1) = 1
R(2) = 3
R(3) = 7
R(4) = 12
R(5) = 18
R(6) = 26
R(7) = 35
R(8) = 45
R(9) = 56
R(10) = 69
1000 integer check ok.</pre>


=={{header|MATLAB}} / {{header|Octave}}==
=={{header|MATLAB}} / {{header|Octave}}==