Self numbers: Difference between revisions

m (→‎{{header|Sidef}}: added a simpler function)
Line 916:
10,000,000 102,272,662
100,000,000 1,022,727,208</pre>
 
=={{header|jq}}==
'''Adapted from [[#Julia|Julia]]'''
{{works with|jq}}
<lang jq>
def sumdigits: tostring | explode | map([.]|implode|tonumber) | add;
 
def gsum: . + sumdigits;
 
def isnonself:
def ndigits: tostring|length;
. as $i
| ($i - ($i|ndigits)*9) as $n
| any( range($i-1; [0,$n]|max; -1);
gsum == $i);
 
# an array
def last81:
[limit(81; range(1; infinite) | select(isnonself))];
 
# output an unbounded stream
def selfnumbers:
foreach range(1; infinite) as $i ( [0, last81];
.[0] = false
| .[1] as $last81
| if $last81 | bsearch($i) < 0
then .[0] = $i
| if $i > $last81[-1] then .[1] = $last81[1:] + [$i | gsum ] else . end
else .
end;
.[0] | select(.) );
 
 
"The first 50 self numbers are:", last81[:50],
"",
(nth(100000000 - 1; selfnumbers)
| if . == 1022727208
then "Yes, \(.) is the 100,000,000th self number."
else "No, \(.i) is actually the 100,000,000th self number."
end)</lang>
{{out}}
<pre>
The first 50 self numbers are:
[2,4,6,8,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,54,55,56,57,58,59]
 
Yes, 1022727208 is the 100,000,000th self number.
 
</pre>
 
 
 
=={{header|Julia}}==
2,442

edits