FRACTRAN is a Turing-complete esoteric programming language invented by the mathematician John Horton Conway.
A FRACTRAN program is an ordered list of positive fractions $P = (f_1, f_2, \ldots, f_m)$, together with an initial positive integer input $n$.
The program is run by updating the integer $n$ as follows:
Conway gave a program for primes in FRACTRAN:
$17/91$, $78/85$, $19/51$, $23/38$, $29/33$, $77/29$, $95/23$, $77/19$, $1/17$, $11/13$, $13/11$, $15/14$, $15/2$, $55/1$
Starting with $n=2$, this FRACTRAN program will change $n$ to $15=2\times (15/2)$, then $825=15\times (55/1)$, generating the following sequence of integers:
$2$, $15$, $825$, $725$, $1925$, $2275$, $425$, $390$, $330$, $290$, $770$, $\ldots$
After 2, this sequence contains the following powers of 2:
$2^2=4$, $2^3=8$, $2^5=32$, $2^7=128$, $2^{11}=2048$, $2^{13}=8192$, $2^{17}=131072$, $2^{19}=524288$, $\ldots$
which are the prime powers of 2.
Write a function that takes a fractran program as a string parameter and returns the first 10 numbers of the program as an array. If the result does not have 10 numbers then return the numbers as is.
fractran
should be a function.
testString: assert(typeof fractran=='function','fractran
should be a function.');
- text: fractran("3/2, 1/3")
should return an array.
testString: assert(Array.isArray(fractran('3/2, 1/3')),'fractran("3/2, 1/3")
should return an array.');
- text: fractran("3/2, 1/3")
should return [ 2, 3, 1 ]
.
testString: assert.deepEqual(fractran('3/2, 1/3'), [ 2, 3, 1 ],'fractran("3/2, 1/3")
should return [ 2, 3, 1 ]
.');
- text: fractran("3/2, 5/3, 1/5")
should return [ 2, 3, 5, 1 ]
.
testString: assert.deepEqual(fractran('3/2, 5/3, 1/5'), [ 2, 3, 5, 1 ],'fractran("3/2, 5/3, 1/5")
should return [ 2, 3, 5, 1 ]
.');
- text: fractran("3/2, 6/3")
should return [ 2, 3, 6, 9, 18, 27, 54, 81, 162, 243 ]
.
testString: assert.deepEqual(fractran('3/2, 6/3'), [ 2, 3, 6, 9, 18, 27, 54, 81, 162, 243 ],'fractran("3/2, 6/3")
should return [ 2, 3, 6, 9, 18, 27, 54, 81, 162, 243 ]
.');
- text: fractran("2/7, 7/2")
should return [ 2, 7, 2, 7, 2, 7, 2, 7, 2, 7 ]
.
testString: assert.deepEqual(fractran('2/7, 7/2'), [ 2, 7, 2, 7, 2, 7, 2, 7, 2, 7 ],'fractran("2/7, 7/2")
should return [ 2, 7, 2, 7, 2, 7, 2, 7, 2, 7 ]
.');
- text: fractran("17/91, 78/85, 19/51, 23/38, 29/33, 77/29, 95/23, 77/19, 1/17, 11/13, 13/11, 15/14, 15/2, 55/1")
should return [ 2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290 ]
.
testString: assert.deepEqual(fractran('17/91, 78/85, 19/51, 23/38, 29/33, 77/29, 95/23, 77/19, 1/17, 11/13, 13/11, 15/14, 15/2, 55/1'), [ 2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290 ],'fractran("17/91, 78/85, 19/51, 23/38, 29/33, 77/29, 95/23, 77/19, 1/17, 11/13, 13/11, 15/14, 15/2, 55/1")
should return [ 2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290 ]
.');
```