0

Dúvida Regex Javascript desafio

#JavaScript
Gabriel Santos
Gabriel Santos

Olá, pessoal! Fiquei com uma dúvida no desafio das vogais extraterrestres. Fiz dois códigos. Um passou em todos os testes e outro apenas nos abertos e em um fechado, mas o funcionamento deles me parece exatamente igual. Por que houve diferença?


Desafio

Desde o Gerador de Improbabilidade Infinita, muitos nem questionam sobre vidas extraterrestres, e se aprofundam em questionamentos mais improváveis, como, por exemplo, será que seres de outros planetas usam os mesmos caracteres que nós para se comunicarem? E se isso for verdade, será que usam as mesmas letras vogais que a gente? Pensando nisso, vários cientistas criaram inúmeros tipos de alfabetos alienígenas, usando as letras do nosso alfabeto, além dos dígitos, de 0 a 9, com as suas respectivas vogais. Baseados nisto, eles querem a sua ajuda para identificar vogais em alfabetos alienígenas e realizar a contagem.

Escreva um programa que, dado uma sequência de vogais, em um determinado alfabeto alienígena, contabilize, em um texto escrito com o mesmo alfabeto, quantas vogais o mesmo possui.


Entrada

Haverá diversos casos de teste. Cada caso de teste é formado por duas linhas. A primeira linha informa uma palavra, formada por todas as vogais alienígenas de um determinado planeta. A segunda linha contém uma frase formada por letras do mesmo alfabeto. A entrada termina com fim de arquivo.


Saída

Para cada caso de teste, imprima a quantidade de vogais alienígenas correspondente.


Código que não passou

while (true) {
  let vogais = gets()
  if (!vogais) break;
 
  let phrase = gets()
  let regex = new RegExp(`[${vogais}]`, 'g')
  let match = phrase.match(regex)

  console.log(match? match.length : 0)
}


Código que passou

while (true) {
 let vogais = gets()
 if (!vogais) break;

 let phrase = gets()

 let counter = 0

 for(let letter of vogais.split('')){
   match = phrase.match(new RegExp(`${letter}`, 'g'))
   counter += match? match.length: 0
  }

 console.log(counter)
}


No primeiro, eu busquei todas as letras com uma Regex de uma vez só. No segundo, busquei uma por uma e fui adicionando quantas delas tinham na palavra ao contador.

7
71

Comentários (21)

0
Gabriel Santos

Gabriel Santos

19/08/2021 17:06

Verdade, Josélio, não vi nenhum curso de Regex por aqui, e é bem interessante pelo menos ter uma noção pra gnt não travar quando vê uma shauhsua


Devemos mesmo, Carlos, ele tirou a gnt de um while loop infinito kkkkkkk


Valeu pessoal, bons estudos pro6!

0
Josélio Júnior

Josélio Júnior

19/08/2021 16:14

Valeu galera!!! ✌🏼🚀

1
CARLOS SILVA

CARLOS SILVA

19/08/2021 15:47

Perfeito Josélio, parabéns!

E obrigado por nos tirar desse sufoco! rsrs


Aê Gabriel, devemos um café para o Josélio.


Problema solucionado... Show!!!!

0
Josélio Júnior

Josélio Júnior

19/08/2021 15:29

Seria legal uma aula de Regular Expression mesmo!

Regular expression (Regex) é uma linguagem à parte, pode ter sintaxe diferente dependendo da linguagem. Por exemplo JavaScript, Java e Kotlin tem a mesma sintaxe de Regex, Lua por outro lado já tem algumas diferenças.

É um conteúdo mega interessante e facilita nossa vida como desenvolvedores, vale muito a pena estudar!

Isso mesmo, fim de arquivo é para quebrar o laço while.

Ótimos estudos!!!

0
Gabriel Santos

Gabriel Santos

19/08/2021 15:26

Agradeço a atenção e a ajuda de vcs, pessoal!! :)

1
Gabriel Santos

Gabriel Santos

19/08/2021 15:25

Olá, Josélio! Testei o código da forma como vc falou e deu certo, e o código ainda fica mais limpo


Valeu!

0
Gabriel Santos

Gabriel Santos

19/08/2021 15:10

Entendi! Vou tentar com essa hipótese de alternativa. Sobre o conteúdo de Regex, não sei se é parte desse curso... pulei algumas aulas para fazer esse exercício. Porém, nenhum dos títulos das aulas indica que essa matéria é abordada. Usei mais pela praticidade mesmo e caí nesse paradoxo kkkjkkk.


