Lottospielen mit System, Versuch 2, noch umständlicher als vorher

berndoa

Top Contributor
Hallo,
ich habe mich ja vor einer Weile damit beschäftigt, wie man sich fürs 6 aus 49 Lotto ein System bauen kann, das man spielt und garantiert 3 Richtige damit hat.
Was ich mental bis auf Weiteres aufgab.

Nun kamen mir zu dem Thema neue Gedanken, zu denen mich die Meinung der Meute interessieren würde.
Mein Gedankengang:
Es gebe eine Liste A, die alle möglichen Lottozahlen enthält, die bei einer Ziehung 6 aus 49 vorkommen.
Also wo Alles von (1,2,3,4,5,6) bis (44,45,46,47,48,49) drin ist, der Einfachheit halber auch in dieser aufsteigend sortierten Reihenfolge.

Es gebe eine Liste B, die alle möglichen 3 Tupel aus dem selben Zahlenraum enthält.
Also B enthält Alles von (1,2,3) bis (47,48,49).

Und dann noch eine Lsite C, die letztlich eine Teilmenge von A ist und ebenso entsprechende 6Tupel enthält.

Liste A und B lassen sich programmiertechnisch erstellen, Liste C ist vorgegeben und ist per se schon bei Erhalt möglichst klein (wobei klein relativ ist, wer reden immer noch von tausenden Einträgen)

Wir wollen C im Endeffekt Schritt für Shcritt immer kleiner mahcen, solange das geht, ohne die "3 gewinnt" Regel zu verletzen (was die genau bedeutet, ist unwichtig an dieser Stelle. Wir wollen jedenfalls Elemente aus C rauskicken)


Im 1. Abstraktionsschritt will ich gar nicht mehr vom Element (1,2,3,4,5,6) aus A reden, sondern nur vom 1. Element aus A.
Also die Elemente in A durchnummerieren und Listenelemente nur noch durch ihren Index ansprechen.

Gleiches mache ich für B und C.


Dementsprechend kann ich auch genausogut hingehen und sagen, statt der 6Tupel besteht die Liste aus natürlichen Zahlen.
Weil für das Folgende nicht mehr wirklich das 6Tupel an sich wichtig ist, sondern nur seine Position in der Liste.

Dann enthält A eben die 6Tupel Nummer 1 bis 13983816 (bzw. 0 bis 13983815, weil wir informatiker sind! ;-))
B enthält die 3Tupel Nummer 0 bis 18424.
Und C die 6Tupel 0 bis ... (hängt halt von der übergebenen Lsite ab, wie lang die ist).

Im Übrigen wird, da C Teilemenge von A ist, manches 6Tupel in C einen anderen Index haben als in A.
Stört uns aber nicht weiter.

Jetzt wirds etwas umständlich zu erklären (Falls es das nicht eh schon war):
Man kennt vielleicht noch aus dem Matheunterricht (oder eher Uniunterricht) den Zeitpunkt wo bijektive, surjektive und Co. Funktionen vorgestellt wurden.
Und das hübsche Diagramme wo Elementen aus einer Menge Elemente ausn eienr anderen Menge zugeordnet wurdne und man da Richtungspfeile zwischen den Elementen zeichnete.

Da meine Zeichenkünste mies sind, stelle man sich Folgendes geistig vor:

Links haben wir senkrecht untereinander alle Elemente aus A, alle 13983816 Stück.
Kann man sich durchaus einfahc als die Zahlen 1-13983816 untereinander gechrieben vorstellen.

Gleichermassen haben wir mittig senkrecht untereinander alle Zahlen aus B, also die Nummern 1-18424 untereinander.

Rechts haben wir senkrecht untereinander alle Zahlen als C.

Nun gehen wir hin und zeichnen Pfeile von den Elemente links zu denen in der Mitte wie folgt:
Wir verbind jedes Element aus A mit den Elementen aus B, die darin enthalten sind.
Zur Erinnerung:
A enthält ursprünglich 6Tupel und B 3Tupel.

Für jedes 6Tupel aus A gehen also Pfeile weg zu den 20 verschiedenen 3Tupeln aus B, die darin enthalten sind.

heißt von jedem Element links gehen 20 Pfeilen zu unterschiedlichen Elementen in der Mitte.

Auf gleiche weise zeichne n wir zwischen Mitte und rechts Verbindungen ein, wo ein 3Tupel aus B in einem 6Tupel aus C enthalten ist.
Faktisch geht dann auch von jedem Objekt rechts 20 Pfeile zu Elementen in der Mitte.

