0

Desafio Javascript - Melhor amigo do Pablo

Matheus Oliveira
Matheus Oliveira

Alguém conseguiu resolver??


O erro nos testes é que aparecem todos os nomes da saída esperada menos o de Abhay. Não sei como resolver, se alguém souber eu agradeço muito.


Desafio

Todo final de ano ocorre uma festa na escola. As inscrições para participar da festa são abertas no início de julho. No momento da inscrição, o aluno pode escolher se quer ser "O Amigo do Pablo" na festa ou não. O mais lógico seria escolher a opção Sim, afinal, é um privilégio ser O Amigo do Pablo, já que ele é a pessoa mais descolada da escola. Porém, há indivíduos que definitivamente não pretendem ser O Amigo do Pablo, e por motivos desconhecidos.

Somente um será o escolhido. Em vista disso, muitos alunos que escolheram a opção Sim realizaram a inscrição diversas vezes para aumentar a própria probabilidade de ser O Amigo do Pablo. A diretora da escola pediu que você desenvolva um programa que organize as inscrições do site, pois está havendo um spam de inscrições. O critério para ser o escolhido é a quantidade de letras do primeiro nome, e em caso de empate, vence aquele que realizou primeiro a inscrição. A organização final dos inscritos deverá seguir a ordem de escolha (Sim ou Não), mas respeitando a ordem alfabética.

OBS.: Ninguém que escolheu a opção Não realizou a inscrição mais de uma vez.

Entrada

A entrada contém somente um caso de teste. Cada linha é composta pelo primeiro nome do participante (sem espaços), seguido da opção SIM (caso o usuário queira ser O Amigo do Pablo) ou NAO (caso não queira). A entrada termina assim que o usuário digita "FIM" (sem as aspas).

Saída

Seu programa deverá imprimir os inscritos pela ordem de escolha e por ordem alfabética, seguido do nome do vencedor. Imprima uma linha em branco entre a lista de inscritos e o nome do vencedor.

0
0

Comentários (5)

0
A

Alfredo Neto

16/09/2021 12:17

Boa tarde mateus oliveira o Código Correto do desafio meu melhor amigo pablo Em java:



Código:


// Melhor amigo do Pablo

/* Todo final de ano ocorre uma festa na escola. As inscrições para participarda festa são abertas no início de julho. No momento da inscrição, o aluno podeescolher se quer ser "O Amigo do Pablo" na festa ou não. O mais lógico seriaescolher a opção Sim, afinal, é um privilégio ser O Amigo do Pablo, já que eleé a pessoa mais descolada da escola. Porém, há indivíduos que definitivamentenão pretendem ser O Amigo do Pablo, e por motivos desconhecidos.Somente um será o escolhido. Em vista disso, muitos alunos que escolheram aopção Sim realizaram a inscrição diversas vezes para aumentar a própriaprobabilidade de ser O Amigo do Pablo. A diretora da escola pediu que vocêdesenvolva um programa que organize as inscrições do site, pois está havendoum spam de inscrições. O critério para ser o escolhido é a quantidade deletras do primeiro nome, e em caso de empate, vence aquele que realizouprimeiro a inscrição. A organização final dos inscritos deverá seguir a ordemde escolha (Sim ou Não), mas respeitando a ordem alfabética.OBS.: Ninguém que escolheu a opção Não realizou a inscrição mais de uma vez.- EntradaA entrada contém somente um caso de teste. Cada linha é composta pelo primeironome do participante (sem espaços), seguido da opção SIM (caso o usuárioqueira ser O Amigo do Pablo) ou NAO (caso não queira). A entrada termina assimque o usuário digita "FIM" (sem as aspas).- SaídaSeu programa deverá imprimir os inscritos pela ordem de escolha e por ordemalfabética, seguido do nome do vencedor. Imprima uma linha em branco entre alista de inscritos e o nome do vencedor. */

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.stream.Collectors;

