-
Notifications
You must be signed in to change notification settings - Fork 1
/
Descubra-o-assassino.py
237 lines (179 loc) · 6.21 KB
/
Descubra-o-assassino.py
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
"""
DATA: 28/06/2023 / 05/07/2023
FONTE: https://dojopuzzles.com/problems/descubra-o-assassino/
O empresário Luiz Carlos foi assassinado e o corpo dele foi deixado na frente da delegacia de polícia. O detetive Frederico Fávaro foi escolhido para investigar este caso. Após uma série de investigações, ele organizou uma lista com prováveis assassinos, os locais do crime e quais armas poderiam ter sido utilizadas.
Suspeitos:
- Gregorio
- MC Onrado
- Evertinho I.A.
- joão moreno.
- Lucas Paim
- Dêvid Teófilo
- Luiz Carlos
Locais:
- Sorocaba/SP
- Rio de Janeiro/RJ
- Mogi das Cruzes/SP
- Recife/PE
- Restaurante no Fim do Universo
- São João do Sul
- Olho D'água/PB
- Teresópolis/RJ
- Ilha de Java
- Avaré/SP
Armas:
- Espada justiceira.
- Estilingue
- Shuriken do Naruto
- Besta
- Bazuca
- Katana
Uma testemunha foi encontrada, mas ela só consegue responder se Fred fornecer uma teoria. Para cada teoria ele "chuta" um assassino, um local e uma arma. A testemunha então responde com um número. Se a teoria estiver correta (assassino, local e arma corretos), ela responde 0. Se a teoria está errada, um valor 1,2 ou 3 é retornado.
1 indica que o assassino está incorreto;
2 indica que o local está incorreto;
3 indica que a arma está incorreta.
Se mais de uma suposição está incorreta, ela retorna um valor arbitrário entre as que estão incorretos (isso é totalmente aleatório).
Por exemplo, se o assassino for MC Onrado usando a Shuriken do Naruto
em Recife/PE:
Teoria: 1, 1, 1
Retorno: 1, ou 2, ou 3 (todos estão incorretos)
Teoria: 3, 1, 3
Retorno: 1, ou 3 (somente o local está correto)
Teoria: 5, 3, 4
Retorno: 1 (somente o assassino está incorreto)
Teoria: 2, 3, 4
Retorno: 0 (todos corretos, você solucionou o caso)
Você precisa desenvolver um programa que tente resolver o problema. Inicialmente não se preocupe no número de tentativas necessário para encontrar a solução. Depois tente melhorar a maneira com que as teorias são testadas para que Fred encontre a solução do problema no menor número de tentativas.
ENUNCIADO: Descubra o assassino
Participantes:
- João Moreno
- Greg
- Lucas
- M Conrado
- Everton
- Dêvid
TO-DO: 05/07/23
#1 Retornar os números do checa_palpite para dar a dica para o jogador se está tudo correto ou algo errado
#2 Tornar jogavel via input para o jogador humano
"""
import pytest
from functools import partial
from random import choice
assassinos = [
'Gregorio', 'MC Onrado', 'Evertinho I.A.', 'João moreno', 'Lucas Paim',
'Dêvid Teófilo', 'Arnaldinho'
]
locais = [
'Sorocaba/SP', 'Rio de Janeiro/RJ', 'Mogi das Cruzes/SP', 'Recife/PE',
'Restaurante no Fim do Universo', 'São João do Sul', 'Olho D\'água/PB',
'Teresópolis/RJ', 'Ilha de Java', 'Avaré/SP'
]
armas = [
'Espada justiceira', 'Estilingue', 'Shuriken do Naruto', 'Besta', 'Bazuca',
'Katana'
]
# def comparacao(posicao, indice_fato):
# return fato[indice_fato] == posicao
#def acha_assasino(posicao_assassino):
#return comparacao(posicao_assassino, 0)
#def acha_local(posicao_local):
#return comparacao(posicao_local, 1)
#def acha_arma(posicao_arma):
#return comparacao(posicao_arma, 2)
assassino = 5
local = 3
arma = 2
fato = [assassino, local, arma]
comparacao = lambda indice_fato, posicao, fato_: fato_[indice_fato] == posicao
acha_assasino = partial(comparacao, 0)
acha_local = partial(comparacao, 1)
acha_arma = partial(comparacao, 2)
def checa_palpite(palpite):
lista_incorretos = []
if not acha_assasino(palpite[0], fato):
lista_incorretos.append(1)
if not acha_local(palpite[1], fato):
lista_incorretos.append(2)
if not acha_arma(palpite[2], fato):
lista_incorretos.append(3)
if len(lista_incorretos) == 0:
lista_incorretos.append(0)
return choice(lista_incorretos)
def contar_atributos_fato(fatos):
return len(fatos)
def test_acha_assasino():
assert acha_assasino(1, fato) == False
assert acha_assasino(2, fato) == False
assert acha_assasino(3, fato) == False
assert acha_assasino(5, fato) == True
def test_acha_local():
assert acha_local(1, fato) == False
assert acha_local(2, fato) == False
assert acha_local(4, fato) == False
assert acha_local(3, fato) == True
def test_acha_arma():
assert acha_arma(1, fato) == False
assert acha_arma(2, fato) == True
assert acha_arma(4, fato) == False
assert acha_arma(3, fato) == False
def test_checa_palpite():
assert checa_palpite([5, 3, 2]) == 0
assert checa_palpite([2, 2, 1]) in [1, 2, 3]
assert checa_palpite([5, 2, 1]) in [2, 3]
assert checa_palpite([5, 3, 4]) in [3]
'''
assassino = 5
local = 3
arma = 2
fato = [assassino, local, arma]
fato[1] == 'MC Orando' in Assassino
'''
def gerador_de_fatos():
return [choice(assassinos), choice(locais), choice(armas)]
def mostra_index_dos_fatos(aux):
return [
assassinos.index(aux[0]),
locais.index(aux[1]),
armas.index(aux[2])
]
def test_gerador_de_fatos():
assert contar_atributos_fato(fato) == 3
assert type(gerador_de_fatos()) is list
assert isinstance(gerador_de_fatos(), list) == True
fatos = gerador_de_fatos()
indices_fatos = mostra_index_dos_fatos(fatos)
#print(fatos)
#print(indices_fatos)
_assassino = fatos[0]
_local = fatos[1]
_arma = fatos[2]
assert _assassino in assassinos
assert _local not in assassinos
assert _local in locais
assert _arma in armas
#assert assassinos[gerador_de_fatos()[1]] == assassinos
def jogar_detetive(fatos):
i = 0
achou = False
while (i < 1000):
i += 1
if fatos == gerador_de_fatos():
achou = True
break
return [i, achou]
if __name__ == "__main__":
pytest.main(['-svv', __file__])
fato = gerador_de_fatos()
print(fato)
jogo = jogar_detetive(fato)
if jogo[1]:
print(
f'O detetive Frederico achou o assassino {fato[0]} que matou o Luiz na {jogo[0]} vez '
)
else:
print(f'O detetive Frederico não achou o assassino {fato[0]} que matou o Luiz')
#print(jogar_detetive(fato))
#fato = gerador_de_fatos()
#fatos_gerados = gerador_de_fatos()
#print(fatos_gerados)
#print(mostra_index_dos_fatos(fatos_gerados))