PyLotto

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

Ich habe mich (außerschulisch) damit befasst wie warscheinlich es ist einen sechser im Lotto zu haben (ca. 1/14.000.000)
ich habe ein programm geschrieben was mit den Zahlen 1,2,3,4,5,6 spielt
und jedes mal wenn man einen sechser hat die anzahl der dafürbenötigten versuche und einen hashwert (um schummeln zu vermeiden) ausgibt
um es interressant zu machen ein wettstreit wer schafft es mit den wenigsten versuchen einen sechser hinzukriegen???
einfach versuche und hash hier reinschreiben ich überprüfe ob die Zahl mit dem haswert zusammen passen und fertig
das programm gibt es hier : http://rapidshare.com/files/202043353/PyLotto.rar.html

dann viel spass^^
mein rekord liegt bei 1.9mio^^
Bisschen doof gemacht also man sieht nicht das das programm arbeitet^^
man wird es allerdings in der Systemüberwachung sehen
Zuletzt geändert von Crackus am Dienstag 24. Februar 2009, 21:26, insgesamt 1-mal geändert.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Ich bin durchaus ineressiert, an dem was Leute hier so vorstellen. Mit Deinem Sammelsurium an *.so Files kann ich leider erst mal nichts anfangen. Vielleicht hast Du noch n'bisschen mehr zu bieten?
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

einfach die Datei LottoDauer(.exe??) starten^^
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wie wärs, wenn du statt Kompilatem mal den Source anbietest? Vor allem kommt man dann auch mit einer Pastebin (http://paste.pocoo.org/) aus und brauch keinen schrottigen Hoster. Noch dazu ist der Anteil der Nutzer alternativer Betriebssysteme im Forum sehr hoch (ich würde sogar sagen der Großteil der Leute, die dir nützliche Tipps geben könnten)
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

ich habe ya ein salt in die md5 dazugegeben a) um einen sicheren "Wettbewerb" zu geährleisten und b) damit ich auch richtige ergebnisse bekomme

ich stelle mall die source ohne salt rein
es gibt auch noch ein par kleinigkeiten die nicht ganz hübsch aussehen die ich so kaschieren kann^^

Edit : http://paste.pocoo.org/show/105246/
das is echt praktisch^^
BlackJack

@Crackus: Also bei 6 aus 49 liegen die Chancen auf sechs Richtige bei 1/10.068.347.520 und nicht bei 1/14.000.000 -- pass also auf, dass Dein Mathelehrer hier nicht mitliest. ;-)

Edit: Habe gerade in den Quelltext geschaut: Du solltest hoffen, dass Dein Informatiklehrer auch nicht hier mitliest. :shock:
Zuletzt geändert von BlackJack am Dienstag 24. Februar 2009, 22:28, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Puh ... ich glaub ich gönn mir erstmal einen Schnaps bevor ich den Code nochmal anschaue ;)
Meine Kristallkugel sagt mir, dass das in weit unter 50 Zeilen geht. (Vielleicht wollen die Golfer aus dem andern Thread dazukommen? :twisted:)
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Wenn ich mich zurückerinnere ware die Chance "49 über 6" was genau 13983816 ist?
BlackJack

@hendrikS: Kann sein, dass ich heute schon zu müde bin, aber für die erste Kugel hat man 49 Möglichkeiten, für die zweite bleiben noch 48, für die dritte 47, und so weiter. Das bringt mich zu:

Code: Alles auswählen

In [290]: 49*48*47*46*45*44
Out[290]: 10068347520L
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Ja, es geht aber um die Anzahl möglicher Kombinationen und die ist eben 49 über 6. Und die Wahrscheinlichkeit für jede Kombination ist gleich hoch. Also der Mathe Lehrer hat schon recht.

@Crackus. Schreib doch mal ein Programm für 49 über 6. Schöne Übung.

@Cofi: Apropos Golf: Postings für n über k kleiner 54 Bytes sind natürlich wilkommen :)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

So habe ich das mal in der Schule gelernt:

Code: Alles auswählen

>>> from __future__ import division
>>> (1/49) * (1/48) * (1/47) * (1/46) * (1/45) * (1/44)
9.9321164472479387e-11
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

derdon hat geschrieben:So habe ich das mal in der Schule gelernt:

Code: Alles auswählen

>>> from __future__ import division
>>> (1/49) * (1/48) * (1/47) * (1/46) * (1/45) * (1/44)
9.9321164472479387e-11
Ich weiß leider nicht, was das für eine Schule ist oder war oder was Du für eine Schulbildung hast, aber das ist schlicht und einfach Käse. Der mathematische Hintergrund steht in meinem posting darüber.
Also ich kann mir beim besten Willen nicht vorstellen, daß Dir das ein Mathematiker beigebracht haben soll.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

