O problema é encontrar o menor número de placas para representar todos os números de 0 a 999.
#!/usr/bin/perl
use Roman;
use Data::Dumper;
use strict;
my %symbols=();
for my $b (0..999) {
my %s=();
my $r=factoradic($b);
print "$r\n";
my @s=split(//,$r);
for my $s (@s) {
$s{$s}++;
if ($symbols{$s}<$s{$s}) {
$symbols{$s}=$s{$s};
}
}
}
for my $d (keys %symbols) {
print "$d => $symbols{$d}\n";
}
sub factoradic {
use integer;
my $n=shift;
my $f='';
my $i=1;
do {
$f=($n%$i).$f;
$n/=$i;
$i++;
} while($n>0);
return $f;
}
Para os numerais romanos, encontrei um módulo pronto no CPAN. Não tive tanta sorte com a base fatorádica, mas é muito fácil converter.
Os numerais romanos surpreenderam: são bastante mais econômicos e necessitam apenas 15 placas (mais uma para o zero). Já a fatorádica, requer 22 placas e fica, portanto, entre as bases 5 e 6 no ranking geral.
As placas necessárias seriam: I (3), V (1), X (4), L (1), C (4), D (1), M (1). Para o zero, a melhor opção seria N (de nulla ou nihil).
Especialização é quando você vai ao Google para procurar por "base fatorádica" e o primeiro resultado (exceto por adds) é um link para um post de 2012 nesse mesmo blog :-)
ResponderExcluir