Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists?

berndoa

Top Contributor
Wobei ich es an dem simplen beispiel mal kurz durchspielen will:
Zu Beginn spielen wir Lottt 3aus6 und wollen 3 Richtige. heißt auch dass wir 3 zahlen aus 1-6 ziehen (pro tippreihe) und 3 gewinnzhaleen gezogen werden.

Nun überlegen wir uns, wenn wir die zahlenmenge in 2 Bereiche aufteilen, wie es sich dann verhält.
Aus gewissen Gründen nehmen wir eine 3-3 Zerlegung (man hätte theoretisch auch 2 zahlen in A und 4 in B legen können. würde am Ende aber wohl zuv viele Tippreihen bedeuten, weshalb man es so wählt)

heißt also, die zahlen 1-3 liegen nun in A und die zahlen 4-6 in B.
Was heißt das nun im Weiteren zur verteilung der gewinnzahlen?
es gibt praktisch nur die aufteilungen 3-0 2-1 1-2 0-3

weil wir ja 2 richtige haben wollen, prüfen wir tippreihen die den fall abdekcen dass 2 gewinnzahlen in A sind.
und gewinnreihen für den fall dass 2 gewinnzahlen in B sind.

das heißt, wir spilen nun 2 separate lottospiele:
Lotto 3 aus 3, gesucht 2 richtige. (mit zahlenbereich 1-3)
und lotto 3aus3, gesucht 2 richtige (mit zahlenbereich 4-6)

ich schreibs extra 2 mal hin, obwohl identisch, da es im großen fall mit 6aus49 und 3 richtigen eben 2 ungleiche gruppengrößen gibt.


Naja, ohne zu überlegen ist klar:
wenns nur 3 zahlen gibt und wir 3 zahlen tippen dürfen, dann machen wir halt eine tippreihe mit genau den 3 zahlen.

daher lösen wir das erste lottospiel durhc eine tippreihe (1,2,3)
und das zweite lottospiel durch eine tippreihe (4,5,6).



Was mir so nebenher auffiel was man "falsch" machen kann:
Auch ich dachte anfangs bei den zerlegungen oben drüber nach, warum man bspw. nicht 2 lottospiele 3aus3, 1 zahl wird gezogen macht.

denn wenn man alle fälle mit 1 gewinnzahl in A und alle fälle mit 1 gewinnfall in B abdeckt, hat man doch auch alle konfigurationen, richtig?und es würde sogar weniger tippreihen brauchen, nciht wahr?

tja, leider falsch.
Denn wir wollen ja 2(!) richtige!
Und wenn in einer menge A nur 1 gewinnzahl vorkommt, können wir tippen was wir wollen und werden niemals 2 richtige haben!

Daher ist auch die untergrenze für die gewinnzahlen pro menge, wie wir es aufteilen sollten, immer gleich der gesuchten zahl an richtigen.
darum würde es auch keinen sinn machen, im sinne der informatik das 3aus3 , mit 2 hgewinnzahlen, irgendwie npchmal in 2 Mengen
P und Q zu zerlegen. dann hätte p 1 element und q 2 oder umgekehrt.

nie im leben könnte man mit elementen aus der jeweiligen gruppe 2 richtige hinkriegen, die einelementige gruppe könnte keine 2 richtige hervorbringen.

wie man das Alles mathematisch ermitteln kann?

keine Ahnung, das wüssten wir alle gern :)
 

mihe7

Top Contributor
@temi Nehmen wir mal an, wir spielen 2 aus 6. Es gibt 15 Möglichkeiten, einen Zweier zu ziehen. Mit einem Tipp kann ich auch nur einen der 15 Zweier treffen, also brauche ich 15 Tipps, um sicher einen Gewinn zu erzielen.

Bleiben wir mal bei dem Spiel, dass 2 aus 6 gezogen werden, ändern die Regeln aber so ab, dass wir pro Tipp drei Zahlen angeben können. Es gibt also immer noch 15 Möglichkeiten, einen Zweier aus den 6 Zahlen zu ziehen. Jetzt kann ich pro Tipp aber drei Zahlen und somit 3 Zweier angeben. Ich brauche also nur noch mindestens 5 Tippreihen, um alle 15 Zweier abzudecken. Mit einem Tipp kann ich nun drei Zweier treffen aber es wird nach wie vor nur ein Zweier gezogen, so dass ich immer noch alle Zweier abdecken muss, um sicher zu gewinnen.

Jetzt ziehen wir 3 aus 6. Pro Ziehung werden nun drei Zweier gezogen. Für einen Gewinn reicht die Übereinstimmung mit einem Zweier, so dass sich die Mindestzahl der Tippreihen auf ein Drittel reduziert (oder umgekehrt: mit jedem Tipp erwische ich drei Zweier, es reicht einer zum Gewinn). Das war zumindest die Überlegung, wie ich sie interpretiert habe. Daraus ergeben sich eben 1,666... und damit 2 Tippreihen als untere Schranke.
 

berndoa

