<br><br><div class="gmail_quote">On Sun, Jul 6, 2008 at 5:39 PM, Richard Carlsson <<a href="mailto:richardc@it.uu.se">richardc@it.uu.se</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">Edwin Fine wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Richard,<br>
<br>
Lovely solution! It's stuff like this that helps newcomers to Erlang like myself to learn how to write better Erlang.<br>
<br>
I'm curious, though; what is the reason for writing<br>
<br>
Qs = [integer_to_list(S) || S <- [X*X || X <- lists:seq(32,99)]]<br>
<br>
instead of<br>
<br>
Qs = [integer_to_list(X*X) || X <- lists:seq(32,99)]<br>
</blockquote>
<br></div>
None whatsoever. The person responsible should be keelhauled.<br>
Oh, right... Sorry.<br>
<br>
It's just a remnant of a refactoring. I started out working on<br>
lists on the form [S div 1000, ..., S rem 10], but realized that<br>
I could just use the lists of character codes instead. But I<br>
didn't tidy up after changing to integer_to_list(S). Improved<br>
version attached.</blockquote><div> </div><div>Oh, thank goodness!!  I thought it was some expert optimization or technique that I just couldn't understand :)<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<font color="#888888"><br>
    /Richard<br>
</font><br>%% File: solve.erl<br>
%% @author Richard Carlsson<br>
<br>
-module(solve).<br>
-export([it/0]).<br>
<br>
%% Problem: VIER and NEUN are 4-digit squares; determine distinct V, I,<br>
%% E, R, N, and U, such that (given the choice of E) there exists a<br>
%% unique solution (VIER,NEUN).<br>
<br>
it() -><br>
    Qs = [integer_to_list(X*X) || X <- lists:seq(32,99)],<br>
    Ps = [{E,{Vr,Nn}} || [N,E,_U,N]=Nn <- Qs, [_V,_I,E1,_R]=Vr <- Qs,<br>
                         E =:= E1,<br>
                         length(ordsets:from_list(Nn++Vr)) =:= 6],<br>
    D = lists:foldl(fun ({E,_}, D) -> dict:update_counter(E,1,D) end,<br>
                    dict:new(), Ps),<br>
    [P || {E,1} <- dict:to_list(D), {E1,P} <- Ps, E=:=E1].<br>
<br></blockquote></div><br><br clear="all"><br>-- <br>The great enemy of the truth is very often not the lie -- deliberate, contrived and dishonest, but the myth, persistent, persuasive, and unrealistic. Belief in myths allows the comfort of opinion without the discomfort of thought.<br>
John F. Kennedy 35th president of US 1961-1963 (1917 - 1963)