Self numbers: Difference between revisions

Content added Content deleted
m (→‎{{header|Sidef}}: added a simpler function)
Line 916: Line 916:
10,000,000 102,272,662
10,000,000 102,272,662
100,000,000 1,022,727,208</pre>
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}}==
=={{header|Julia}}==