Recentemente tive uma dúvida: é possível escrever palavras em português cujas letras estejam em ordem alfabética? Ora, evidente que sim. Palavras como cem e foz satisfazem esta condição.
Mas qual será a maior palavra em português em essa característica? Resolvi utilizar meus conhecimentos em expressões regulares para descobrir isso.
O primeiro passo foi obter palavras em português para analisar. Encontrei listas de palavras em um site da USP e no guithub. Juntei os dois, de modo a obter um conjunto de dados bastante grande:
library(stringi)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
palavras_usp <-
read.csv(file = "https://www.ime.usp.br/~pf/dicios/br-utf8.txt",
header = FALSE) %>%
mutate(V1 = stri_trans_general(str = V1, id = "Latin-ASCII"))
dim(palavras_usp)
## [1] 261798 1
palavras_github <-
read.csv("https://github.com/pythonprobr/palavras/blob/master/palavras.txt?raw=true",
header = FALSE) %>%
mutate(V1 = stri_trans_general(str = V1, id = "Latin-ASCII"))
dim(palavras_github)
## [1] 320139 1
palavras <-
palavras_usp %>%
bind_rows(palavras_github) %>%
arrange(V1) %>%
distinct()
Com a lista completa de 540523` palavras, bastou aplicar expressões regulares para filtrar aquelas me me interessam. Eu apliquei 3 filtros nesta lista de palavras:
- A expressão
regex
abaixo, que encontra apenas palavras cujas letras estejam em ordem algabética - Uma segunda filtragem na qual são excluídas todas as palavras com alguma letra maiúscula, para evitar as siglas das listas de palavras que obtive
- Exibir apenas as palavras com 6 ou mais letras
regex <- "^a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*$"
grep(regex, palavras$V1, value = TRUE) %>%
grep("[A-Z]", ., value = TRUE, invert = TRUE) %>%
grep("\\w{6}", ., value = TRUE)
## [1] "abenuz" "acenos" "acenou" "adejos" "adimos" "afilos" "afinou" "agimos"
## [9] "beijos" "beijou" "ceemos" "chinos" "chintz" "defino" "filmou"
Desta forma, “abenuz” (variação de ébano) e “chintz” (tecido de algodão estampado) são as únicas palavras da língua portuguesa com 6 ou mais letras em que todas elas estão em ordem alfabética, sem serem verbos conjugados ou plurais.