Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

desafio06 concluido por joseildoandrade12 em javascript #1180

Merged
merged 4 commits into from
Jan 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading