Cedric’s Coding challenge – An Erlang solution

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..