3.3 KiB
3.3 KiB
id | title | challengeType |
---|---|---|
5a23c84252665b21eecc8028 | Stern-Brocot sequence | 5 |
Description
- The first and second members of the sequence are both 1:
- 1, 1
- Start by considering the second member of the sequence
- Sum the considered member of the sequence and its precedent, (1 + 1) = 2, and append it to the end of the sequence:
- 1, 1, 2
- Append the considered member of the sequence to the end of the sequence:
- 1, 1, 2, 1
- Consider the next member of the series, (the third member i.e. 2)
- GOTO 3
- ─── Expanding another loop we get: ───
- Sum the considered member of the sequence and its precedent, (2 + 1) = 3, and append it to the end of the sequence:
- 1, 1, 2, 1, 3
- Append the considered member of the sequence to the end of the sequence:
- 1, 1, 2, 1, 3, 2
- Consider the next member of the series, (the fourth member i.e. 1)
Instructions
Tests
tests:
- text: <code>sternBrocot</code> should be a function.
testString: assert(typeof sternBrocot == 'function', '<code>sternBrocot</code> should be a function.');
- text: <code>sternBrocot(2)</code> should return a number.
testString: assert(typeof sternBrocot(2) == 'number', '<code>sternBrocot(2)</code> should return a number.');
- text: <code>sternBrocot(2)</code> should return <code>3</code>.
testString: assert.equal(sternBrocot(2), 3, '<code>sternBrocot(2)</code> should return <code>3</code>.');
- text: <code>sternBrocot(3)</code> should return <code>5</code>.
testString: assert.equal(sternBrocot(3), 5, '<code>sternBrocot(3)</code> should return <code>5</code>.');
- text: <code>sternBrocot(5)</code> should return <code>11</code>.
testString: assert.equal(sternBrocot(5), 11, '<code>sternBrocot(5)</code> should return <code>11</code>.');
- text: <code>sternBrocot(7)</code> should return <code>19</code>.
testString: assert.equal(sternBrocot(7), 19, '<code>sternBrocot(7)</code> should return <code>19</code>.');
- text: <code>sternBrocot(10)</code> should return <code>39</code>.
testString: assert.equal(sternBrocot(10), 39, '<code>sternBrocot(10)</code> should return <code>39</code>.');
Challenge Seed
function sternBrocot (num) {
// Good luck!
}
Solution
function sternBrocot (num) {
function f(n) {
return n < 2 ? n : (n & 1) ? f(Math.floor(n / 2)) + f(Math.floor(n / 2 + 1)) : f(Math.floor(n / 2));
}
function gcd(a, b) {
return a ? a < b ? gcd(b % a, a) : gcd(a % b, b) : b;
}
var n;
for (n = 1; f(n) != num; n++);
return n;
}