Man hat also 6 verschiedene Listen von ints, aus denen genau eine 6-Kombination mit jeweils genau einem Element aus jeder dieser Listen die Lösung ist.
Diese sechs Zahlenlisten auszurechnen ist in python nur Abtippen. Geschenkt.
Das Kriterium der Aufgabe, dass die Zahlen in den jeweils ersten und letzten beiden Ziffern übereinstimmen sollen habe ich so:
Code: Alles auswählen
def getdigits(n) :
return list(str(n))
def arekperms(n,m,k=2) :
a=getdigits(n)
b=getdigits(m)
for i in range(k):
if a[-(k+i)] != b[i] :
return False
return True
(Unter dem Vorbehalt, dass dieser Code aus meinem Kopf und keine Kopie ist, da ich gerade am falschen Rechner sitze und ich für Programmiergolf noch nicht genug Überblick habe...)
Meine Lösungsidee soweit war damit bisher eine -brute force- list-comprehension, im Stil von
Code: Alles auswählen
result = [ [number1,number2, ..., number6] for number1 in list1 for number2 in list2 .... for number6 in list6 if arekperms(number1,number2) and arekperms(number2,number3) and ... arekperms(number6,number1) ]
Die Lösungsmenge ist in meiner Implementation leer und nach weiterem Nachdenken ist mir auch klar geworden, warum:
Ich weiß ja garnicht, welche Liste hier welche ist, habe aber die Reihenfolge explizit vorgegeben.
Alles was ich weiß, ist das jede Liste nur einmal benutzt werden darf, um sich eine Zahl rauszupicken ( und ja es kommen auch noch Dubletten vor ( ... sollte aber mit einer kleinen Funktion oder list(set(ausdruck)) schnell auschließbar sein).
Das Durchprobieren von 6! = 720 Möglichkeiten scheint mir nicht sinnvoll.
Wenn also jemand in Python eine Möglichkeit kennt, eine Variable als Platzhalter für ein Element aus einem übergeordneten Element zur "Querprüfung" auf die Unterelemente eines anderen übergeordneten Elements kennt, bin ich für jeden Input sehr dankbar.
In Haskell weiß ich nicht, wie dieses Problem anzufassen ist, habe aber mit Pythons List-comprehensions sehr gute Erfahrungen gemacht.