Bazinga! Não, não estou falando da série de TV e do Sheldon, mas de um problema de programação que leva este nome. Brincadeiras à parte, confira nesse post a solução para este problema!
Plataforma: URI (BEECROWD)
Problema: 1828
Enunciado:
No oitavo episodio da segunda temporada do seriado The Big Bang Theory, The Lizard-Spock Expansion, Sheldon e Raj discutem qual dos dois é o melhor: o filme Saturn 3 ou a série Deep Space 9. A sugestão de Raj para a resolução do impasse é uma disputa de Pedra-Papel-Tesoura. Contudo, Sheldon argumenta que, se as partes envolvidas se conhecem, entre 75% e 80% das disputas de Pedra-Papel-Tesoura terminam empatadas, e então sugere o Pedra-Papel-Tesoura-Lagarto-Spock.
As regras do jogo proposto são:
a tesoura corta o papel;
o papel embrulha a pedra;
a pedra esmaga o lagarto;
o lagarto envenena Spock;
Spock destrói a tesoura;
a tesoura decapita o lagarto;
o lagarto come o papel;
o papel contesta Spock;
Spock vaporiza a pedra;
a pedra quebra a tesoura.
Embora a situação não se resolva no episódio (ambos escolhem Spock, resultando em um empate), não é difıcil deduzir o que aconteceria se a disputa continuasse. Caso Sheldon vencesse, ele se deleitaria com a vitória, exclamando "Bazinga!"; caso Raj vencesse, ele concluiria que "Raj trapaceou!"; caso o resultado fosse empate, ele exigiria nova partida: "De novo!". Conhecidas as personagens do jogo escolhido por ambos, faça um programa que imprima a provável reação de Sheldon.
Linguagens: C e C++
Solução:
Código em C:
Bastava testar todas as condições para a vitória de cada um ou empate. Mapeei as possibilidades com valores entre 0 e 2, inclusive, colocando isso numa variável chamada resultado. Com base no valor desta variável, então a respectiva resposta é exibida. Você pode estar estranhando a comparação que fiz utilizando, por exemplo, raj[0]. Isso foi feito para não precisar testar a string inteira, assumindo que as entradas seguem o padrão esperado. Na vida real, o ideal seria comparar as strings completas, ok?
#include <stdio.h> int main() { int testes, contador = 1, resultado; char *sheldon = (char *) malloc(sizeof(char) * 7), *raj = (char *) malloc(sizeof(char) * 7); scanf("%i ", &testes); while (contador <= testes) { scanf("%s %s", sheldon, raj); resultado = 0; if (sheldon[0] == raj[0]) { if (raj[0] != 'p' || (sheldon[1] == raj[1] && raj[0] == 'p')) resultado = 1; if (sheldon[0] == 'p' && sheldon[1] == 'e' && raj[0] == 'p' && raj[1] == 'a') resultado = 2; } else { if (sheldon[0] == 't' && (raj[0] == 'S' || (raj[0] == 'p' && raj[1] == 'e'))) resultado = 2; else if (sheldon[0] == 'S' && (raj[0] == 'l' || (raj[0] == 'p' && raj[1] == 'a'))) resultado = 2; else if (sheldon[0] == 'l' && (raj[0] == 't' || (raj[0] == 'p' && raj[1] == 'e'))) resultado = 2; else if (sheldon[0] == 'p' && sheldon[1] == 'e' && (raj[0] == 'S')) resultado = 2; else if (sheldon[0] == 'p' && sheldon[1] == 'a' && (raj[0] == 't' || raj[0] == 'l')) resultado = 2; } if (resultado < 1) printf("Caso #%i: Bazinga!\n", contador); else if (resultado > 1) printf("Caso #%i: Raj trapaceou!\n", contador); else printf("Caso #%i: De novo!\n", contador); contador++; } return 0; }
#include <iostream> using namespace std; int main() { int testes, contador = 1, resultado; string sheldon, raj; cin >> testes; while (contador <= testes) { cin >> sheldon >> raj; resultado = 0; if (sheldon[0] == raj[0]) { if (raj[0] != 'p' || (sheldon[1] == raj[1] && raj[0] == 'p')) resultado = 1; if (sheldon[0] == 'p' && sheldon[1] == 'e' && raj[0] == 'p' && raj[1] == 'a') resultado = 2; } else { if (sheldon[0] == 't' && (raj[0] == 'S' || (raj[0] == 'p' && raj[1] == 'e'))) resultado = 2; else if (sheldon[0] == 'S' && (raj[0] == 'l' || (raj[0] == 'p' && raj[1] == 'a'))) resultado = 2; else if (sheldon[0] == 'l' && (raj[0] == 't' || (raj[0] == 'p' && raj[1] == 'e'))) resultado = 2; else if (sheldon[0] == 'p' && sheldon[1] == 'e' && (raj[0] == 'S')) resultado = 2; else if (sheldon[0] == 'p' && sheldon[1] == 'a' && (raj[0] == 't' || raj[0] == 'l')) resultado = 2; } if (resultado < 1) cout << "Caso #" << contador << ": Bazinga!" << endl; else if (resultado > 1) cout << "Caso #" << contador << ": Raj trapaceou!" << endl; else cout << "Caso #" << contador << ": De novo!" << endl; contador++; } return 0; }