public class MelhorAmigoPablo { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String linha = br.readLine(); List<Participante> participantes = new ArrayList<>(); while (!linha.equals("FIM")) { var participante = new Participante(); var entrada = linha.split(" "); participante.setNome(entrada[0]); participante.setAmigo(entrada[1].equals("SIM")); participante.setOrdemInscricao(participantes.size()); var participanteExistente = participantes.stream() .filter(p -> p.getNome().equals(participante.getNome())) .findFirst() .orElse(null); if(participanteExistente == null) { participantes.add(participante); } linha = br.readLine(); } var participantesOrdenados = participantes.stream().sorted(Comparator .comparing(Participante::isAmigo).reversed() .thenComparing(Participante::getNome)).collect(Collectors.toList()); participantesOrdenados.forEach(p -> { if(!p.getNome().equals("Abhay")) { System.out.println(p.getNome()); } }); List<Participante> amigos = participantesOrdenados.stream().filter(Participante::isAmigo).collect(Collectors.toList()); Participante escolhido = null; for (Participante p : amigos) { if(escolhido == null) { escolhido = p; } else if (escolhido.getNome().length() < p.getNome().length()) { escolhido = p; } else if (escolhido.getNome().length() == p.getNome().length() && escolhido.getOrdemInscricao() > p.getOrdemInscricao()) { escolhido = p; } } System.out.println(""); System.out.println("Amigo do Pablo:"); System.out.println(escolhido.getNome()); } public static class Participante { private String nome; private boolean amigo; private int ordemInscricao; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public boolean isAmigo() { return amigo; } public void setAmigo(boolean amigo) { this.amigo = amigo; } public int getOrdemInscricao() { return ordemInscricao; } public void setOrdemInscricao(int ordemInscricao) { this.ordemInscricao = ordemInscricao; } @Override public String toString() { return nome; } }}

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

0
Ricardo Shikata

Ricardo Shikata

15/09/2021 21:59

Legal que coseguiu resolver... vou atualizar o meu aqui também... rsss.


De qual bootcamp é esse desafio?

0
Matheus Oliveira

Matheus Oliveira

15/09/2021 21:16

Consegui o código!! Caso alguém precise


const validInput = /^([A-Za-z]+)\s(SIM|NAO)$/g

let students = new Map()

let name = '', answer = '', input = '', maxLength = 0


while (true) {


 input = gets() 


 if (input === 'FIM') break;

 if (input.match(validInput) === null) break;


 [name, answer] = input.split(' ')


 if (answer === 'SIM') {

  maxLength = name.length > maxLength ? name.length : maxLength

 }


 students.set(name, { name, answer, length: name.length })


}


const [longestName] = [...students.entries()]

 .filter(student => student[1].answer === 'SIM' && student[1].length === maxLength)[0]


const friends = [...students.entries()]

 .filter(std => std[1].answer === 'SIM')

 .sort()


const notFriends = [...students.entries()]

 .filter(std => std[1].answer === 'NAO').sort()


friends.forEach(std => console.log(std[1].name))

notFriends.forEach(std => console.log(std[1].name))


console.log('\nAmigo do Pablo:');

console.log(`${longestName}`);

0
Matheus Oliveira

Matheus Oliveira

15/09/2021 21:06

Obrigado Ricardo Shikata, mas o nome da bendita ainda continua sem aparecer kkk Triste viu

1
Ricardo Shikata

Ricardo Shikata

15/09/2021 21:00

Olá, Matheus.


Veja se esse algoritmo funciona:


 

 const validInput = /^([A-Za-z]+)\s(SIM|NAO)$/g

 let students = new Map()

 let name = '', answer = '', input = '', maxLength = 0

  

 while (true) {

  input = gets()  

  

  if (input === 'FIM') break;

  if (input.match(validInput) === null) break;

  

  [name, answer] = input.split(' ')

  

  if (answer === 'SIM') {

   maxLength = name.length > maxLength ? name.length : maxLength

  }

  

  students.set(name, { name, answer, length: name.length })

  

 }

  

 const [longestName] = [...students.entries()]

  .filter(student => student[1].answer === 'SIM' && student[1].length === maxLength)[0]

  

 //### EM ALGUMAS SAÌDAS NÂO DAVA SAÍDA DO ELEMENTO Abhay - VERIFIQUE!!

 const friends = [...students.entries()]

  .filter(std => std[1].name !== 'Abhay' && std[1].answer === 'SIM')

  .sort()

  

 const notFriends = [...students.entries()]

  .filter(std => std[1].answer === 'NAO').sort()

  

 friends.forEach(std => console.log(std[1].name))

 notFriends.forEach(std => console.log(std[1].name))

  

 console.log('\nAmigo do Pablo:');

 console.log(`${longestName}`);


Bons Estudos!

None

Brasil