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
PyLotto
- 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)
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^^
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^^
@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.
Edit: Habe gerade in den Quelltext geschaut: Du solltest hoffen, dass Dein Informatiklehrer auch nicht hier mitliest.
Zuletzt geändert von BlackJack am Dienstag 24. Februar 2009, 22:28, insgesamt 1-mal geändert.
- 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? )
Meine Kristallkugel sagt mir, dass das in weit unter 50 Zeilen geht. (Vielleicht wollen die Golfer aus dem andern Thread dazukommen? )
@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
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
@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
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.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
Also ich kann mir beim besten Willen nicht vorstellen, daß Dir das ein Mathematiker beigebracht haben soll.
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.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
Beim Lotto aber nicht, deswegen brauchen wir diesen Binominialkoeffizenten, oder wie man's schreibt.
Stimmt, ein kleiner Fehler ist mir unterlaufen. Hier die korrigierte Version:
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.
Code: Alles auswählen
>>> from __future__ import division
>>> (6/49) * (5/48) * (4/47) * (3/46) * (2/45) * (1/44)
7.1511238420185173e-08
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).
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).
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.
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.
>>> 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
>>> (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
@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.
Crackus hat geschrieben:http://paste.pocoo.org/show/105246/
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
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^^
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^^