Erlang in Action

Posted by Aaron Feng Sun, 08 Jul 2007 21:51:00 GMT

I decided to see if I could rewrite the problem I solved in a previous post in Erlang. Here is the problem again:

A/BC + D/EF + G/HI = 1

-module(constraint).
-export([solve/0]).

solve() ->
    solve(generate_unique()).

solve([A,B,C,D,E,F,G,H,I]) when A/(10 * B + C) + 
                                D/(10 * E + F) + 
                                G/(10 * H + I) /= 1 -> 
    solve();
solve([A,B,C,D,E,F,G,H,I]) ->
    io:format("~w/~w~w + ~w/~w~w + ~w/~w~w = 1 ~n", 
        [A,B,C,D,E,F,G,H,I]).

generate_unique() ->
    generate_unique(0, []).

generate_unique(9, List) ->
    List;
generate_unique(N, List) ->
    Number = random:uniform(9),
    case lists:member(Number, List) of
        true ->  generate_unique(N, List);
        false -> generate_unique(N + 1, [Number|List])
    end.
Comments

Leave a response

Comments