[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