Developer Bedoya

Find All Possible Words From Two Syllables

The complete code can be found at my repository.

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:

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.

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.

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