Ich habe versucht, Das Problem der Lügner und der Ehrlichkeit mit Python
zu lösen.
Ich habe die Antworten nicht gefunden. Python
einfach.
import itertools
#Wenn Sie ein Lügner sind, antworten Sie das Gegenteil
def ans( person, liars, b):
if person in liars:
b = not b
return b
def print_res(liars, cards):
print('-----')
for i in range(4):
print( '{}:{} {}'.format('ABCD'[i], 'Lüge' if i in liars else 'Positiv', cards[i]))
#Eine Kombination aus einem Lügner und einer Karte
liars_g = itertools.combinations(list(range(4)),2) #Lügner
cards_g = itertools.permutations(list(range(1,5))) #Karte
for liars, cards in itertools.product(liars_g,cards_g):
#Herr A: Meine Karte ist gerade.
#Herr B: Meine Karte ist entweder 3 oder 4.
#Herr C: Herr B ist eine ehrliche Familie.
#Herr D: Meine Karte ist 1.
if ans( 0, liars, cards[0] % 2 == 0) and \
ans( 1, liars, cards[1] in (3,4)) and \
ans( 2, liars, 1 not in liars) and \
ans( 3, liars, cards[3] == 1):
print_res(liars, cards)
Antworten
-----
A:Lüge 1
B:Positiv 3
C:Positiv 2
D:Lüge 4
-----
A:Lüge 1
B:Positiv 3
C:Positiv 4
D:Lüge 2
-----
A:Lüge 1
B:Positiv 4
C:Positiv 2
D:Lüge 3
-----
A:Lüge 1
B:Positiv 4
C:Positiv 3
D:Lüge 2
-----
A:Lüge 3
B:Positiv 4
C:Positiv 1
D:Lüge 2
-----
A:Positiv 4
B:Lüge 2
C:Lüge 3
D:Positiv 1
Recommended Posts