Goodstein Sequence: Difference between revisions
Content deleted Content added
m →{{header|Phix}}: marked js compatible |
|||
Line 52: | Line 52: | ||
=={{header|jq}}== |
|||
'''Works with gojq, the Go implementation of jq''' |
|||
'''Adapted from [[#Wren|Wren]]''' |
|||
This entry assumes infinite-precision integer arithmetic as provided by the Go |
|||
implementation of jq. |
|||
<syntaxhighlight lang="jq"> |
|||
# To take advantage of gojq's infintite-precision integer arithmetic: |
|||
def power($b): . as $in | reduce range(0;$b) as $i (1; . * $in); |
|||
# If $j is 0, then an error condition is raised; |
|||
# otherwise, assuming infinite-precision integer arithmetic, |
|||
# if the input and $j are integers, then the result will be a pair of integers. |
|||
def divmod($j): |
|||
. as $i |
|||
| ($i % $j) as $mod |
|||
| [($i - $mod) / $j, $mod] ; |
|||
# Given non-negative integer $n and base b$, return hereditary representation |
|||
# consisting of tuples (j, k) such that the sum of all (j * b^(evaluate(k; b)) == n. |
|||
def decompose($n; $b): |
|||
if $n < $b then $n |
|||
else { n: $n, decomp: [], e: 0 } |
|||
| until (.n == 0; |
|||
(.n | divmod($b)) as $t |
|||
| .n = $t[0] |
|||
| $t[1] as $r |
|||
| if $r > 0 then .decomp += [[$r, decompose(.e; $b)]] end |
|||
| .e += 1 ) |
|||
| .decomp |
|||
end; |
|||
# Evaluate hereditary representation $d under base $b. |
|||
def evaluate($d; $b): |
|||
if $d|type == "number" then $d |
|||
else reduce $d[] as [$j, $k] (0; |
|||
. + $j * ($b|power(evaluate($k; $b))) ) |
|||
end ; |
|||
# Return a vector of up to $limitlength values of the Goodstein sequence for $n. |
|||
def goodstein($n; $limitLength): |
|||
{ seq: [], b: 2, $n } |
|||
| until (.n == false or (.seq|length) >= $limitLength ; |
|||
.seq += [.n] |
|||
| if .n == 0 then .n = false |
|||
else decompose(.n; .b) as $d |
|||
| .b += 1 |
|||
| .n = evaluate($d; .b) - 1 |
|||
end ) |
|||
| .seq; |
|||
# Get the $nth term of the Goodstein($n) sequence counting from 0 |
|||
def a266201($n): goodstein($n; $n+1)[-1]; |
|||
### The tasks |
|||
"Goodstein(n) sequence (first 10) for values of n in [0, 7]:", |
|||
(range (0;8) | "Goodstein of \(.): \(goodstein(.; 10))"), |
|||
"\nThe nth term of Goodstein(n) sequence counting from 0, for values of n in [0, 16]:", |
|||
( range (0;17) | "Term \(.) of Goodstein(\(.)): \(a266201(.))" ) |
|||
</syntaxhighlight> |
|||
{{output}} |
|||
Command invocation: gojq -n -f goodstein-sequence.jq |
|||
<pre> |
|||
Goodstein(n) sequence (first 10) for values of n in [0, 7]: |
|||
Goodstein of 0: [0] |
|||
Goodstein of 1: [1,0] |
|||
Goodstein of 2: [2,2,1,0] |
|||
Goodstein of 3: [3,3,3,2,1,0] |
|||
Goodstein of 4: [4,26,41,60,83,109,139,173,211,253] |
|||
Goodstein of 5: [5,27,255,467,775,1197,1751,2454,3325,4382] |
|||
Goodstein of 6: [6,29,257,3125,46655,98039,187243,332147,555551,885775] |
|||
Goodstein of 7: [7,30,259,3127,46657,823543,16777215,37665879,77777775,150051213] |
|||
The nth term of Goodstein(n) sequence counting from 0, for values of n in [0, 16]: |
|||
Term 0 of Goodstein(0): 0 |
|||
Term 1 of Goodstein(1): 0 |
|||
Term 2 of Goodstein(2): 1 |
|||
Term 3 of Goodstein(3): 2 |
|||
Term 4 of Goodstein(4): 83 |
|||
Term 5 of Goodstein(5): 1197 |
|||
Term 6 of Goodstein(6): 187243 |
|||
Term 7 of Goodstein(7): 37665879 |
|||
Term 8 of Goodstein(8): 20000000211 |
|||
Term 9 of Goodstein(9): 855935016215 |
|||
Term 10 of Goodstein(10): 44580503598539 |
|||
Term 11 of Goodstein(11): 2120126221988686 |
|||
Term 12 of Goodstein(12): 155568095557812625 |
|||
Term 13 of Goodstein(13): 6568408355712901455 |
|||
Term 14 of Goodstein(14): 295147905179358418247 |
|||
Term 15 of Goodstein(15): 14063084452070776884879 |
|||
Term 16 of Goodstein(16): 2771517379996516970665566613559367879596937714713289695169887161862950129194382447127464877388711781205972046374648603545513430106433206876557475731408608398953667881600740852227698037876781766310900319669456854530159244376159780346700931210394158247781113134808720678004134212529413831368888355854503034587880113970541681685966414888841800498150131839091463034162026108960280455620621355407543489960326268155088833218122810217973039385643494213235664908254695964740257569988152978579630435471016976693529875691083071137361386386918409765002837648351746984484967203877495399596876291343126699827442908994036031608979805166915596436929638418152127561722561465793969723556331679336828840983098559789555364076924597258115780567651772009250336359472037679350612341393780002377587368649157608579801815531133644879180066181854487069796160774056572568941004114162614925 |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |