Desafio - Conjuntos bons ou ruins? - 5-7 - Solução de Problemas com JavaScript

 

//### Desafio - Conjuntos bons ou ruins?
Nesse algoritmo você deverá descobrir se um conjunto de palavras é bom ou ruim. Por definição, um conjunto é bom quando nenhuma palavra
desse conjunto é um prefixo de outra palavra. Caso contrário, é considerado um conjunto ruim.
Por exemplo, {dbc, dae, dbcde} é um conjunto ruim, pois dbc é um prefixo de dbcde. Quando duas palavras são idênticas, definimos como uma
sendo prefixo da outra.

//### Entrada
A entrada contém vários casos de teste. A primeira linha de cada caso de teste terá um inteiro N (1 ≤ N ≤ 10⁵), que representa a quantidade
de palavras no conjunto. Segue então N linhas, cada uma tendo uma palavra de no máximo 100 letras minúsculas. A entrada termina quando
N = 0 e não deve ser processada.

//### Saída
Para cada caso de teste, você deverá imprimir "Conjunto Bom", ou "Conjunto Ruim", conforme explicado acima.

|---------------------------------------|
| Exemplo de Entrada | Exemplo de Saída |
|--------------------|------------------|
| 3 | Conjunto Ruim |
| abc | |
| dae | |
| abcde | |
|--------------------|------------------|
| 2 | Conjunto Bom |
| abc | |
| def | |
| 0 | |
|---------------------------------------|

*/

//Código do desafio:
const inputs = [
'3',
'abc',
'dae',
'abcde',
'2',
'abc',
'def',
'3',
'dbc',
'dae',
'dbcde',
'3',
'abcd',
'def',
'abcd',
'0'
]
let i = 0; //para uso local

let N;
const limit = Math.pow(10, 5);
let words, isBad;

while (true) {
words = []
// N = parseInt(gets()) //para uso na DIO
N = parseInt(inputs[i]) //para uso local

if (N === 0 || (N < 1 || N > limit)) break;

for (let index = 0; index < N; index++) {
// word = gets() //para uso na DIO
word = inputs[++i] //para uso local

if (!(/^[a-z]{1,100}$/g.test(word))) continue; //skip invalid word

words = [...words, word]
}

isBad = words.some((currentWord, i, words) => {
const pattern = new RegExp(`^(${currentWord}).+`)

for (const word of words) {
if (pattern.test(word)) return true
}

const same = words.reduce((total, w) => {
total += w === currentWord ? 1 : 0
return total
}, 0)

return same > 1;
})

console.log(isBad ? 'Conjunto Ruim' : 'Conjunto Bom');
i++ //para uso local
}
/*

faço trabalhos avulsos de programação em php , javascript , html , VBA-EXCEL e EXCEL formulas avançadas . pode entrar em contato no whatsapp 83988596239. nós combinaremos os valores de acordo com a demanda.

Nenhum comentário:

Postar um comentário

Programando com JS 2 / 5 - Resto 2

  Desafio Leia um valor inteiro N . Apresente todos os números entre 1 e 10000 que divididos por N dão resto igual a 2. Entrada A ...