Oi, Rodrigo! Muito bacana esse exercício!
Antes de tudo, vamos entendê-lo. Em resumo, o exercício nos pede um programa que, dada algumas informações sobre n pessoas, imprima um relatório único (com o formato especificado pelo exercício) para cada pessoa indicando seu status/título/papel (se é vítima inocente, assassino, ou detetive) e informações como se está morta, quantas pessoas (e que tipo de pessoas) matou (se foi assassino(a)) e quantos casos resolveu (se foi detetive).
Como entrada, recebemos um número inteiro indicando a quantidade de casos que há e, para cada caso, uma linha com três nomes, sendo eles, respectivamente, o assassino do caso, a vítima do caso e o detetive que solucionou o caso.
A ideia pode parecer um pouco confusa, mas é bem simples de entender com um exemplo plano - quando temos um caso só. Por exemplo:
Entrada:
Temos um caso apenas, e três nomes nesse caso
1
Francisco Gilberto Karen
Francisco é um assassino e matou uma só pessoa, que era inocente (Gilberto). Gilberto era uma vítima inocente. Karen era a detetive que solucionou o caso. Assim, temos o seguinte resultado:
Saída:
------------------------------------------------------------
Francisco: assassino(a).
Matou 1 inocente(s).
------------------------------------------------------------
Gilberto (in memoriam): vítima inocente.
------------------------------------------------------------
Karen: detetive.
Resolveu 1 caso(s).
------------------------------------------------------------
Até aí tudo bem! O problema maior começa quando temos mais casos, porque podemos ter um assassino em um caso que é também uma vítima em outro! Nesse caso, ele deve ser identificado como assassino, mas sua morte deve ser indicada também com o complemento (in memoriam)
.
Também podemos ter uma pessoa que é detetive em um caso, assassina em outro e ainda morre em um terceiro! Nesse caso, essa pessoa deve ser identificada como detetive, mas sua morte e seus assassinatos devem ser identificados.
Com isso em mente, tenho algumas dicas extras:
- Tenha uma lista para todos os detetives de todos os casos e outra para todas as vítimas de todos os casos;
- Use um dicionário para identificar o tipo de cada pessoa assassinada;
- Use o tipo
set
para iterar por cada pessoa uma única vez
Vou mandar o link de uma solução que eu fiz no GitHub, mas acho legal que você tente resolver mais um pouco (pensando nas dicas que o próprio exercício passa e nas que passei nesse post) antes de vê-la :D!
Minha solução: GitHub
Algumas observações sobre essa solução:
O bloco de código do último loop for
poderia ficar dentro do bloco do for
anterior, o que pouparia escrita, processamento (apesar de que processamento não é uma preocupação, considerando o limite de 100 casos) e talvez até um dicionário hahahah. Deixei separado porque achei que talvez ficasse mais simples de entender cada parte (espero que fique!). Tentei deixar o mais claro possível, mas tenho consciência de que nem sempre fica :( (cabe aqui um espaço para qualquer um dar sugestões para melhorar o código/sugerir um outro código! :D), então qualquer dúvida que se mantiver, pode falar!
Abraços e bons estudos!