Top Contributor
Ich rechne jetzt mal was ins Blaue rein:
für 2 zahlen aus 6 gibt es 6*5/(2*1)=15 möglichkeiten.

nun sind aber, wie erwähnt, in jeden 3 gezogenen Gewinnzahlen 3*2/(2*1)=3 zweier drin.
treffen müssen wir aber nur einen davon. also anfangszahl schon mal durch 3.

dann haben wir auch nicht bedacht, dass wenn wir eine tippreihe a 3 zahlen tippen, dass wir dabei (maximal) 3 zweier auf einmal abdecken.
also nochmal durhc 3.

daher verringert sich die anzahl an nötigen tippreihen auf (15/3)/3=5/3=1,66, aufgerundet 2.


Um das nur nochmal kurz zusammenzufassen :)
 

berndoa

Top Contributor
hast du auch schon berechnet wie lange dein Programm braucht?
Berechnet? Nö.
Mit Laufzeit will ich mich erst gar nciht beshcäftigen, sosnt wird mir wieder übel :-D

Ne, theoretisch will ich mein Programm derzeit Objektorientiert umschbreiben aber irgendwie habe ich da auch nicht so richtg mehr Bock drauf, zumindest derzeit.

Nachdem es das Programm nicht mal zustande brachte, ein offensichtlich optimierbares System aus 556 Reihen auch nur um eine einzige zu kürzen, ist es wohl eh falsch irgendwo :-/
 
G

Gelöschtes Mitglied 65838

Gast
du hast halt das problem wenn dein Programm länger dauert als die Tipp reihen anhalten
 

berndoa

Top Contributor
du hast halt das problem wenn dein Programm länger dauert als die Tipp reihen anhalten
Ich verstehe gerade nicht ganz, was du meinst?

die Tippreihen existieren, wie alle Variabeln und Co., so lange wie der Block geht in dem sie deklariert sind, oder?

Oder werden die ältesten einfach gelöscht wenn der Speicher voll ist und ich trotzdem was Neues reinpacken will?
 
G

Gelöschtes Mitglied 65838

Gast
wenn es jede woche 3 neue Tipps gibt aber dein Code 2 Wochen zum finden der lösung brauchst ist das sozusagen komplett nutzlos auch wenns richtig ist
 

berndoa

Top Contributor
Um die Rechnung oben nach ganz allgemein zu machen:
Wenn man Lotto a aus b spielt, eine Tippreihe/-feld c zu wählende zahlen hat und man d Richtige will,
dann braucht man (b über d) / ((c über d)*(a über d))
verschiedene Tippreihen (mindestens) um eben d Richtige zu gewährleisten :)

hierbei ist (b über d)=b!/(d!*(b-d)!)
der mathematische Binomialkoeffizient.

im Beispiel oben hatten wir b=6, a=c=3 und d=2.

Nur damit man mal weiß wie man das für verschiedene Fälle rechnet.
 

berndoa

Top Contributor
wenn es jede woche 3 neue Tipps gibt aber dein Code 2 Wochen zum finden der lösung brauchst ist das sozusagen komplett nutzlos auch wenns richtig ist
ehm, mein Code hängt ja jetzt nicht von einer Sitzung ab.
er soll ja ein Bündel von Tippreihen finden, die man auf einmal spielt sodass man garantiert mind. einen Dreier hat, GERADE unabhängig davon was in der Woche gezogen wurde.

Insofern muss das System nur einmal gefunden und erstellt sein und kann dann immer wieder recycelt werden :)


natürlich bringen tuts nicht viel, Verlsute mahct man immer ordentlich. Aber es geht ja mehr um Proof of Concept und dass ich mir eventuell einbilden kann ein noch besseres System als ads mit den 163 Tippreihen gefunden zu haben.
Kurzum: Bragging Rights! :)
 
G

Gelöschtes Mitglied 65838

Gast
warum rechnest du eig immer die tupels aus? du rechnest sie aus schmeißt die weg die mehrfach vorkommen die kannst du dir in eine sql bank speichern und dir dann noch raussuchen was du brauchst geht 10 mal schneller als das arme java zu überfordern :)
 

Meikelsoft

Mitglied
Ganz ehrlich?
Keine Ahnung :)

Ich checks auch nicht wie es geht.

Aber ein Gedanke bei dem Ganzen war wohl, wie ich so gelesen habe:
Man überlegt sich Folgendes:
Es werden ja 6 Gewinnzahlen gezogen.
Man unterteilt die zahlen 1-49
in 2 Gruppen A=1-24 und B=25-49 oder so, halbwegs gleich große Gruppen halt.


von den 6 gewinnzahlen sind dann bspw. 2 in A und 4 in B.
oder 1 in A und 5 in B.
oder 3 in A und 3 in B.

was alle diese Aufteilungen gemeinsam haben ist dass in einer der beiden gruppen >=3 Zahlen liegen.


Darum kann man eine Menge an Tippreihen spielen, die mind 3 richtige für die zahlengruppe A garantiert.

