Schwere Aufgabe ... (aber ich will das lösen)
so hier jetzt meine lösung:
bitte bewerten...
das time dings is nur zum gucken wie lange er hat
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
def get_combinations(string):
if len(string) <1:
yield string
else:
for permu in get_combinations(string[1:]):
for i in range(len(permu)+1):
yield permu[:i] + string[0:1] + permu[i:]
# Zeitberechnung
beg = time.time()
iterator = get_combinations("EPMDHLIRIEKETUISIS")
file = open ('output', 'w')
for element in iterator:
file = open('output', 'a')
file.write(element+'\n')
file.close()
end = time.time()
print end - beg
das time dings is nur zum gucken wie lange er hat
quemo.qu.ohost.de
Nach deiner eigenen Aussage bist du Python-Anfänger und darum sieht das auch nicht aus, wie selbst entwickelter Code, sondern eine Mischung aus Versatzstücken gefundener Snippets.
Was den Teil angeht, der überwiegend von dir stammen könnte - nämlich der Teil außerhalb der Funktion -, so hast du das mit den Dateioperationen noch nicht richtig verstanden. Dazu solltest du nochmal das Tutorial lesen. Und dann auch das Dateiobjekt nicht "file" nennen, weil der Name schon belegt ist.
Was den Teil angeht, der überwiegend von dir stammen könnte - nämlich der Teil außerhalb der Funktion -, so hast du das mit den Dateioperationen noch nicht richtig verstanden. Dazu solltest du nochmal das Tutorial lesen. Und dann auch das Dateiobjekt nicht "file" nennen, weil der Name schon belegt ist.
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Numerix meint denke ich, dass du anstatt für jedes Element die Datei aufzumachen und den String reinzuschreiben auch einfach alle *auf einmal* reinschreiben könntest.
ja aber so kann ich die datei schon bevor das script beendet is angucken
bei 18 zeichen is das meiner meinung nach nützlich
ah ja .. der code stammmt komplett von mir... fred.reichbier hat mir nur gesagt das ich das mit yield machen kann ich sass aber auch den ganzen nachmittag an diesem code... am anfang war er viel länger
edit: sieht man auch auf der anderen seite....
btw... seit 2h würgt er sich jetzt schon mit der kombination von 18 chars rum... die datei ist schon knapp 1 GB gross
bei 18 zeichen is das meiner meinung nach nützlich
ah ja .. der code stammmt komplett von mir... fred.reichbier hat mir nur gesagt das ich das mit yield machen kann ich sass aber auch den ganzen nachmittag an diesem code... am anfang war er viel länger
edit: sieht man auch auf der anderen seite....
btw... seit 2h würgt er sich jetzt schon mit der kombination von 18 chars rum... die datei ist schon knapp 1 GB gross
quemo.qu.ohost.de
@Quemo: Ist dir klar, dass die Datei output in jeder Iteration geöffnet und geschlossen wird? Warum öffnest du die Datei in Zeile 20 mit Modus "w" aber benutzt während des Schreibens den Modus "a"? So erscheint mir Zeile 20 überflüssig. Das with-statement ist übrigens ne schöne Sache.
Wenn es in der Geschwindigkeit weitergeht, dann ist dein Rechner in rund 1361 Jahren schon fertig ...Quemo hat geschrieben:btw... seit 2h würgt er sich jetzt schon mit der kombination von 18 chars rum... die datei ist schon knapp 1 GB gross
Aber dann musst du zwischendrin gelegentlich on-the-fly eine neue Festplatte einbauen, es sei denn du hast Platz für knapp 6 PB ...
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Also das wären dann bei 10 Zeichen fünf Sekunden, es gilt
Mögliche Kombinationen = Charset ^ len(Charset)
bei 10^10 also 10000000000, dafür braucht er 5 Sekunden bei mir => 2000000000 Kombinationen/Sekunde.
Bei 18^18 Kombinationen wären das dann 39346408075296537575424/2000000000 Sekunden = 623833 Jahre.
Der Speicherplatz, den du dafür brauchst, ist 18 * 18^18 Bytes = 644136294208 Terabytes.
Edit: numerix hat das ja schon vorgerechnet, ist ist sein Rechner wohl schneller :D Hm, irgendwie sind unsere Ergebnisse sehr unterschiedlich. Hab wohl irgendwo nen Denkfehler drin ;)
Mögliche Kombinationen = Charset ^ len(Charset)
bei 10^10 also 10000000000, dafür braucht er 5 Sekunden bei mir => 2000000000 Kombinationen/Sekunde.
Bei 18^18 Kombinationen wären das dann 39346408075296537575424/2000000000 Sekunden = 623833 Jahre.
Der Speicherplatz, den du dafür brauchst, ist 18 * 18^18 Bytes = 644136294208 Terabytes.
Edit: numerix hat das ja schon vorgerechnet, ist ist sein Rechner wohl schneller :D Hm, irgendwie sind unsere Ergebnisse sehr unterschiedlich. Hab wohl irgendwo nen Denkfehler drin ;)
In jedem Fall wird weder Quemo noch seine Festplatte das je erleben ...Dauerbaustelle hat geschrieben:numerix hat das ja schon vorgerechnet, ist ist sein Rechner wohl schneller Hm, irgendwie sind unsere Ergebnisse sehr unterschiedlich. Hab wohl irgendwo nen Denkfehler drin
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Und ich dachte schon dass das was ich in meiner Freizeit mache blödsinnig istY0Gi hat geschrieben:ich habe meinen Code damals geschrieben, um ein Zeitungsrätsel mit Buchstabensalat zu komplettieren
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nun, mein Ego wollte das olle Rätsel komplett lösen und mein Verstand zog Automation, Weiterbildung und Gehirnjogging dem stumpfen Ausprobieren vor
Dabei bin ich übrigens die erzeugten Zeichenketten von Hand (bzw. Auge) durchgegangen in der Hoffnung, beim Überfliegen a) reale Wörter und b) unter diesen das gesuchte zu finden - was geklappt hat.
Nach einigen Updates verwendet der Code immerhin `yield`, doch bisher ist es noch rekursiv, wobei ich gerne auch eine iterative Lösung geschaffen hätte. Das ist mir bisher aber noch nicht gelungen - wer also einen Nagel für den Programmierhammer sucht: Bitte coden Sie jetzt!
Dabei bin ich übrigens die erzeugten Zeichenketten von Hand (bzw. Auge) durchgegangen in der Hoffnung, beim Überfliegen a) reale Wörter und b) unter diesen das gesuchte zu finden - was geklappt hat.
Nach einigen Updates verwendet der Code immerhin `yield`, doch bisher ist es noch rekursiv, wobei ich gerne auch eine iterative Lösung geschaffen hätte. Das ist mir bisher aber noch nicht gelungen - wer also einen Nagel für den Programmierhammer sucht: Bitte coden Sie jetzt!