Motivação Link para o cabeçalho

Esses dias me perguntei qual é a palavra brasileira com mais anagramas. AMOR, que de cabeça sei que possui ao menos os anagramas

  • ROMA
  • RAMO
  • OMAR
  • MORA
  • ARMO

Mas será que há palabvras com mais anagramas do que essa? Será que obrigatoriamente essas palavras devem ser mais longas? Será que o tamanho das palavras influencia na quantidade de anagramas?

Utilizando este site da USP, baixei uma lista de 245366 palavras da língua portuguesa para verificar isso.

Código Link para o cabeçalho

Após baixar o dicionário em meu computador, tomei cada palavra do dicionário e coloquei suas letras em ordem alfabética. Com isso, AMOR se torna, bem, AMOR, pois ela já está com as suas letras em ordem alfabética. Mas todos os seus anagramas (ROMA, RAMO, OMAR, MORA, ARMO) também se tornarão AMOR. E o mesmo vale para toda palavra do dicionário. Vou chamar essas palavras todas de palavra_colapsada.

Com isso, basta encontrar os casos de cada palavra colapsada para encontrar todos os anagramas dela.

library(tidyverse)

dicionario <- 
  read_csv(file = "dados/palavras_usp.txt", col_names = FALSE) |> 
  rename(palavra = X1)

colapsar <- function(x){
  return(paste(sort(unlist(strsplit(x, split = ""))), collapse = ""))
}

palavra_colapsada <- rep(NA, nrow(dicionario))

for(j in 1:nrow(dicionario)){
  palavra_colapsada[j] <- colapsar(pull(dicionario[j, 1]))
}

dicionario <-
  dicionario |> 
  bind_cols(palavra_colapsada = palavra_colapsada) |> 
  mutate(tamanho = nchar(palavra_colapsada))

Analisando este resultado, temos o seguinte:

resumo <- 
  dicionario |> 
  count(palavra_colapsada)

resumo |> 
  arrange(desc(n))
## # A tibble: 207,862 × 2
##    palavra_colapsada     n
##    <chr>             <int>
##  1 aaeirrst             15
##  2 adeimor              13
##  3 aeimorsv             13
##  4 aaeilrst             12
##  5 aaelmorst            12
##  6 aacelmors            11
##  7 aaelrst              11
##  8 aceimors             11
##  9 aceiorrst            11
## 10 aceorst              11
## # ℹ 207,852 more rows
dicionario |> 
  filter(palavra_colapsada == "aaeirrst") |> 
  print(n = Inf)
## # A tibble: 15 × 3
##    palavra  palavra_colapsada tamanho
##    <chr>    <chr>               <int>
##  1 arrastei aaeirrst                8
##  2 arriaste aaeirrst                8
##  3 arteiras aaeirrst                8
##  4 arterias aaeirrst                8
##  5 aterrais aaeirrst                8
##  6 atirares aaeirrst                8
##  7 atraires aaeirrst                8
##  8 estirara aaeirrst                8
##  9 iteraras aaeirrst                8
## 10 rasteira aaeirrst                8
## 11 rastreai aaeirrst                8
## 12 rastreia aaeirrst                8
## 13 restaria aaeirrst                8
## 14 retraias aaeirrst                8
## 15 traseira aaeirrst                8

A palavra em língua portuguesa com a maior quantidade de anagramas é ARRASTEI, com as 15 variações mostradas acima.

Mas será que AMOR é a palavra de quatro letras com mais anagramas? Quais são esses? E casos não seja a palavra de quatro letras com mais anagramas, qual será?

dicionario |> 
  filter(palavra_colapsada == "amor") |> 
  print(n = Inf)
## # A tibble: 7 × 3
##   palavra palavra_colapsada tamanho
##   <chr>   <chr>               <int>
## 1 amor    amor                    4
## 2 armo    amor                    4
## 3 mora    amor                    4
## 4 oram    amor                    4
## 5 ramo    amor                    4
## 6 roam    amor                    4
## 7 roma    amor                    4
dicionario |> 
  filter(tamanho == 4) |> 
  count(palavra_colapsada) |> 
  arrange(desc(n))
## # A tibble: 1,025 × 2
##    palavra_colapsada     n
##    <chr>             <int>
##  1 acos                  8
##  2 amor                  7
##  3 aors                  7
##  4 emor                  7
##  5 acor                  6
##  6 aemr                  6
##  7 amsu                  6
##  8 egor                  6
##  9 eimr                  6
## 10 aclo                  5
## # ℹ 1,015 more rows
dicionario |> 
  filter(palavra_colapsada == "acos") |> 
  print(n = Inf)
## # A tibble: 8 × 3
##   palavra palavra_colapsada tamanho
##   <chr>   <chr>               <int>
## 1 asco    acos                    4
## 2 caos    acos                    4
## 3 caso    acos                    4
## 4 coas    acos                    4
## 5 cosa    acos                    4
## 6 ocas    acos                    4
## 7 saco    acos                    4
## 8 soca    acos                    4

Assim, AMOR possui sete anagramas. ORAM e ROAM foram as duas únicas que faltaram na minha lista.

Também é posível ver que a palavra ASCO, com os anagramas mostrados acima, é a palavra de quatro letras com a maior quantidade de anagramas, totalizando oito.