Python: Ich habe es mit Lügner und Ehrlichkeit versucht

Probleme von Lügnern und Ehrlichkeit Ich weiß nicht, um welche Nummer es sich handelt, aber es sieht interessant aus, also habe ich es versucht.

python


import itertools

#Geben Sie konsistente Antworten vom Spieler und vom Kartenspiel zurück
consistents = (
  lambda players: lambda card_deck: lambda statements:
  (
    (hands, is_each_honest) 
    for hands in handss(card_deck) 
    for is_each_honest in is_each_honests
    if  statements(hands) == is_each_honest 
  )
)
#Generator, der einen Schlag auf die Hand jeder Karte zurückgibt
handss = lambda card_deck: itertools.permutations(card_deck)

#Ein Tupel von Tupeln, ob jeder Spieler ehrlich ist(Entscheidend 2)
is_each_honests = (
  (True, False, False, True)
  ,(False, True, True, False)
)

#Daten
players = (0, 1, 2, 3)
card_deck = (1, 2, 3, 4)

statements = lambda hands: (
  hands[0] % 2 == 0
  , hands[1] in (3, 4)
  , hands[1] in (3, 4)    # (Entscheidend 1)
  , hands[3] == 1
)

#Funktionsanwendung und Anzeige
for e in consistents(players)(card_deck)(statements):
  print(e)

python


#Ergebnis:
((1, 3, 2, 4), (False, True, True, False))
((1, 3, 4, 2), (False, True, True, False))
((1, 4, 2, 3), (False, True, True, False))
((1, 4, 3, 2), (False, True, True, False))
((3, 4, 1, 2), (False, True, True, False))
((4, 2, 3, 1), (True, False, False, True))

Es gibt eine endgültige Entscheidung.

Entscheidend 1: "B ist ehrlich" => "B ist richtig" => B sagt => Umgerechnet in "B's Karte ist 3 oder 4"

Sobald die Hand der Karte entschieden ist, wird die Wahrheit jeder Aussage entschieden, so dass das Problem einfach wird.

Entscheidend 2: Lügner / Ehrlich gesagt zwei Personen => B und C sind die gleiche Aussage => B und C sind die gleiche Familie => A und D sind die entgegengesetzte Familie

Es gibt insgesamt 6 Möglichkeiten, wenn keine Einschränkungen bestehen. Wenn jedoch B und C zur selben Familie gehören, wird die Abweichung auf zwei Möglichkeiten reduziert.

python


>>> players = 0, 1, 2, 3
#Keine Einschränkungen
>>> tuple( tuple( not e in liars for e in players ) for liars in itertools.combinations(players, 2))
((False, False, True, True), (False, True, False, True), (False, True, True, False), (True, False, False, True), (True, False, True, False), (True, True, False, False))    #6 Möglichkeiten
#Limited Liar ist AD oder anderweitig BC
>>> tuple( tuple( not e in liars for e in players ) for liars in itertools.combinations(players, 2) if liars in ((0,3),(1,2)))
((False, True, True, False), (True, False, False, True))    #2 Wege

Sie können es berechnen, aber es gibt nur zwei, also frage ich mich, ob es in Ordnung ist, es direkt zu schreiben.

basierend auf dem oben genannten

Ein bisschen kurz

Ich werde versuchen.

Entscheidend 1 => Kombiniere B und C.

B und C sind gleich, ob sie ehrlich sind oder nicht.

Setze 2 => Richtig / Falsch

Wenn es nur zwei Möglichkeiten gibt, kann dies durch einen einfachen logischen Wert anstelle eines Taple ausgedrückt werden. Wenn das Display wichtig ist, können Sie es ein wenig gestalten.

python


import itertools

#Geben Sie konsistente Antworten vom Spieler und vom Kartenspiel zurück
consistents = (
  lambda players: lambda card_deck: lambda statements:
  (
    (hands, is_AD_honest) 
    for hands in itertools.permutations(card_deck)
    for is_AD_honest in (True, False)    # (Entscheidend 2)
    if  statements(hands) == (is_AD_honest, not is_AD_honest, is_AD_honest) # (Entscheidend 1) 
  )
)

#Daten
players = (0, 1, 2, 3)
card_deck = (1, 2, 3, 4)

statements = lambda hands: (
  hands[0] % 2 == 0
  , hands[1] in (3, 4)    # (Entscheidend 1)
  , hands[3] == 1
)

#Funktionsanwendung und Anzeige
for hands, is_AD_honest in consistents(players)(card_deck)(statements):
  print(
    (hands, (is_AD_honest, not is_AD_honest, not is_AD_honest, is_AD_honest)) # (Entscheidend 2)
  )

Es ist leicht zu verstehen, aber etwas kürzer.

Aber an erster Stelle ...

Ist es nicht zu schwer?

Wenn jede Aussage anders ist (zum Beispiel wenn C sagt "B ist ein Lügner"), wird der kategoriale Teil unbrauchbar. Ich werde von vorne anfangen.

Dies scheint auch dann zu funktionieren, wenn Sie den Inhalt jeder Anweisung "Anweisungen" neu schreiben.

python


import itertools

#Geben Sie konsistente Antworten vom Spieler und vom Kartenspiel zurück
consistents = (
  lambda players: lambda card_deck: lambda statements:
  (
    (hands, is_each_honest) 
    for hands in handss(card_deck) 
    for is_each_honest in is_each_honests(players)
    if  statements(hands) == is_each_honest 
  )
)
#Generator, der einen Schlag auf die Hand jeder Karte zurückgibt
handss = lambda card_deck: itertools.permutations(card_deck)

#Ein Generator, der ein Tupel zurückgibt, ob jeder Spieler ehrlich ist
is_each_honests = lambda players:( 
  tuple( e in honests for e in players ) 
  for honests in itertools.combinations(players, 2)
)

#Daten
players = (0, 1, 2, 3)
card_deck = (1, 2, 3, 4)

statements = lambda hands: (
  hands[0] % 2 == 0
  , hands[1] in (3, 4)
  , hands[1] in (3, 4)    
  , hands[3] == 1
)

#Funktionsanwendung und Anzeige
for e in consistents(players)(card_deck)(statements):
  print(e)

Es gilt jedoch weiterhin, "einen Verweis auf eine Person in einen Anspruch auf die Hand einer Karte umzuwandeln", der in der Entscheidung 1 vorgenommen wurde.

Recommended Posts

Python: Ich habe es mit Lügner und Ehrlichkeit versucht
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich bin gestorben, weil ich dachte, eine Python-Klassenvariable sei eine Instanzvariable
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe versucht, mit Python ein Tippspiel zu spielen
Ich habe eine Klasse in Python3 und Java geschrieben
Ich habe Funktionssynthese und Curry mit Python versucht
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Ich habe versucht, eine E-Mail mit SendGrid + Python zu senden
Ich habe Python> autopep8 ausprobiert
Ich habe Python> Decorator ausprobiert
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe pipenv und asdf für die Python-Versionskontrolle ausprobiert
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
[Python] Ich habe versucht, einen lokalen Server mit flask auszuführen
Ich habe versucht, mit Python eine Pseudofraktalfigur zu zeichnen
Ich habe versucht, Python (3) anstelle eines Funktionsrechners zu verwenden
Bildverarbeitung mit Python (ich habe versucht, es in 0 und 1 Mosaikkunst zu binarisieren)
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe Java und Python verglichen!
Ich habe die C-Erweiterung von Python ausprobiert
Ich habe einen Python-Text gemacht
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, mit Python Modebilder und Textsätze zu [kratzen].
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht, mit Python eine E-Mail von Amazon SES zu senden
Ich habe einen Fehler in vim oder zsh in der Python 3.7-Serie
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
[Markov-Kette] Ich habe versucht, die Zitate in Python einzulesen.
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe versucht, den Pferderennplatz Teil 2 zu kriechen und abzukratzen
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Python a + = b und a = a + b sind unterschiedlich
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
Ich habe versucht, eine Python-Datei in eine EXE-Datei zu verwandeln (Rekursionsfehler unterstützt)
Ich habe versucht, Python zu berühren (Installation)
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Pydroid 3 - Ich habe die OpenCV- und TensorFlow-Optionen von IDE für Python 3 (Android) ausprobiert.