Narcissistic decimal number: Difference between revisions
Content added Content deleted
(Added Elixir) |
|||
Line 295: | Line 295: | ||
0 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084 548834 1741725 4210818 9800817 9926315 |
0 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084 548834 1741725 4210818 9800817 9926315 |
||
</pre> |
</pre> |
||
=={{header|C sharp|C#}}== |
=={{header|C sharp|C#}}== |
||
<lang csharp> |
<lang csharp> |
||
Line 578: | Line 579: | ||
length 16: 4338281769391371 4338281769391370</pre> |
length 16: 4338281769391371 4338281769391370</pre> |
||
With LDC2 compiler and maxLength=16 the run-time is about 0.64 seconds. |
With LDC2 compiler and maxLength=16 the run-time is about 0.64 seconds. |
||
=={{header|Elixir}}== |
|||
{{trans|D}} |
|||
<lang elixir>defmodule RC do |
|||
def narcissistic(m) do |
|||
Enum.reduce(1..10, [0], fn digits,acc -> |
|||
digitPowers = List.to_tuple(for i <- 0..9, do: power(i, digits)) |
|||
Enum.reduce(power(10, digits-1) .. power(10, digits)-1, acc, fn n,result -> |
|||
sum = divsum(n, digitPowers, 0) |
|||
if n == sum do |
|||
if length(result) == m-1, do: throw Enum.reverse(result, [n]) |
|||
[n | result] |
|||
else |
|||
result |
|||
end |
|||
end) |
|||
end) |
|||
end |
|||
defp divsum(0, _, sum), do: sum |
|||
defp divsum(n, digitPowers, sum) do |
|||
divsum(div(n,10), digitPowers, sum+elem(digitPowers,rem(n,10))) |
|||
end |
|||
defp power(n, m), do: power(n, m, 1) |
|||
defp power(_, 0, pow), do: pow |
|||
defp power(n, m, pow), do: power(n, m-1, pow*n) |
|||
end |
|||
try do |
|||
RC.narcissistic(25) |
|||
catch |
|||
x -> IO.inspect x |
|||
end</lang> |
|||
{{out}} |
|||
<pre> |
|||
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, |
|||
92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315] |
|||
</pre> |
|||
=={{header|ERRE}}== |
=={{header|ERRE}}== |