BlackJack hat geschrieben:@hendrikS: Kann sein, dass ich heute schon zu müde bin, aber für die erste Kugel hat man 49 Möglichkeiten, für die zweite bleiben noch 48, für die dritte 47, und so weiter. Das bringt mich zu:

Code: Alles auswählen

In [290]: 49*48*47*46*45*44
Out[290]: 10068347520L
Das, was an dieser Überlegung falsch ist - du berücksichtigst die Reihenfolge. In deinem Beispiel sind die Zahlen 1 2 3 4 5 6 andere als 1 3 2 4 5 6.

Beim Lotto aber nicht, deswegen brauchen wir diesen Binominialkoeffizenten, oder wie man's schreibt.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Stimmt, ein kleiner Fehler ist mir unterlaufen. Hier die korrigierte Version:

Code: Alles auswählen

>>> from __future__ import division
>>> (6/49) * (5/48) * (4/47) * (3/46) * (2/45) * (1/44)
7.1511238420185173e-08
Wenn man das erste Kreuz macht, ist die Wahrscheinlichkeit, eine richtige Zahl zu treffen, 6:49 (logisch). Anschließend sind nur noch 48 Zahlen zum Ankreuzen da, weil man schon eines gemacht hat usw.. Aufgrund der Pfadregel werden die Quotienten miteinander multipliziert.
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Immernoch Käse.
Siehe hier

Interessant sind hier die Folien 5 und 6.
Wie BlackVivi schon sagte, gibt es (n über k) Teilmengen der Mächtigkeit k einer Menge der Mächtigkeit n. Genau eine Teilmenge führt aber zu 6 richtigen, also ist die Wahrscheinlichkeit 1 / (49 über 6).
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

derdons korrigierte Lösung ist richtig.
Ist ja eigentlich eine extrem einfache Methode n über k zu berechnen.

Edit:Wenn man sich die Fakultäten aus n über k mal aufschreibt und dann kürzt kommt man genau auf derdons korrigierte Lösung.
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

>>> from __future__ import division
>>> (6/49) * (5/48) * (4/47) * (3/46) * (2/45) * (1/44)
7.1511238420185173e-08

das ist richtig
das heißt die warscheinlichkeit im lotto zu gewinnen beträgt 7.1511238420185173e-06%
und die warscheinlichkeit das du gewinnst liegt bei 1 / 13983815.999999998 also etwa 1/14mio

also meine rechnung war schon richtig und bei dem quelllcode kann man ne menge sparen
z.B. (ist mir gestern abend noch aufgefallen) mehrere male global
import timer ist in der version auch nicht nötig
noch ein bissl mehr muss weg bye
BlackJack

@Crackus: Da sollte man sich *alle* ``global`` sparen, die durchnummerierten Namen durch eine geeignete Datenstruktur, zum Beispiel `list` ersetzen und diese ganzen Wiederholungen von nahezu identischem Quelltext durch (echte) Funktionen und Schleifen ersetzen.
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Crackus hat geschrieben:http://paste.pocoo.org/show/105246/
:shock: :shock:

Code: Alles auswählen

import random

population = range(1, 50)
target = (1, 2, 3, 4, 5, 6)
sample = None
count = 0

while sample != target:
    sample = tuple(sorted(random.sample(population, 6)))
    count += 1

print "Gotcha! (%d)" % count
http://www.felix-benner.com
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

okay das passt ich kenne einige Befehle daraus noch nicht (lerne noch nicht solange python)
und wollte eigentlich nur durch ein Programm den random befehl vertiefen und deswegen ein "kleines" Programm geschrieben was lotto simuliert.
habe dass dann schnell in eine endlosschleife getan und fertig.
aber ich finde es sehr schön das leute nicht nur sagen das kann man verbessern (was mir auch hilft) sondern auch mal einen sauberen und sehr professionellen Code reinstellen
Vielen dank an tordmor

ich werde das Programm noch mit einem hash versehen und hochladen (kann leider kein C um den Hash zu machen :( sry)

Vielen dank für Vorschläge und Verbesserungen#

PS: Rekord liegt immer noch bei 1.900.000

Edit: Vieleicht kann hier irgendwer den kleinen abschnitt in C schreiben und mir die Source zuschicken???
Müsste ich es nur noch in den Pythoncode implentiert kriegen^^
Aber das schaffe ich!!! hoffe ich
ansonsten hätte ich ya ein sehr nettes Forum was mir hoffentlich helfen würde^^
Antworten