Eu testei essa expressão lá no Regex101 e ela tem o comportamento esperado, que é se limitar a procurar qualquer uma das letras do vogais na phrase para depois eu só pegar a length da lista e descobrir a quantidade de valores com isso =/


Sobre a parte de terminar com o fim do arquivo, acho que isso só serve para quebrar o loop de recebimento de entradas.

0
Josélio Júnior

Josélio Júnior

19/08/2021 15:02

Oi pessoal, uma maneira de resolver é usando o .replace( ) e a seguinte expressão regular:

const regex = new RegExp(`[^${vowels}]`, 'g'); // Qualquer caractere exceto as vogais.

Daí usando o replace:

phrase.replace(regex, '');


Com isso o ele vai substituir todo caractere que não seja as vogais de teste por "" deixando só as vogais de teste no texto, logo mudando o tamanho da string.

Espero que ajude!

0
CARLOS SILVA

CARLOS SILVA

19/08/2021 14:26

Eu estava buscando entender se o resultado da função estava trazendo alguma coisa e na verdade está trazendo o valor correto com a quantidade de ocorrências, pelo menos indica que o código está funcionado. E você fez o código certo!

Mas deu um nó na mente agora, vendo o enunciado veja essa parte:

"Pensando nisso, vários cientistas criaram inúmeros tipos de alfabetos alienígenas, usando as letras do nosso alfabeto, além dos dígitos, de 0 a 9, com as suas respectivas vogais. Baseados nisto, eles querem a sua ajuda para identificar vogais em alfabetos alienígenas e realizar a contagem."

Talvez seja para montar um Regex que siga algum padrão, por exemplo; onde fala (de 0 a 9) pode ser representado por uma Regex assim [0-9] e nesse aqui (com as suas respectivas vogais) poderia ser representado por algo assim [aeiouzx] talvez eles queiram uma regex nesse formato, no fim teríamos uma regex mais ou menos assim [0-9] | [aeiouzx]. Vou fazer lá no site e se passar eu te passo o código e você testa.

Nas aulas aulas anteriores falou alguma coisa sobre caracteres de final de linha $, começo de linha ^, o grupos ( ), listas [ ] u algo assim? É possível que eles estejam querendo esse tipo de regex que envolva conceitos aprendidos de aulas anteriores.


Outro ponto:

Veja no enunciado na parte de entrada: A entrada termina com fim de arquivo. Será que isso não indicar que não devemos colocar um $ "fim de string" ou algum Regex que indique o final da linha/arquivo. Pode ser uma possibilidade

1
A

Alfredo Neto

19/08/2021 13:19

Boa tarde Gabriel Santos O Código Correto Do Desafio Vogais extraterrestres em java:


Código:


// Vogais Extraterrestres

/* Desde o Gerador de Improbabilidade Infinita, muitos nem questionam sobrevidas extraterrestres, e se aprofundam em questionamentos mais improváveis,como, por exemplo, será que seres de outros planetas usam os mesmos caracteresque nós para se comunicarem? E se isso for verdade, será que usam as mesmasletras vogais que a gente? Pensando nisso, vários cientistas criaram inúmerostipos de alfabetos alienígenas, usando as letras do nosso alfabeto, além dosdígitos, de 0 a 9, com as suas respectivas vogais. Baseados nisto, elesquerem a sua ajuda para identificar vogais em alfabetos alienígenas e realizara contagem.Escreva um programa que, dado uma sequência de vogais, em um determinadoalfabeto alienígena, contabilize, em um texto escrito com o mesmo alfabeto,quantas vogais o mesmo possui.- EntradaHaverá diversos casos de teste. Cada caso de teste é formado por duas linhas.A primeira linha informa uma palavra, formada por todas as vogais alienígenasde um determinado planeta. A segunda linha contém uma frase formada por letrasdo mesmo alfabeto. A entrada termina com fim de arquivo.- SaídaPara cada caso de teste, imprima a quantidade de vogais alienígenascorrespondente. */

import java.util.Scanner;

public class VogaisExtraterrestres { public static void main(String[] args) { Scanner scr = new Scanner(System.in); String alfabeto; String frase; int quantidade = 0; while (scr.hasNextLine()) { quantidade = 0; alfabeto = scr.nextLine(); frase = scr.nextLine(); for (int i = 0; i < alfabeto.length() ; i++) { for (int j = 0; j < frase.length(); j++) { if (frase.charAt(j) == alfabeto.charAt(i)) { quantidade++; } } } System.out.println(quantidade); } }}

JEsus te abençoe com amor, paz e saúde grande abraço Sucesso DEV

Entusiasta migrando para a área de tecnologia :)

Brasil