Seite 2 von 2

Verfasst: Mittwoch 10. Dezember 2008, 18:21
von Y0Gi
Ich habe es seinerzeit mal so weit gebracht.

Verfasst: Mittwoch 10. Dezember 2008, 18:35
von Quemo
so hier jetzt meine lösung:

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
bitte bewerten...
das time dings is nur zum gucken wie lange er hat

Verfasst: Mittwoch 10. Dezember 2008, 18:49
von numerix
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. :wink:

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.

Verfasst: Mittwoch 10. Dezember 2008, 19:08
von Dauerbaustelle
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.

Verfasst: Mittwoch 10. Dezember 2008, 19:42
von Quemo
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 :D 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

Verfasst: Mittwoch 10. Dezember 2008, 20:02
von derdon
@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.

Verfasst: Mittwoch 10. Dezember 2008, 20:11
von Quemo
thx ... da hast du natürlich recht -.-

Verfasst: Mittwoch 10. Dezember 2008, 20:22
von numerix
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
Wenn es in der Geschwindigkeit weitergeht, dann ist dein Rechner in rund 1361 Jahren schon fertig ... :D

Aber dann musst du zwischendrin gelegentlich on-the-fly eine neue Festplatte einbauen, es sei denn du hast Platz für knapp 6 PB ...

Verfasst: Mittwoch 10. Dezember 2008, 20:30
von Dauerbaustelle
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 ;)

Verfasst: Mittwoch 10. Dezember 2008, 20:53
von numerix
Dauerbaustelle hat geschrieben: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 ... :)

Verfasst: Mittwoch 10. Dezember 2008, 21:23
von Quemo
ich hab das mal abgebrochen *totlach*
edit: was bringt mir der ganze script jetzt eigentlich???

Verfasst: Mittwoch 10. Dezember 2008, 21:31
von Y0Gi
Ich weiß nicht, was es dir bringt, aber ich habe meinen Code damals geschrieben, um ein Zeitungsrätsel mit Buchstabensalat zu komplettieren ;)

Verfasst: Mittwoch 10. Dezember 2008, 21:38
von Leonidas
Y0Gi hat geschrieben:ich habe meinen Code damals geschrieben, um ein Zeitungsrätsel mit Buchstabensalat zu komplettieren ;)
Und ich dachte schon dass das was ich in meiner Freizeit mache blödsinnig ist ;)

Verfasst: Donnerstag 11. Dezember 2008, 14:07
von Y0Gi
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!