So after the verbosity of my C# Solution I was wanting a neat solution, and was hoping that Erlang would deliver:
-module(challenge).
-export([main/0]).
main() ->
[worker(X, 0, [], [1,2,3,4,5,6,7,8,9]) || X <- [1,10,100,1000,10000,100000,1000000,10000000,100000000]],
true.
worker(Mod, Number, Used, ToUse) ->
if
Mod == 1 ->
[Number+X || X <- ToUse];
true ->
[worker(Mod div 10, Number+(X*Mod), [X]++Used, ([0,1,2,3,4,5,6,7,8,9]--Used)--[X]) || X <- ToUse]
end.
I feel this is pretty good. To get the results just remove the “true.“ statement from main().
Unfortunately it is not as fast as I would like, taking 5 seconds to run, but I’m not sure I’m using lists in the smartest way..