-
Notifications
You must be signed in to change notification settings - Fork 265
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
desafio06 concluido por joseildoandrade12 em javascript (#1180)
* desafio06 concluido por joseildoandrade12 * correção eslint * correção filter * correção de virgula
- Loading branch information
1 parent
0c883a9
commit f356e8a
Showing
3 changed files
with
24,991 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
## Desafio 06: Anagramas | ||
|
||
Anagrama é uma palavra ou frase formada a partir da reorganização das letras de outra palavra ou frase, sem a omissão ou adição de nenhuma letra. | ||
|
||
## Teste e execução | ||
|
||
Para testar a solução, é necessário ter o [Node.js](https://nodejs.org/) com a versão mais recente instalada em sua máquina. | ||
|
||
É necessário ter o GIT em sua máquina [GIT](https://git-scm.com/downloads) com a versão mais recente. | ||
|
||
Entre no Git e faça um clone do repositório para a sua máquina: | ||
|
||
```bash | ||
$ git clone https://github.com/joseildoandrade12/op-desafios.git | ||
``` | ||
|
||
Após ter clonado, abra o terminal e digite o código para acessar a pasta que contém o arquivo : | ||
|
||
```bash | ||
cd desafio-06/joseildoandrade12/javascript | ||
``` | ||
|
||
Depois disso, ainda no terminal digite o seguinte para inicializar o código: | ||
|
||
```bash | ||
node main.js | ||
``` | ||
|
||
Quando você inicializar o código, vai aparecer a seguinte mensagem: | ||
|
||
```bash | ||
Informe a palavra: | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
const arrayWords = []; | ||
const fs = require("node:fs"); | ||
fs.readFile("./words.txt", "utf8", repostaWord); | ||
|
||
function repostaWord(err, data) { | ||
if (err) { | ||
console.log(err); | ||
} | ||
arrayWords.push(...separarTexto(data)); | ||
return data; | ||
} | ||
|
||
function separarTexto(texto) { | ||
return texto.split(/\n/).map((word) => word.trim()); | ||
} | ||
|
||
const { createInterface } = require("node:readline"); | ||
const rl = createInterface({ | ||
input: process.stdin, | ||
output: process.stdout | ||
}); | ||
|
||
function questionUsuario() { | ||
rl.question("Digite uma palavra: ", (palavra) => { | ||
if (validarPalavra(palavra)) { | ||
const palavraResetada = resetarPalavra(palavra); | ||
const arrayValoresComparados = compararValores(palavraResetada, arrayWords); | ||
const valoresCorretosWord = arrayValoresComparados.filter((item) => { | ||
return verificarRepeticaoLetras(item, palavraResetada) === 0; | ||
}); | ||
const combinacoesPalavras = fazerCombinacoes(valoresCorretosWord, palavraResetada); | ||
const valoresCorretos = combinacoesPalavras.filter((item) => { | ||
const itemResetado = item.split(" ").join(""); | ||
return verificarRepeticaoLetras(itemResetado, palavraResetada) === 0; | ||
}); | ||
for (const palavra of valoresCorretos) { | ||
console.log(palavra); | ||
} | ||
rl.close(); | ||
} else { | ||
questionUsuario(); | ||
} | ||
}); | ||
} | ||
questionUsuario(); | ||
|
||
const validarPalavra = (palavra) => { | ||
const palavraResetada = palavra.split(" ").join(""); | ||
const validarCaracteres = /^[A-Za-z]+$/gi.test(palavraResetada); | ||
if (validarCaracteres) { | ||
return true; | ||
} else { | ||
console.log("Digite apenas palavras(sem acentos e sem pontuações)"); | ||
return false; | ||
} | ||
}; | ||
|
||
const resetarPalavra = (palavra) => { | ||
return palavra.toUpperCase().replace(" ", ""); | ||
}; | ||
|
||
const compararValores = (palavra, listaWords) => { | ||
const regex = new RegExp(`^[${palavra}]+$`, "g"); | ||
const palavrasComparadas = listaWords.filter((itemWords) => { | ||
return itemWords.length <= palavra.length && regex.test(itemWords); | ||
}); | ||
return palavrasComparadas; | ||
}; | ||
|
||
const verificarRepeticaoLetras = (palavraWords, palavraUser) => { | ||
const arrayPalavra = palavraUser.split(""); | ||
const arrayPalavraWords = palavraWords.split(""); | ||
arrayPalavra.forEach((letra) => { | ||
const index = arrayPalavraWords.indexOf(letra); | ||
if (index > -1) { | ||
arrayPalavraWords.splice(index, 1); | ||
} | ||
}); | ||
return arrayPalavraWords.length; | ||
}; | ||
|
||
const fazerCombinacoes = (array, palavraUser) => { | ||
const resultados = []; | ||
|
||
const combinar = (palavra, arrayPalavra) => { | ||
const palavraResetada = palavra.split(" ").join(""); | ||
if (palavraResetada.length === palavraUser.length) { | ||
resultados.push(palavra); | ||
} else if (palavraResetada.length < palavraUser.length) { | ||
for (let i = 0; i < arrayPalavra.length; i++) { | ||
combinar(palavra + " " + arrayPalavra[i], arrayPalavra); | ||
} | ||
} | ||
}; | ||
|
||
for (let i = 0; i < array.length; i++) { | ||
const palavra = array[i]; | ||
if (palavra.length === palavraUser.length) { | ||
resultados.push(palavra); | ||
} else if (palavra.length < palavraUser.length) { | ||
combinar(palavra, array); | ||
} | ||
} | ||
return resultados; | ||
}; |
Oops, something went wrong.