termo-svd-engine é um solver matemático para o jogo TERMO que utiliza decomposição espectral para selecionar o palpite mais representativo do conjunto atual de palavras possíveis.
O projeto é inspirado na estratégia proposta por Michael Bonthron em Rank One Approximation as a Strategy for Wordle (arXiv:2204.06324), mas implementa uma adaptação própria, voltada ao TERMO em português, com interface gráfica interativa e heurísticas adicionais.
Aplicar conceitos de Álgebra Linear para:
- Representar palavras como vetores binários posicionais
- Construir uma matriz de soluções possíveis
- Extrair a direção dominante do espaço vetorial
- Selecionar o palpite mais representativo do conjunto
A proposta é transformar estrutura espectral em estratégia de decisão.
Cada palavra de 5 letras é codificada como vetor binário de dimensão 130:
- 26 letras possíveis
- 5 posições
- Codificação one-hot por posição
Exemplo conceitual:
posição 1 → 26 dimensões
posição 2 → 26 dimensões
...
posição 5 → 26 dimensões
Total: 5 × 26 = 130 dimensões.
Se existirem
Cada linha representa uma palavra vetorizada.
Em vez de calcular o SVD completo, a implementação utiliza:
e extrai o autovetor dominante via decomposição espectral:
BB = np.dot(A.T, A)
w2, v2 = np.linalg.eigh(BB)
dom_col = np.abs(v2[:, -1])Esse vetor captura a principal direção de variância do conjunto.
Para cada palavra candidata
A palavra escolhida é aquela com menor ângulo em relação ao vetor dominante.
Interpretação:
Seleciona-se a palavra mais alinhada com a estrutura latente do conjunto atual.
O algoritmo interpreta o feedback do jogo:
- Verde (posição correta)
- Amarelo (letra presente, posição incorreta)
- Cinza (letra ausente, com controle de exceções)
A cada rodada:
- Filtra o conjunto de palavras possíveis
- Reconstrói a matriz
- Recalcula o vetor dominante
- Sugere novo palpite
Arquivo: melhor_chute_inicial.py
Como estratégia complementar, o projeto inclui heurística simples para primeira jogada:
- Maximiza número de vogais distintas
- Aumenta poder informacional inicial
Exemplo:
def melhor_palavra_por_vogais_diferentes(lista_palavras):
return max(lista_palavras, key=conta_vogais_diferentes)Implementada com Tkinter, inclui:
- Entrada manual da palavra
- Alternância visual de cores (cinza, amarelo, verde)
- Histórico colorido das tentativas
- Sugestão automática do melhor palpite
- Reset completo do estado
termo-svd-engine/
│
├── script.py
├── melhor_chute_inicial.py
├── palavras_com_categorias.csv
└── README.md
- Python
- NumPy
- Pandas
- Tkinter
- Álgebra Linear Numérica
Instale dependências:
pip install numpy pandasExecute:
python script.pyCertifique-se de que palavras_com_categorias.csv esteja no mesmo diretório.
- Codificação vetorial posicional (130 dimensões)
- Decomposição espectral via ( A^T A )
- Similaridade angular (cosine-based selection)
- Filtragem determinística baseada em restrições
- Heurística informacional para chute inicial
- Interface gráfica interativa
Inspirado no trabalho de Michael Bonthron:
Rank One Approximation as a Strategy for Wordle (2022)
A implementação adapta a ideia de rank-one approximation para um ambiente prático e interativo, aplicando o conceito ao vocabulário do TERMO.
A metodologia pode ser generalizada para:
- Seleção do elemento mais representativo de um conjunto
- Amostragem representativa
- Sistemas de recomendação
- Problemas de clustering aproximado
- Tomada de decisão baseada em estrutura espectral
Este projeto demonstra:
- Aplicação prática de Álgebra Linear a problemas discretos
- Implementação numérica eficiente de autovalores
- Engenharia de sistemas matemáticos interativos
- Integração entre teoria espectral e interface gráfica