1136 lines
9.1 KiB
Markdown
1136 lines
9.1 KiB
Markdown
---
|
|
title: "Find All Possible Words From Two Syllables"
|
|
date: 2022-12-24T01:17:32-03:00
|
|
draft: false
|
|
tags: ['csharp', 'portuguese', 'education']
|
|
---
|
|
|
|
The complete code can be found at [my repository](https://github.com/developerbedoya/palavras-duas-silabas-vogal-consonante).
|
|
|
|
My wife is a special needs teacher, and her speciality is to teach how to read and write in portuguese for their challenged students. She developed a "method" for teaching portuguese, and she starts with simple words with two syllables, each two characters long:
|
|
|
|
```
|
|
babá, casa, pera, saco, lobo, etc...
|
|
```
|
|
|
|
So I was automatically challenged to create a list of all the worls thah can be made using two syllables, each two characters long: a vocal and a consonant:
|
|
|
|
```csharp
|
|
using ListaPalavras;
|
|
|
|
var vogais = new char[] { 'a', 'e', 'i', 'o', 'u' };
|
|
var consonantes = new char[] { 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm',
|
|
'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'};
|
|
|
|
var listaPalavrasDuasSilabas = PermutacaoSilabas.Cria(vogais, consonantes);
|
|
|
|
var listaPalavrasPTBR = (await DicionarioWeb.Obtem("pt_BR"))
|
|
.FiltraPorTamanhoMaximoPalavra(4)
|
|
.FiltraPorDicionario(listaPalavrasDuasSilabas);
|
|
|
|
listaPalavrasPTBR.Palavras.AsParallel().ForAll(Console.WriteLine);
|
|
```
|
|
|
|
The static class ```PermutacaoSilabas``` makes a list of all possible words using a combination of two syllables, each one with 2 vocals and 2 consonants.
|
|
|
|
```csharp
|
|
namespace ListaPalavras;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
public class PermutacaoSilabas : IListaPalavras
|
|
{
|
|
private IEnumerable<string> _palavras;
|
|
|
|
public IEnumerable<string> Palavras { get => _palavras; }
|
|
|
|
private PermutacaoSilabas(IEnumerable<string> palavras)
|
|
{
|
|
_palavras = palavras;
|
|
}
|
|
|
|
public static PermutacaoSilabas Cria(IEnumerable<char> listaVogais, IEnumerable<char> listaConsonantes)
|
|
{
|
|
var combinacoesSilabicas = new List<string>();
|
|
var combinacoesPalavras = new List<string>();
|
|
|
|
foreach (var vogal in listaVogais)
|
|
{
|
|
foreach (var consonante in listaConsonantes)
|
|
{
|
|
combinacoesSilabicas.Add($"{consonante}{vogal}");
|
|
}
|
|
}
|
|
|
|
foreach (var primeiraSilaba in combinacoesSilabicas)
|
|
{
|
|
foreach (var segundaSilaba in combinacoesSilabicas)
|
|
{
|
|
combinacoesPalavras.Add($"{primeiraSilaba}{segundaSilaba}");
|
|
}
|
|
}
|
|
|
|
return new PermutacaoSilabas(combinacoesPalavras);
|
|
}
|
|
}
|
|
```
|
|
|
|
The static class ```DicionarioWeb``` downloads the list of words from the libreoffice dictionary.
|
|
|
|
```csharp
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace ListaPalavras;
|
|
public class DicionarioWeb : IListaPalavras
|
|
{
|
|
private IEnumerable<string> _palavras;
|
|
|
|
public IEnumerable<string> Palavras { get => _palavras; }
|
|
|
|
private DicionarioWeb(IEnumerable<string> palavras)
|
|
{
|
|
_palavras = palavras;
|
|
}
|
|
|
|
public static async Task<DicionarioWeb> Obtem(string codigoLinguagem)
|
|
{
|
|
string baseUrl = "https://raw.githubusercontent.com/";
|
|
string requestUrl = $"LibreOffice/dictionaries/master/{codigoLinguagem}/{codigoLinguagem}.dic";
|
|
|
|
var httpClient = new HttpClient();
|
|
httpClient.BaseAddress = new Uri(baseUrl);
|
|
|
|
string conteudoDicionario = await httpClient.GetStringAsync(requestUrl);
|
|
var regexPalavraDicionario = new Regex("[^/]+", RegexOptions.Compiled);
|
|
|
|
var listaPalavras = conteudoDicionario.Split('\n')
|
|
.Select(p => regexPalavraDicionario.Matches(p).FirstOrDefault()?.Value ?? "")
|
|
.Where(p => !string.IsNullOrWhiteSpace(p));
|
|
|
|
return new DicionarioWeb(listaPalavras);
|
|
}
|
|
|
|
public DicionarioWeb FiltraPorTamanhoMaximoPalavra(int numeroMaximoLetras)
|
|
{
|
|
_palavras = _palavras.Where(p => p.Length <= numeroMaximoLetras);
|
|
return this;
|
|
}
|
|
|
|
public DicionarioWeb FiltraPorDicionario(IListaPalavras dicionario)
|
|
{
|
|
_palavras = _palavras.Where(p => dicionario.Palavras.Contains(p));
|
|
return this;
|
|
}
|
|
}
|
|
```
|
|
|
|
That was the result, my wife was thankful because she had a limited set of words and I expanded into more possibilities to enrich the alphabetization process. All those words are in the portuguese dictionary:
|
|
|
|
```
|
|
babi
|
|
badi
|
|
bagi
|
|
bacu
|
|
babu
|
|
baco
|
|
bada
|
|
bafo
|
|
bame
|
|
bago
|
|
bagu
|
|
baju
|
|
bage
|
|
bapo
|
|
bari
|
|
baro
|
|
baru
|
|
base
|
|
baxi
|
|
bazo
|
|
beco
|
|
befe
|
|
bege
|
|
beje
|
|
beji
|
|
belo
|
|
beno
|
|
beri
|
|
bero
|
|
beru
|
|
beta
|
|
beti
|
|
betu
|
|
bevo
|
|
bibe
|
|
bibi
|
|
bibo
|
|
bicu
|
|
bida
|
|
bidu
|
|
bigu
|
|
biju
|
|
bifu
|
|
bile
|
|
biga
|
|
bime
|
|
bimo
|
|
bira
|
|
biri
|
|
biru
|
|
bita
|
|
biva
|
|
bixa
|
|
biza
|
|
bizu
|
|
bobo
|
|
boca
|
|
bode
|
|
bodi
|
|
bojo
|
|
boli
|
|
bori
|
|
boro
|
|
bosa
|
|
bosi
|
|
bota
|
|
boxe
|
|
bubi
|
|
bubo
|
|
bubu
|
|
buco
|
|
bucu
|
|
buda
|
|
budu
|
|
buja
|
|
buji
|
|
bule
|
|
bume
|
|
buna
|
|
buri
|
|
buro
|
|
buru
|
|
buso
|
|
buto
|
|
buva
|
|
buxo
|
|
buzi
|
|
buzo
|
|
buzu
|
|
cabo
|
|
cabu
|
|
caco
|
|
cacu
|
|
cade
|
|
cado
|
|
cafe
|
|
caju
|
|
cali
|
|
calu
|
|
cama
|
|
cani
|
|
cano
|
|
capa
|
|
cari
|
|
caro
|
|
caru
|
|
casu
|
|
cati
|
|
cavi
|
|
cavu
|
|
caxe
|
|
caxo
|
|
cebo
|
|
ceca
|
|
ceco
|
|
cefo
|
|
celo
|
|
cene
|
|
ceno
|
|
cepo
|
|
cero
|
|
ceru
|
|
ceso
|
|
ceto
|
|
cica
|
|
cide
|
|
cifo
|
|
cilo
|
|
cimo
|
|
cine
|
|
cipo
|
|
cira
|
|
cobo
|
|
cobu
|
|
coco
|
|
cofo
|
|
coli
|
|
cone
|
|
cono
|
|
copo
|
|
copu
|
|
cori
|
|
coro
|
|
coru
|
|
cota
|
|
covo
|
|
coxe
|
|
coxo
|
|
cubi
|
|
cubo
|
|
cubu
|
|
cuci
|
|
cuco
|
|
cucu
|
|
cude
|
|
cudo
|
|
cudu
|
|
cuje
|
|
cujo
|
|
cule
|
|
culi
|
|
cume
|
|
cumi
|
|
cuno
|
|
cupa
|
|
cupi
|
|
cupu
|
|
cura
|
|
curi
|
|
cute
|
|
cuva
|
|
cuvu
|
|
cuxu
|
|
dabi
|
|
dabo
|
|
dabu
|
|
dace
|
|
daco
|
|
daga
|
|
dala
|
|
dali
|
|
damo
|
|
dano
|
|
data
|
|
deca
|
|
deci
|
|
dele
|
|
demo
|
|
dero
|
|
dibo
|
|
dica
|
|
didi
|
|
difa
|
|
dilo
|
|
dima
|
|
dine
|
|
dino
|
|
dipa
|
|
diro
|
|
disa
|
|
dito
|
|
divo
|
|
dixe
|
|
doca
|
|
doce
|
|
dodo
|
|
doge
|
|
dojo
|
|
doli
|
|
dolo
|
|
dono
|
|
dore
|
|
dote
|
|
doxa
|
|
doze
|
|
dubu
|
|
duco
|
|
duda
|
|
duga
|
|
dubo
|
|
dule
|
|
dumo
|
|
duna
|
|
duro
|
|
duru
|
|
face
|
|
faco
|
|
fago
|
|
fajo
|
|
fari
|
|
duto
|
|
duzu
|
|
fato
|
|
favo
|
|
febo
|
|
feno
|
|
faro
|
|
fase
|
|
fate
|
|
fido
|
|
fife
|
|
fifi
|
|
figo
|
|
fila
|
|
fini
|
|
fino
|
|
fisa
|
|
faba
|
|
falo
|
|
fama
|
|
fepe
|
|
fero
|
|
feto
|
|
fibo
|
|
fise
|
|
fito
|
|
fixo
|
|
fogo
|
|
fojo
|
|
fole
|
|
fome
|
|
fomo
|
|
fone
|
|
fono
|
|
fopa
|
|
foro
|
|
foto
|
|
foxo
|
|
fuba
|
|
fuca
|
|
fulo
|
|
fumo
|
|
furo
|
|
fute
|
|
fuco
|
|
fufa
|
|
fufu
|
|
fuje
|
|
gado
|
|
gage
|
|
fuzo
|
|
gaci
|
|
gade
|
|
gadi
|
|
gana
|
|
gape
|
|
gare
|
|
gari
|
|
gago
|
|
gajo
|
|
gali
|
|
galo
|
|
gelo
|
|
gene
|
|
geno
|
|
geso
|
|
gaze
|
|
garo
|
|
garu
|
|
gate
|
|
gato
|
|
gazo
|
|
gebu
|
|
geco
|
|
gigo
|
|
gila
|
|
gimo
|
|
giro
|
|
geta
|
|
gibi
|
|
gibo
|
|
gido
|
|
gita
|
|
gobo
|
|
gofo
|
|
gogo
|
|
gojo
|
|
gole
|
|
gode
|
|
godo
|
|
goli
|
|
golo
|
|
gomo
|
|
goni
|
|
gonu
|
|
gote
|
|
goto
|
|
gova
|
|
goxo
|
|
gozo
|
|
gude
|
|
gudu
|
|
gugu
|
|
gula
|
|
gume
|
|
gune
|
|
guri
|
|
guro
|
|
guru
|
|
guso
|
|
guto
|
|
guvo
|
|
guxe
|
|
guzo
|
|
habe
|
|
haco
|
|
hacu
|
|
haje
|
|
haji
|
|
hala
|
|
halo
|
|
hari
|
|
hedu
|
|
hela
|
|
heme
|
|
hemi
|
|
hena
|
|
hepa
|
|
here
|
|
hete
|
|
hexa
|
|
heza
|
|
hico
|
|
hifa
|
|
hilo
|
|
hino
|
|
hipo
|
|
hobo
|
|
hoje
|
|
holo
|
|
homo
|
|
hona
|
|
hopi
|
|
hopo
|
|
hora
|
|
hote
|
|
hova
|
|
hoxa
|
|
hubi
|
|
hubo
|
|
hude
|
|
hula
|
|
humo
|
|
huno
|
|
hura
|
|
huri
|
|
husa
|
|
hutu
|
|
jabe
|
|
jabu
|
|
jaci
|
|
jaco
|
|
jacu
|
|
jade
|
|
jaga
|
|
jala
|
|
jami
|
|
jano
|
|
japa
|
|
japi
|
|
japu
|
|
jaro
|
|
jaru
|
|
jati
|
|
jatu
|
|
java
|
|
jeba
|
|
jebu
|
|
jeco
|
|
jeje
|
|
jeju
|
|
jeni
|
|
jero
|
|
jeru
|
|
jesu
|
|
jeta
|
|
jiba
|
|
jibi
|
|
jiga
|
|
jiju
|
|
jile
|
|
jina
|
|
jipe
|
|
jire
|
|
jiso
|
|
jipi
|
|
jiti
|
|
jito
|
|
joco
|
|
jola
|
|
joli
|
|
jomo
|
|
jone
|
|
jono
|
|
jopa
|
|
jote
|
|
juba
|
|
jucu
|
|
judo
|
|
juge
|
|
juju
|
|
jule
|
|
julo
|
|
juma
|
|
juna
|
|
juri
|
|
juro
|
|
juso
|
|
juto
|
|
jutu
|
|
juva
|
|
juru
|
|
kibi
|
|
komi
|
|
labo
|
|
laca
|
|
lado
|
|
ladu
|
|
lage
|
|
lago
|
|
laje
|
|
lala
|
|
lama
|
|
lami
|
|
lari
|
|
laro
|
|
lasi
|
|
lata
|
|
lazo
|
|
leba
|
|
lebu
|
|
leco
|
|
ledo
|
|
lele
|
|
lelo
|
|
leme
|
|
lero
|
|
lesa
|
|
leto
|
|
leve
|
|
libi
|
|
lica
|
|
lice
|
|
lila
|
|
lili
|
|
limo
|
|
lite
|
|
live
|
|
livo
|
|
lobe
|
|
lide
|
|
lino
|
|
lipe
|
|
lipo
|
|
lipu
|
|
liri
|
|
lobo
|
|
loci
|
|
locu
|
|
lodo
|
|
lofo
|
|
logo
|
|
loja
|
|
lolo
|
|
lona
|
|
lope
|
|
lopo
|
|
loro
|
|
liro
|
|
liru
|
|
lise
|
|
liso
|
|
lulo
|
|
lulu
|
|
lume
|
|
luna
|
|
macu
|
|
made
|
|
madi
|
|
mafe
|
|
mafu
|
|
mago
|
|
maja
|
|
maju
|
|
mali
|
|
malu
|
|
manu
|
|
mapa
|
|
mari
|
|
masa
|
|
mati
|
|
mato
|
|
loso
|
|
lote
|
|
loti
|
|
loxa
|
|
luba
|
|
luco
|
|
ludo
|
|
luge
|
|
meso
|
|
meta
|
|
miba
|
|
mibu
|
|
luni
|
|
lupo
|
|
luso
|
|
luto
|
|
luva
|
|
maba
|
|
mabu
|
|
maco
|
|
matu
|
|
mavo
|
|
maxi
|
|
maza
|
|
mebi
|
|
mico
|
|
mida
|
|
miju
|
|
mile
|
|
mimo
|
|
mina
|
|
mini
|
|
miri
|
|
mili
|
|
meco
|
|
medo
|
|
mitu
|
|
miva
|
|
mizo
|
|
modo
|
|
mogo
|
|
mise
|
|
miso
|
|
mite
|
|
mito
|
|
moho
|
|
moje
|
|
mojo
|
|
mega
|
|
mole
|
|
molo
|
|
mome
|
|
momo
|
|
mono
|
|
mosa
|
|
mote
|
|
moti
|
|
moto
|
|
milo
|
|
milu
|
|
mimi
|
|
meji
|
|
meme
|
|
memi
|
|
meni
|
|
meno
|
|
menu
|
|
mero
|
|
meru
|
|
mopi
|
|
mori
|
|
moru
|
|
mube
|
|
mubi
|
|
mubu
|
|
muco
|
|
mufa
|
|
mugo
|
|
muje
|
|
mulo
|
|
mumo
|
|
mumu
|
|
mupa
|
|
muri
|
|
muru
|
|
musa
|
|
muti
|
|
muto
|
|
muxi
|
|
muxo
|
|
nabi
|
|
nabo
|
|
nagi
|
|
naja
|
|
naji
|
|
nale
|
|
nalu
|
|
nama
|
|
nani
|
|
napa
|
|
nara
|
|
naru
|
|
nase
|
|
nato
|
|
nave
|
|
naxa
|
|
naze
|
|
nazi
|
|
nebo
|
|
neca
|
|
naco
|
|
nacu
|
|
nadi
|
|
nafo
|
|
neda
|
|
nefa
|
|
neja
|
|
nele
|
|
nelo
|
|
neno
|
|
nepa
|
|
nero
|
|
neto
|
|
nexo
|
|
nibu
|
|
nife
|
|
nili
|
|
nilo
|
|
nini
|
|
nipo
|
|
nito
|
|
nive
|
|
niza
|
|
nola
|
|
nome
|
|
nomo
|
|
nono
|
|
nope
|
|
nora
|
|
noxa
|
|
nubo
|
|
nuca
|
|
nuce
|
|
nudo
|
|
nufe
|
|
nuga
|
|
nulo
|
|
nume
|
|
numo
|
|
nune
|
|
nuno
|
|
paba
|
|
paco
|
|
pacu
|
|
pado
|
|
padu
|
|
pafo
|
|
pale
|
|
pama
|
|
pami
|
|
pani
|
|
panu
|
|
papu
|
|
paru
|
|
pate
|
|
pati
|
|
pato
|
|
pavo
|
|
paza
|
|
peba
|
|
pebi
|
|
pedo
|
|
pegu
|
|
peji
|
|
pema
|
|
pemi
|
|
pepe
|
|
pepo
|
|
peri
|
|
pero
|
|
peru
|
|
peva
|
|
pexe
|
|
picu
|
|
pida
|
|
pili
|
|
pima
|
|
pipi
|
|
piri
|
|
piti
|
|
pitu
|
|
piva
|
|
pixa
|
|
piza
|
|
pobe
|
|
pofo
|
|
poga
|
|
polo
|
|
poma
|
|
pomo
|
|
pona
|
|
pone
|
|
pope
|
|
poro
|
|
pote
|
|
poti
|
|
poto
|
|
potu
|
|
povo
|
|
poxa
|
|
puco
|
|
pucu
|
|
pudu
|
|
pufe
|
|
pufo
|
|
punu
|
|
raga
|
|
ragu
|
|
rali
|
|
rami
|
|
rana
|
|
rane
|
|
pupu
|
|
puri
|
|
puro
|
|
puti
|
|
rani
|
|
ranu
|
|
puto
|
|
puva
|
|
puvi
|
|
rabi
|
|
rabo
|
|
raca
|
|
rada
|
|
rafi
|
|
rati
|
|
rave
|
|
ravo
|
|
raxa
|
|
rebu
|
|
rede
|
|
reno
|
|
repa
|
|
reso
|
|
rexe
|
|
reye
|
|
ribu
|
|
rico
|
|
rino
|
|
riso
|
|
rito
|
|
robe
|
|
rofo
|
|
roli
|
|
rone
|
|
rono
|
|
roxo
|
|
rubi
|
|
rubo
|
|
rude
|
|
rudo
|
|
rumi
|
|
runo
|
|
rusa
|
|
sace
|
|
saci
|
|
sade
|
|
sadi
|
|
sado
|
|
sadu
|
|
safu
|
|
sava
|
|
saxe
|
|
sage
|
|
sago
|
|
saxo
|
|
sazo
|
|
sagu
|
|
saju
|
|
sazu
|
|
sebe
|
|
sebo
|
|
sege
|
|
salo
|
|
salu
|
|
samo
|
|
sapu
|
|
sari
|
|
saru
|
|
sate
|
|
sati
|
|
sejo
|
|
sema
|
|
semi
|
|
sene
|
|
seno
|
|
sepo
|
|
sera
|
|
sere
|
|
seri
|
|
sibe
|
|
sico
|
|
sicu
|
|
sida
|
|
sidi
|
|
sile
|
|
silo
|
|
sini
|
|
sipe
|
|
sire
|
|
siri
|
|
siro
|
|
site
|
|
sito
|
|
situ
|
|
siva
|
|
soba
|
|
soja
|
|
sope
|
|
sopo
|
|
sore
|
|
sosa
|
|
sovi
|
|
subu
|
|
sufi
|
|
suna
|
|
sune
|
|
supo
|
|
suri
|
|
suro
|
|
suru
|
|
suso
|
|
tabe
|
|
tabi
|
|
tabu
|
|
taci
|
|
tacu
|
|
tali
|
|
tamo
|
|
tani
|
|
tari
|
|
tate
|
|
tato
|
|
tatu
|
|
tava
|
|
teba
|
|
tebi
|
|
teda
|
|
tefe
|
|
tejo
|
|
teju
|
|
tele
|
|
tene
|
|
teno
|
|
tepe
|
|
tera
|
|
tero
|
|
tibi
|
|
tibu
|
|
ticu
|
|
tife
|
|
tifo
|
|
tiga
|
|
tiju
|
|
time
|
|
timo
|
|
tipe
|
|
tipi
|
|
tipo
|
|
tipu
|
|
titi
|
|
tito
|
|
tiza
|
|
tizi
|
|
toba
|
|
toci
|
|
todo
|
|
tofo
|
|
tofu
|
|
tojo
|
|
tolu
|
|
tori
|
|
toru
|
|
tova
|
|
toxi
|
|
tubi
|
|
tuco
|
|
tucu
|
|
tudo
|
|
tuga
|
|
tuju
|
|
tule
|
|
tulo
|
|
turi
|
|
turu
|
|
tutu
|
|
tuvi
|
|
tuxi
|
|
tuza
|
|
vacu
|
|
vapa
|
|
vapi
|
|
vari
|
|
vaso
|
|
vate
|
|
vatu
|
|
vava
|
|
veba
|
|
veri
|
|
vero
|
|
viba
|
|
vico
|
|
vili
|
|
vina
|
|
vini
|
|
vite
|
|
vitu
|
|
vodo
|
|
vodu
|
|
volo
|
|
vuba
|
|
vudu
|
|
vumo
|
|
xicu
|
|
xifo
|
|
vuvu
|
|
xilo
|
|
xaco
|
|
xale
|
|
xama
|
|
xipo
|
|
xara
|
|
xaru
|
|
xate
|
|
xira
|
|
xiri
|
|
xiru
|
|
xixi
|
|
xero
|
|
xeta
|
|
xexo
|
|
xiba
|
|
xico
|
|
xosa
|
|
xoxo
|
|
xoxu
|
|
xuri
|
|
xuru
|
|
xuxo
|
|
yagi
|
|
yewe
|
|
yobi
|
|
zaco
|
|
zaga
|
|
zagu
|
|
zama
|
|
zana
|
|
zape
|
|
zazo
|
|
zebi
|
|
zebo
|
|
zebu
|
|
zeta
|
|
zimo
|
|
zito
|
|
zoga
|
|
zola
|
|
zoli
|
|
zopo
|
|
zote
|
|
zovo
|
|
zulu
|
|
zura
|
|
``` |