Convert phone numbers into keypad letters


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__


Back