So viel zur Anschauung.
Nun zum Teil, der auch nur im Entferntesten mit Programmieren zu tun hat:

Jedes Element in der Mitte merkt sich auf irgendeine Weise, keine Ahnung wie bisher,
wie viele nach rechts gehende Pfeile es hat.
gehen von einem mittigen Element 5 Pfeile nach rechts, merkt es sich die zahl 5.

Weiterhin, das wäre zumindest sehr nice, sollte ein Element links in der Lage sein, von jedem mittigen Element zu sehen , welche Nummer sich dieses merkt.
Da jedes linke Element mit 20 mittigen lementen verbunde ist (was sich auch nie ändern wird), geht das linke Element hin, nimmt die von den 20 Mittenelementen gespeicherten Nummern und addert diese, die es sich in einem eigenen Counter merkt.
Faktisch sind dies alle (verschiedenen) Wege, wie man von dem Element links zu einem Element rechts kommen kann.

Praktisch wäre es, falls sich bei einem mittigen Element dessen Zähler verändert, dass alle linkenden Elemente, deren Zähler davon abhängen, sich auch synchron mit verändern würden.


Abseits davon soll wiederum jedes Element rechts im hinterkopf behalten könnnen, mit welchen Elementen in der Mitte es verbunden ist.

Nun zum programmiertechnischen:
Eingangs werden selbstredend die 3 Lsiten gebaut und deren Indizierung vorgenommen (ich denke da an Excel oder, fotgeschrittener, 2-3 mysql Tabellen wo einfahc in der linken Spalte das Listenelement (das konkrete 6 oder 3tupel) steht und rechts dessen index.
Und halt irgendwie alle nötigen Infos für die Zähler und so merken.

Die mittige Liste aus 18424 Zählern würde ich ganz primitiv als Array der Länge 18424 initialisieren, alle Werte eignangs auf 0.
Und dann für jede Element aus C hingehen und bei dem Element , mit dem es verbunden ist, den Zähler um 1 erhöhen.

Will sagen: die 1. zahl aus C hat sich ja gemerkt, mit welchen 20 Elementen aus B sie verbunden ist.
Dann werden bei diesen 20 Elementen aus B die zugehörigen Zähler jeweils um 1 erhöht.


Womit wir auch zur gegenrichtugn kommen:

Wird eine Zahl aus C entfernt, dann werden die 20 damit verbundenen Zähler aus B jeweils um 1 erniedrigt.

Nun zur "Strategie" wie man hingehen könnte und die rechte Liste verkleinern könnte ohne (hoffentlich) die Gewinnbedingung zu verletzen:

Man geht ganz nach altem Stil der Reihe nahc die Elemente aus C durch und teste für jedes Element:
Sagen wir, wir streichen das 1. Element aus C.
Dann gehen dadurch bei 20 Elementen aus B der Zähler um 1 nach unten.

Weil ja verbunden, gehen dadurch auch bei vielen Elementen aus A deren zähler um 1 nach unten.
Wir gucken nun also:
Wenn wir hingehen und entfernen das 1. element aus C, sind dann noch die zähler aller Elemente aus A größer 0?
Falls ja, war das 1. Element aus C überflüssig und kann entfernt werden.

Falls nein, ist es notwendig und wir versuchen uns mit dem 2. Element aus C.
so machen wir, falls erforderlich, die C Liste durch und finden entweder etwas, was entfernt werden kann.
Oder wir gelangen ans Listenende und habend aher shcon eine optimale Liste.



Just for Fun gehen wir hin und speichern uns in der Hinterhand ab, ausgehend von der eingangs erhaltenen Liste C, in welcher Reihenfolge wir welche Elemente aus C entfernt haben.

Das hat den Hintergrund, dass es ja womöglich mehrere "optimale Listen" gibt wovon Manche kürzer sind als Andere. Und kürzer und trotzdem optimal ist unser Ziel.


So könne wir ggbfls. später verschiedene Vorgehensweisen durchprobieren wenn mehrere Elemente in einer Runde zur Löschung zulässig wären, welche Endliste wir am Ende diesen oder jenen Pfades erhalten :)


Langer Rede kurzer Sinn:
Einen solchen Algorithmu würde ich gerne umsetzen.
Wobei mir, je länger ich drüer schreibe, umso mehr klar wird dass vermutlichsich das Ganze recht easy in Excel darstellen liesse und ein passendes Java programm einfach nur die Exceltabelle immer wieder verändert.
 

