[solucion] [golf] [caracas-pm] Caracas Perl Quiz #1
Irving A. Bermúdez S.
ibermude at ucab.edu.ve
Sat Feb 12 10:19:26 PST 2005
On Saturday 12 February 2005 11:08, Jose Rey wrote:
> Ya que los expertos se manifiestan, se me antoja un partidito de golf :-9
No soy experto, pero para estrenarme en la lista pongo mi solución. Hago reply
al mensaje de JLR porque el correo original de EHN no me llegó a través de la
lista sino a través de un forward de un compañero que sí está suscrito.
Es importante decir que mi función trans() la puedo simplificar y mejorar con
un tr, como hizo JLR en su solución para así también hacerse cargo de las
vocales y consonantes "adornadas" (Ojo, no hice trampa. Mi script lo escribí
anoche y acabo de ver esta solución). Un detalle que no vi acá fue que no
prevee la aparición de caracteres como los apóstrofes, que considero debería
obliterar. ;-)
Bueno, hí va, por favor no peguen duro. :-)
---------------------------------------------
#!/usr/bin/perl
$dict = "/usr/share/dict/american-english";
%tel = ();
open (DICT, "$dict") or die "poff! $!";
while (<DICT>) {
s/\W//g; $_ = lc;
(/^\w{5}\w{0,2}$/) ? $n = trans($_) : next;
$tel{$n} .= "$_ " unless ($tel{$n} =~ /$_/);
}
foreach (sort { $a <=> $b } keys %tel) { print '0' x (7 - length $_) . "$_:
$tel{$_}\n" if ($tel{$_} =~ /^\w+\s\w+/)};
sub trans {
local ($_) = @_;
# Debe haber una forma menos horrible de hacer esto.
s/[abc]/2/g; s/[def]/3/g; s/[ghi]/4/g; s/[jkl]/5/g;
s/[mno]/6/g; s/[pqrs]/7/g; s/[tuv]/8/g; s/[wxyz]/9/g;
return $_;
}
---------------------------------------------
Saludos,
More information about the caracas-pm
mailing list