my @d = qw( respect strength ); # yeah, weak dictionary, sue me! my $n = "7377328"; my %a = ( 1=>[], 2=>['a','b','c'], 3=>['d','e','f'], 4=>['g','h','i'], 5=>['j','k','l'], 6=>['m','n','o'], 7=>['p','q','r','s'], 8=>['t','u','v'], 9=>['w','x','y','z'] ); my @r = words( $n, \%a, \@d ); print join ",",@r; print "\n"; sub words{ #234567890123456789012345678901234567890123456789012345678901234567890 +123456789012345678901234567890123 my($n,$a,$d,@l,@b,$c,$e)=@_;@b=split//,$n;@a=('');for(@b){$c=$_;@a=map +{$e=$_;map{$e.$_}@{$a->{$c}}}@a}; grep{$c=$_;grep{$c eq$_}@$d}@a }
Note that if %a was an array, it would only change a set of curly braces to square ones, and would not change the character count.
update ok, this only handles the case of matching exactly one word from the dictionary; more work would be needed to find any word combo.
In reply to Re: (Golf) mobile phone numbers - words
by Masem
in thread (Golf) mobile phone numbers -> words
by mischief
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |