Folgendes Problem:
Zwei Listen. Die erste Liste enthält Zahlen und die zweite Liste
enthält Wörter.
Es gilt: Jede Zahl hat gleich viele Ziffern ebenso wie jedes Wort
gleich viel
Buchstaben hat analog zu der Anzahl der Ziffern. Die Listen können
unterschiedlich
lang sein.
Verwandte Zahlen sind solche, welche die gleichen Ziffern haben. Finde
alle Zahlen dieser
Art für die es auch Wörter gibt!
numbers = [ 1234, 1232, 1223 ]
words = [ "polo", "pool", "witz"]
Ergebnis: [1232, 1223] -> [ "polo", "pool"]
Verwandte Zahlen zu finden ist einfach nur tue ich mir schwer bei dem
Finden
der Wörter....
>>> s1="pool"
>>> s2="polo"
>>> list(s1)
['p', 'o', 'o', 'l']
>>> l1=list(s1)
>>> l2=list(s2)
>>> l1.sort()
>>> l2.sort()
>>> l1
['l', 'o', 'o', 'p']
>>> l2
['l', 'o', 'o', 'p']
HTH
Martin
http://docs.python.org/library/stdtypes.html#set
Chris
Die Antworten sind gut gemeint führen aber in die falsche Richtung!
Der Nachfolgende Code führt zu folgender Ausgabe:
[[144, 441], [169, 196, 961], [256, 625]]
Natürlich habe ich auch den analogen Code für die Wörter.
Jetzt suche ich eine handliche Lösung um jede sub-liste
der Zahlen mit der sub-liste der Wörter abzugleichen.
[['EAT', 'TEA'], ['NOW', 'OWN'], ['ITS', 'SIT'], ['ACT', 'CAT'],
['DOG', 'GOD'], ['HOW', 'WHO']]
Es ist unschwer zu erkennen, daß 144 und 441 nicht mit EAT und TEA
zusammenpassen!
(warum? weil 441 ATE sein müßte)
Wie schreibt man nun die Funktion, die alle Zahlen liefert die zu den
Wörtern
passen?
def createSquares(digits):
data = []
low = 10**(digits-1)
high = 10**(digits )-1
rootLow = int(math.sqrt(low))
rootHigh = int(math.sqrt(high))
current = rootLow
if current**2 < low:
current += 1
while current <= rootHigh:
data.append(current**2)
current += 1
return data
def digitizer(number):
return map(int, "%d" % (number))
def numberizer(digits):
return int(("%s" % (digits))[1:-1].replace(",", "").replace(" ",
""))
def stringerizer(letters):
return (("%s" % (letters))[1:-1].replace(",", "").replace(" ",
"").replace("'", ""))
def filterSquares(squares):
groups = {}
for square in squares:
key = stringerizer(sorted(digitizer(square)))
if not key in groups: groups[key] = []
groups[key].append(square)
return [ k for k in groups.values() if len(k) >= 2 ]
print(filterSquares(createSquares(3)))
Was genau ist denn "zusammenpassen"? Passen 144 und EAT �berhaupt
zusammen? EAT hat ja schlie�lich drei verschiedene Buchstaben, und
144 nur zwei verschiedene Ziffern.
> (warum? weil 441 ATE sein m��te)
Dann passen sie doch immernoch nicht zusammen!
Finde eine pr�zise Definition von "zusammenpassen", und dann hast
Du vermutlich auch schon das Programm. Die Definition k�nnte
von der Form sein:
Ein Wort und eine Zahl passen zusammen, wenn ...
Eine Gruppe von W�rtern passt mit einer Gruppe von Zahlen zusammen,
wenn je paarweise eine Zahl und ein Wort zusammenpasst und au�erdem
...
Ciao,
Martin