Skip to content

Commit

Permalink
desafio06 concluido por joseildoandrade12 em javascript (#1180)
Browse files Browse the repository at this point in the history
* desafio06 concluido por joseildoandrade12

* correção eslint

* correção filter

* correção de virgula
  • Loading branch information
joseildoandrade12 authored Jan 27, 2025
1 parent 0c883a9 commit f356e8a
Show file tree
Hide file tree
Showing 3 changed files with 24,991 additions and 0 deletions.
33 changes: 33 additions & 0 deletions desafio-06/joseildoandrade12/javascript/README.md
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:
```
105 changes: 105 additions & 0 deletions desafio-06/joseildoandrade12/javascript/main.js
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;
};
Loading

0 comments on commit f356e8a

Please sign in to comment.