Convierte números de teléfono a códigos de teclas
Un ejercicio combinatorio. Se utilizan hashes para no repetir las combinaciones y
para asignar varias letras a un solo número. Nótese que el 1 se asigna al espacio y el 0
a si mismo, mientras que el 7 y el 9 tienen cuatro letras asignadas.
#!/usr/local/bin/perl -w
@n= (1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9,0);
$a[0]=" ";
push @a, qw(a b c d e f g h i j k l m n o p q r s t u v w x y z 0);
print "@n\n@a\n";
%an=();
for $i (0..$#a){
$an{$a[$i]}=$n[$i];
}
if (@ARGV==0) { die "usage: $0 < phone_number >"; }
$p = int($ARGV[0]);
if ($p+0 ne $p){ die "Not a number"; }
print "$p\n";
@p = split //, $p;
for $i (@p){
$kount=0;
$order[$count][0]=$i;
for $j (@a){
if ($an{$j}==$i){
$kount++;
$order[$count][$kount]=$j;
}
}
$count++;
}
%hash=();
for (;;){
$str="";
for $i (0..$count-1){
if ($order[$i][0]==1 || $order[$i][0]==0){ $j=1; }
elsif ($order[$i][0]==7 || $order[$i][0]==9){
$j = int(1+rand(3)+.5);
}else { $j = int (1+rand(2)+.5); }
$str .= $order[$i][$j];
}
$iter++;
last if ($iter==10_000_000);
$hash{$str}++;
if ($hash{$str}==1) { $kk++; print "$str\t$kk\n"; }
}
__END__