KonradN

Super-Moderator
Mitarbeiter
Wieso brauchst Du alle Möglichkeiten? Egal ob 6 oder e Elemente?

Erstellst Du Dir auch eine Liste mit allen Zahlen, wenn Du irgendwas mit einem Integer machen willst? Und einfachste Berechnungen mit einem long Wert werden unmöglich - denn die Liste mit 2^64 Einträgen wird endgültig zu hoch.

Hier dürfte also schlicht ein Denkfehler vorliegen. Viele Dinge werden sich vermutlich schlicht mathematisch erledigen lassen. Ansonsten kannst Du, wenn Du so eine Menge durchgehen möchtest, dies jederzeit machen ohne eine Solche Menge zu haben, denn Du kannst sowas Problemlos erzeugen. Du könntest sogar einfach den n-ten Wert bestimmen so man genug drüber nachdenkt.

Das kann man gerne einmal durchspielen - Wenn man das 10er System betrachtet, dann wird es deutlich:

Kannst du den 137ten Wert bestimmen, wenn der erste die 1, der zweite die 2 u.s.w. sein sollte. (Wenn man die Zahl als Tupel auffasst: (1, 3, 7) )
Was machst Du? Die Ziffern sind ja nur im 10er System die Ziffern. im Dualen System sieht die der Rechner nicht. Du rechnest mit Division und Reminder die jeweilige Stelle aus.

