--- 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 _palavras; public IEnumerable Palavras { get => _palavras; } private PermutacaoSilabas(IEnumerable palavras) { _palavras = palavras; } public static PermutacaoSilabas Cria(IEnumerable listaVogais, IEnumerable listaConsonantes) { var combinacoesSilabicas = new List(); var combinacoesPalavras = new List(); 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 _palavras; public IEnumerable Palavras { get => _palavras; } private DicionarioWeb(IEnumerable palavras) { _palavras = palavras; } public static async Task 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 ```