-
Notifications
You must be signed in to change notification settings - Fork 127
/
pedra-papel-tesoura-lagarto-e-spock.js
108 lines (88 loc) · 3.06 KB
/
pedra-papel-tesoura-lagarto-e-spock.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Pedra, Papel, Tesoura, Lagarto e Spock
/* Pedra-papel-tesoura-lagarto-Spock é uma expansão do clássico método de
seleção em jogo de pedra-papel-tesoura. Atua sob o mesmo princípio básico,
mas inclui outras duas armas adicionais: o lagarto (formado pela mão igual a
uma boca de fantoche) e Spock (formada pela saudação dos vulcanos em Star
Trek). Isso reduz as chances de uma rodada terminar em um empate. O jogo
foi inventado por Sam Kass e Karen Bryla, como "Rock Paper Scissors Lizard
Spock". As regras de vantagem são as seguintes:
• Tesoura corta papel
• Papel cobre pedra
• Pedra derruba lagarto
• Lagarto adormece Spock
• Spock derrete tesoura
• Tesoura prende lagarto
• Lagarto come papel
• Papel refuta Spock
• Spock vaporiza pedra
• Pedra quebra tesoura
Um dia, duas amigas, Fernanda e Marcia, decidiram apostar quem pagaria um
almoço para o outro, com esta brincadeira. Sua missão será fazer um algoritmo
que, baseado no que eles escolherem, informe quem irá ganhar ou se dará empate.
- Entrada
Haverá diversos casos de teste. O primeiro número a ser lido será um inteiro,
representando a quantidade de casos de teste. Cada caso de teste tem duas
palavras, representando a escolha de Fernanda e de Marcia, respectivamente.
- Saída
Para cada caso de teste, imprima quem venceu, ou se houve empate. */
class Weapon {
static tesoura = ['papel', 'lagarto']
static papel = ['pedra', 'spock']
static pedra = ['lagarto', 'tesoura']
static lagarto = ['papel', 'spock']
static spock = ['tesoura', 'pedra']
static fight(oneWeapon, anotherWeapon) {
if (!Weapon[oneWeapon] || !Weapon[anotherWeapon]) {
return 'Bring valid weapons to the fight!'
}
if (oneWeapon === anotherWeapon) {
return 'empate'
}
if (Weapon[oneWeapon].includes(anotherWeapon)) {
return oneWeapon
}
return anotherWeapon
}
}
class Player {
constructor(name) {
this._name = name
this._weapons = []
}
get name() {
return this._name
}
get weapons() {
return this._weapons
}
set weapons(weapon) {
this._weapons = [...this._weapons, weapon]
}
against(anotherPlayer) {
const results = []
for (let i = 0; i < this.weapons.length; i++) {
const result = Weapon.fight(this.weapons[i], anotherPlayer.weapons[i])
if (result === 'invalid weapons') results.push(result);
else if (result === 'empate') results.push(result)
else {
results.push(
result === this.weapons[i]
? this.name
: anotherPlayer.name
)
}
}
return results
}
}
let nCases = '';
const Fernanda = new Player('fernanda')
const Marcia = new Player('marcia')
while (true) {
nCases = gets()
if (!nCases || nCases === '' || nCases <= 0) break;
for (let i = 1; i <= nCases; i++) {
[Fernanda.weapons, Marcia.weapons] = gets().split(' ')
}
Fernanda.against(Marcia).forEach(res => console.log(res))
}