Erlang in Action
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.