Permutações com repetição: o guia sem frescura
A palavra "arara" tem cinco letras, mas nem todas são únicas. Três letras são A e duas são R. Quando você pensa em anagramas, precisa tratar isso como um problema de permutação com repetição, não como um jogo de palavras. A conta é direta: cinco fatórial dividido por três fatórial (das letras A repetidas) vezes dois fatórial (das letras R repetidas). O resultado são dez disposições distintas.
Quantos anagramas tem a palavra arara
A resposta exata é dez arranjos únicos. Aqui está a lista completa, só para deixar claro o que estamos falando: AAAAA com as posições dos R variando. Como só há dois R no total, cada anagrama diferente corresponde simplesmente a uma escolha diferente de quais duas das cinco posições recebem o R. O número de formas de escolher duas posições entre cinco é o coeficiente binomial C(5,2), que é igual a dez. Os dez anagramas são:
👉 Clique no botão abaixo para saber mais sobre o assunto!
ARARA, ARRAS, AARRA, RAARA, RAAAR, ARAAR, AARAR, RRAAA, RRAAR, AARRR. Se a pergunta for interpretada como "quantas palavras significativas existem entre esses anagramas", a resposta cai drasticamente. Em português, apenas "arara" propriamente dita é palavra válida do dicionário. "Arras" pode aparecer em alguns contextos (plurale de arra, embora seja muito raro), mas isso já é zona cinzenta lexicográfica. Para fins práticos, um anagrama válido de dicionário: arara.
Eu já perdi tempo tentando montar um script que gerasse todos os anagramas e depois filtrasse por palavras reais num dicionário de mais de 40 mil entradas. O problema que ninguém te conta é que a maioria das bibliotecas de geração de permutações — itertools.permutations no Python, por exemplo — trata elementos iguais como distinguíveis. Se você passar a lista ['A','R','A','R','A'] direto pro permutations, ele te devolve 120 resultados, não dez. A diferença é gritante. A correção é aplicar um set logo em seguida pra deduplicar, ou usar itertools.permutations combinado com um contador de multiconjunto. Gastei uma tarde inteira achando que meu código estava errado porque o número não batia com a teoria. O código estava certo. A intuição é que falhou. Outro detalhe que começa a dar trabalho é quando a palavra aumenta. Com seis letras e duas repetições, você já está na casa de 360 permutações brutas antes da deduplicação. Com sete letras, todas iguais exceto uma, sai de 5040 para 7. O crescimento não é linear. Se você for brincar com palavras maiores, considere gerar diretamente as combinações de posições dos elementos distintos em vez de permutar tudo e filtrar. No caso de arara, deu trabalho mínimo porque o problema é pequeno demais para ser incômodo. Em palavras como "banana" ou "estatística", a diferença entre gerar 5040 coisas e 420 coisas reais muda o tempo de execução de frações de segundo para algo que dá preguiça de esperar.
Se o seu objetivo é apenas saber a quantidade sem listar tudo, a fórmula de permutação com repetição resolve em linha. Se o objetivo é encontrar anagramas válidos num dicionário, aí entra a parte chata de carregar o lexicon e cruzar resultados. Ferramentas como o script que eu usei na época funcionam, mas exigem que você tenha um arquivo .txt com as palavras filtradas corretamente — sem acentos, tudo em maiúsculas, uma palavra por linha. Se o dicionário vier com acentos, "arara" vai bater, mas "revólver" vai se perder porque o anagramador não normaliza. Para quem quer algo pronto, o algoritmo em si é simples o suficiente pra implementar em qualquer linguagem. Não tem muito segredo. A parte que pega é a validação linguística, não a matemática. Dez arranjos para "arara". É pouco mesmo. O difícil seria se a palavra fosse maior.