DB<288> sub fac {my $x=1; $x*=$_ for 2..$_[0]; $x}
DB<289> sub binom { my ($n,$k)=@_; fac($n)/(fac($n-$k)*fac($k)) }
DB<290> binom 26,8
=> 1562275
####
a bcd
abcd
aa cd
aab d
aabc
##
##
DB<292> length "aaaabbbcccddddeeeeffffgggghhhiiijjkkkllllmmmnnnnoooopppqrrrrssssstttuuuuvvwwwxxyyyzzzz"
=> 86
DB<293> binom 86,8
=> "53060358690"
##
##
"aaaabbbc..." # pattern
"1000100...." # ok => ab...
"1100100...." # ok => aab...
"1001100.... # not ok => aab...
##
##
use strict;
use warnings;
use Data::Dump qw/pp/;
my %max=(
a => 4,
b => 3,
c => 3,
d => 4,
e => 4,
f => 4,
g => 4,
h => 3,
i => 3,
j => 2,
k => 3,
l => 4,
m => 3,
n => 4,
o => 4,
p => 3,
q => 1,
r => 4,
s => 5,
t => 3,
u => 4,
v => 2,
w => 3,
x => 2,
y => 3,
z => 4,
);
my $maxword=8;
#%max=(a=>2,b=>1,c=>1,d=>1);
#$maxword=4;
my @keysort=sort keys %max;
my $nsolutions=0;
sub generate {
my ($idx,$word)=@_;
#pp \@_;
return if $idx >= @keysort;
my $newword;
my $key= $keysort[$idx];
for my $n (0..$max{$key}){
# print "\t"x$idx ,"$n x $key\n";
my $newword = $word.($key x $n);
if ($maxword== length $newword) {
# print "-> $newword\n";
$nsolutions++;
last;
}
generate($idx+1, $newword )
}
}
generate(0,"");
print $nsolutions;