und eine weitere Menge an tippreihen mit denen mind. 3 richtige mit zahlen aus B garantiert sind.


hört sich umständlich an, ist es auch.

ich steige da auch nicht 100% durch.

bin jedenfalls mal hingegangen, alle tripel mit zahlen aus 1-24 gebildet und die in lottoreihen zusammengepackt.
gleichermassen habe ich alle tripel mit zahlen aus 25-49 in eine menge an tippreihen gepackt.

beide tippreihen zusammen ergeben das gesamtsystem.

habe noch so meine methoden bzw. algorithmus um die tripel möglichst kompakt in so wenig tippreihen wie möglich zu packen.

So kam ich am ende bei dem ganzen auf 669 bzw. 666 tippreihen.

wie man das runterbricht bis auf 163 tippreihen?
vermutlich durch immer wiedder anwenden eines simplen brute force optimierungs algorithmus.


So wie mein to-be-used programm aktuell auch, welches bei einem system einfach bruteforce mässig immer wieder guckt welche tippreihe man kicken kann sodass trotzdem noch 3 richtige garantiert sind.

hat vermutlich eine abartige laufzeit und speicherbedarf, aber sollte 100% funktionieren :)
Kann mir mal jemand erklären, wie man da auf 163 Reihen kommen kann? Ganz einfach. Die 163 Reihen bestehen aus zwei Systemen.
 

Meikelsoft

Mitglied
Könntest Du das näher erläutern?
Na klar. Das erste System ist V=22, K=6, T=3, M=3, B=77 also 22,06,03,03=77 und das zweite System ist V=27, K=6, T=3, M=4, B=86 also 27,06,03,04=86. Vor einigen Jahren habe ich ein Video zu diesem Thema gemacht. Morgen Nachmittag werde ich es erneut auf meinem YouTube-Kanal veröffentlichen. Schaut gern vorbei, wenn ihr Lust habt! Zu meinem Kanal
 

mihe7

Top Contributor
Zum Verständnis: es werden 77 Tippreihen (die an der Stelle nicht näher genannt sind) benötigt, um alle möglichen 3er abzudecken, die sich aus den 22 Systemzahlen bilden lassen? Die Frage zu den Werten in dem Bild wäre somit, ob a) 77 Tippreihen das tatsächliche Minimum sind und b) die Mathematik dahinter.
 

Meikelsoft

Mitglied
Zum Verständnis: es werden 77 Tippreihen (die an der Stelle nicht näher genannt sind) benötigt, um alle möglichen 3er abzudecken, die sich aus den 22 Systemzahlen bilden lassen? Die Frage zu den Werten in dem Bild wäre somit, ob a) 77 Tippreihen das tatsächliche Minimum sind und b) die Mathematik dahinter.
Richtig. Habe ich 3 Treffer innerhalb der Systemzahlen, also 22 Zahlen, habe ich auch 3 Richtige.
Da Systemzahlen auch Platzhalterzahlen sind, kann man den Wert immer ändern, wobei die Platzhalterzahl sich selbst nicht ändert.
Dieses System gibt es in jedem Lottoladen in einer kostenlosen Broschüre und ist unter VEW 622 bekannt.
 

Meikelsoft

Mitglied
@temi Nehmen wir mal an, wir spielen 2 aus 6. Es gibt 15 Möglichkeiten, einen Zweier zu ziehen. Mit einem Tipp kann ich auch nur einen der 15 Zweier treffen, also brauche ich 15 Tipps, um sicher einen Gewinn zu erzielen.

Bleiben wir mal bei dem Spiel, dass 2 aus 6 gezogen werden, ändern die Regeln aber so ab, dass wir pro Tipp drei Zahlen angeben können. Es gibt also immer noch 15 Möglichkeiten, einen Zweier aus den 6 Zahlen zu ziehen. Jetzt kann ich pro Tipp aber drei Zahlen und somit 3 Zweier angeben. Ich brauche also nur noch mindestens 5 Tippreihen, um alle 15 Zweier abzudecken. Mit einem Tipp kann ich nun drei Zweier treffen aber es wird nach wie vor nur ein Zweier gezogen, so dass ich immer noch alle Zweier abdecken muss, um sicher zu gewinnen.

Jetzt ziehen wir 3 aus 6. Pro Ziehung werden nun drei Zweier gezogen. Für einen Gewinn reicht die Übereinstimmung mit einem Zweier, so dass sich die Mindestzahl der Tippreihen auf ein Drittel reduziert (oder umgekehrt: mit jedem Tipp erwische ich drei Zweier, es reicht einer zum Gewinn). Das war zumindest die Überlegung, wie ich sie interpretiert habe. Daraus ergeben sich eben 1,666... und damit 2 Tippreihen als untere Schranke.
Nehmen wir mal an, wir spielen 2 aus 6. Es gibt 15 Möglichkeiten, einen Zweier zu ziehen. Sorry, das ist falsch, der Weltrekord liegt bei 19 Tippreihen und man kann ihn mit einem System erstellen.
 

Ähnliche Java Themen


Oben