Das geht prinzipiell jetzt genau so, nur eben ändern sich zwei Dinge:
a) Wir haben für jede Stelle nicht die gleiche Anzahl Möglichkeiten. Diese verändert sich. Bei der ersten Stelle haben wir 49 Möglichkeiten, dann 48, .....
b) Der genaue Wert verändert sich in Abhängigkeit der vorherigen: Wenn die Berechnung an der ersten Stelle eine 1 ergibt, dann würde das bei der zweiten Stelle eine 2 sein, da die 1 schon vergeben wurde. Wert <= dem aktuellen Wert ist da wichtig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
J Frage zu System.getproperties. Allgemeine Java-Themen 60
sascha-sphw Erste Schritte Unit und Integration-Tests im Java Modul System Allgemeine Java-Themen 10
F Frage zu System.in Allgemeine Java-Themen 3
E System property setzten Allgemeine Java-Themen 8
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
O Beziehung System.exit(x) <>Errorlevel Allgemeine Java-Themen 2
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
F System Tray Menubutton ActionListener Allgemeine Java-Themen 5
H Im Tiled-Map-System ein Item anklicken Allgemeine Java-Themen 0
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
D System.arraycopy verhält sich seltsam Allgemeine Java-Themen 1
C Login System Allgemeine Java-Themen 19
A BufferedReader ohne System.in Allgemeine Java-Themen 9
VfL_Freak JDK installieren System-Property "user.dir" Allgemeine Java-Themen 6
J System.arraycopy ergibt anderes Resultat als for-loop Allgemeine Java-Themen 4
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
D Java System.out::println Allgemeine Java-Themen 1
D Methoden Java Applikation Die System Auslastung optimieren ? Allgemeine Java-Themen 7
S Ist Java ein geschlossenes System? Allgemeine Java-Themen 2
L Erste Schritte Suche Java Wiki System? Allgemeine Java-Themen 5
chuxXo System/JLayer Volume ändern Allgemeine Java-Themen 0
Neumi5694 System.out und System.err umleiten - NICHT im Quelltext Allgemeine Java-Themen 4
X System.out/err(Die Console) in JTextArea ausgeben Allgemeine Java-Themen 2
S Best Practice System.arrayCopy verändert Ziel-Array Allgemeine Java-Themen 2
A Methoden Der Sinn von system.out.print(); Allgemeine Java-Themen 9
A System freezes when trying to run external command from Java with wait for Allgemeine Java-Themen 3
A Java | Login-System Allgemeine Java-Themen 3
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
Joew0815 Best Practice Wie am besten Plugin-System erstellen? Allgemeine Java-Themen 12
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
F Benachrichtigungs-System Webapp Java Servlet Allgemeine Java-Themen 10
M collection persistence system Allgemeine Java-Themen 4
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
D System.out's in String speichern. Allgemeine Java-Themen 2
H Interpreter-Fehler ArrayIndexOutOfBoundsException bei System.arraycopy() Allgemeine Java-Themen 3
M System herausfinden Allgemeine Java-Themen 6
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
G java.exe in System 32. Hilfe!!! Allgemeine Java-Themen 8
R Methoden Tag System Problem Allgemeine Java-Themen 3
J System.out im GUI anzeigen Allgemeine Java-Themen 3
N System.exit(0/1) Allgemeine Java-Themen 3
F System.out.println mit log4j ersetzen Allgemeine Java-Themen 10
D System.LoadLibrary(..) - Programm stürzt ab Allgemeine Java-Themen 2
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
D Listener auf System.out.err / System.out.println Allgemeine Java-Themen 5
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
Kr0e User management system Allgemeine Java-Themen 2
S Java Programm -System Neustart überleben? Allgemeine Java-Themen 3
Rudolf Wann System.exit und wann dispose? Allgemeine Java-Themen 9
ruutaiokwu System.out auf files umlenken in log4j.xml Allgemeine Java-Themen 4
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
agent47 Plugin System Verständnisfrage Allgemeine Java-Themen 6
M Wie externe System-Ressourcen zwangsweise freigeben Allgemeine Java-Themen 2
E Durch System.in.read() blockierten Thread stoppen Allgemeine Java-Themen 10
P System.out im Eclipse plugin Allgemeine Java-Themen 4
C File System Watcher Allgemeine Java-Themen 2
S Verhalten von System.getenv() in Ubuntu / Linux Allgemeine Java-Themen 12
A Problem mit System.getProperty(...) Allgemeine Java-Themen 5
D System.loadlibrary funktioniert nicht Allgemeine Java-Themen 6
H Event ähnliches System Allgemeine Java-Themen 20
Dissi Gammawerte des Grafiktreibers / System ändern? Allgemeine Java-Themen 3
M Plugin-System Allgemeine Java-Themen 4
A NullPointer bei System.getProperty("file.seperator") Allgemeine Java-Themen 4
R System.out oder System.err? Allgemeine Java-Themen 10
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
K System.exec() Programm mit mehreren Parametern Allgemeine Java-Themen 8
G unerklärliches System.out Allgemeine Java-Themen 3
M System.setProperty("javax.net.ssl.trustStore", "mykey.pkx"); Allgemeine Java-Themen 1
T System Preferences + LInux (Ubuntu) Allgemeine Java-Themen 8
G OutputStream to System.out Allgemeine Java-Themen 35
J Wo werden die System properties gespeichert Allgemeine Java-Themen 12
C JSR295 in Produktiven System zu empfehlen? Allgemeine Java-Themen 3
B System CPU Zeit / Last auslesen Allgemeine Java-Themen 2
G Bringt es etwas System.gc() nach großen Aufgaben aufzurufen? Allgemeine Java-Themen 2
T Feststellen ob System-Konsole verfügbar Allgemeine Java-Themen 2
L remote debugging of a multi threaded system Allgemeine Java-Themen 2
F Probleme mit eigenem Plugin-System Allgemeine Java-Themen 3
L System.exit Allgemeine Java-Themen 3
G System.out und String machen was anderes Allgemeine Java-Themen 5
G System.out im window h.inein bringen? Allgemeine Java-Themen 8
A System.in pipen Allgemeine Java-Themen 3
P System.getProperty zu Classloader Allgemeine Java-Themen 21
I Am System angemeldeten Benutzer abfragen Allgemeine Java-Themen 11
E System.out umleiten Allgemeine Java-Themen 2
S system.out und system.err einer Methode in Datei schreiben. Allgemeine Java-Themen 7
S System Informationen auslesen. Allgemeine Java-Themen 3
N Thread und System.out.print() Allgemeine Java-Themen 2
K Kann man System.out in eine Datei speichern? ähnlich wie log Allgemeine Java-Themen 7
B Native DLL zweimal laden: System.load(sPath); Allgemeine Java-Themen 5
P System.getProperty("user.dir") Allgemeine Java-Themen 10
K Abfrage ob JRE oder JDK auf System installiert ist. Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
N Plugin-System: Klassen über String laden Allgemeine Java-Themen 3
O System.nanoTime() einheitlichen Wert auf mehreren Rechnern? Allgemeine Java-Themen 9
T System-Monitoring in Echtzeit Allgemeine Java-Themen 2
E System.out.println Allgemeine Java-Themen 5
G Umrechnen von grossen Zahlen ins Hex-System Allgemeine Java-Themen 3
G System.out.println(is.getClass().getName()); Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben