Derzeit habe ich ein Real-Life-Problem, welches ich gerne nutzen würde, um meine Python-Kenntnisse zu vertiefen. An richtigen Problemen knobelt es sich einfach lieber, als an Beispielen aus dem Lehrbuch.
Ich habe ein Kartenspiel, welches ich nicht schaffe zu lösen. Langsam beschleicht mich das Gefühl, dass es keine Lösung geben kann. Wieso also nicht alle Permutationen durchrechnen?
Zur Vereinfachung versuche ich meine Überlegungen nur anhand der vier Karten oben links zu veranschaulichen:
Ich vergebe Front und Heck der Flugzeuge in den verschieden Farben Primzahlen, positiv und negativ:
Front weiß = +2
Heck weiß = -2
Front gelb = +3
Heck gelb = -3
Front grün = +5
Heck grün = -5
Front blau = +7
Heck blau = -7
Karte 1 oben links stelle ich also von oben beginnend im Uhrzeigersinn als Liste dar=
Code: Alles auswählen
card1 = [-7, -2, 5, 3]
Jetzt kann jede Karte an 9 Positionen liegen, und jeweils 4 Lagen einnehmen. Somit gebe es also 9!*9^4 Möglichkeiten soweit ich richtig rechne, wenn wir nicht in Betracht ziehen, dass zwei Hecks und zwei Fronten nicht zusammen passen.
Wenn wir jetzt der Einfachheit halber nur die vier Karten oben links ansehen, habe ich mal sowas hier fabriziert:
Code: Alles auswählen
card1 = [-7, -2, 5, 3]
card2 = [-3, -5, 7, 2]
card3 = [-5, -3, 5, 2]
card4 = [-7, -2, 7, 3]
result = 1
iteration = 0
drehung = 0
while result != 0 and drehung <4:
result = card1[1] + card2[3] + card3[1] + card4[3] + card1[2] + card3[0] + card2[2] + card4[0]
iteration = iteration + 1
if result == 0:
print ("Bingo! Summe ist",result,"bei Durchlauf",iteration,".")
print ("Lösung:\nKarte 1:", card1, "\nKarte 2:", card2, "\nKarte 3:", card3, "\nKarte 4:", card4)
else:
print (iteration)
card1.append(card1.pop(0))
drehung = drehung + 1
Jetzt stehe ich aber vor dem Problem, dass ich Karte 2 um 90 Grad weiter drehen will und dann Karte 1 wieder einmal rundum rotieren muss, usw.
Ich könnte jetzt für jede Karte eine neue Schleife anlegen, aber dass muss doch übersichtlicher gehen?
Meine Idee ist, dass ich alle Karten in eine Liste packe, und dann für jede Karte mit einer Drehungsvariablen arbeite:
Code: Alles auswählen
cards = [[-7, -2, 5, 3],[-3, -5, 7, 2],[-5, -3, 5, 2],[-7, -2, 7, 3]]
Wenn die Lage aller Karten einmal durch ist, muss ich eine Positionspermutation durchführen. Dafür habe ich mir schon die Itertools Bibliothek angesehen, damit könnte es vielleicht klappen.
Hat jemand einen Tipp oder eine Idee? Ich bin mir nicht sicher ob ich das nicht zu kompliziert angehe, vielleicht bin ich komplett am Holzweg?
Wenn es keine Lösung für das Game geben sollte, möchte ich es hieb und stichfest wissen. Ich hoffe ihr versteht das?