20.02.2023, 11:08 (Dieser Beitrag wurde zuletzt bearbeitet: 20.02.2023, 11:08 von schauan.)
Hallöchen,
Zitat:(Auch im Originalbild haben nicht alle Spalten 5 Farben.)
Hatte ich anfangs auch gedacht, siehe mein Bild... Also, ich habe jetzt nochmal und nochmal drüber geschaut, ich sehe überall 5. (Bild in #1) Orange ist etwas tricky, wenn Sterne drauf liegen.
Bei anderen Tafeln, die ich bis jetzt gesehen habe, waren ebenfalls in jeder Spalte alle Farben enthalten. Falls das so ist, wäre die maximale Höhe 3 Felder. Meine "Beobachtung" kann aber auch rein zufällig sein.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Zitat:Da ich leider gesundheitlich sehr angeschlagen bin, komme ich zur Zeit nicht dazu eure Vorschläge zu testen oder umzusetzen.
Da wäre mangelndes Interesse doch schöner gewesen. Gute Besserung.
Hier mal die umgebaute Version. Denke die könnte auch in älteren Excel laufen. Ich habe mal noch die 6er Reihen(xxxxxx) raus genommen. In den Proben wurden Lösungen in 1 - 120s gefunden. Einmal keine. Dann einfach neu Versuchen
Auch ich habe das Programm so umgestellt, dass jetzt in jeder Spalte 5 Farben sind.
Um die Zeiten ein wenig zu reduzieren habe ich die zufällige Zuordnung der Kettenlängen ein wenig angepasst. A) Über den benannte Bereiche "MaxLS" versuche ich möglichst frühzeitig Kettenlängen zu nutzen. 1. ZB sollen möglichst 3 Ketten der Länge 6 in den ersten 4-6 Spalten beginnen. Das ändert nichts da ansonsten 3 Ketten in den Spalten 9-11 enden (was gespiegelt das gleiche ist). 2. ZB sollen möglichst 3 Ketten der Länge 1 in den ersten 11-12 Spalten beginnen, damit sich am Ende nicht zuviele kurze Ketten ballen. B) Über den benannte Bereiche "MinLS" versuche ich möglichst Kettenlängen nicht zu früh einzusetzen. ZB. Vor der 12.Spalte noch mindestens 2 Ketten der Längen 1 und 2 zu haben.
Trotzdem findet mein Algorithmus schneller eine gültige Lösung, wenn durch die Zufallsprozesse zu Beginn nicht zuviele kurze Ketten genutzt wurden. Das kann dazu führen, dass in der angezeigten Lösung zum Ende sehr viele kurze Ketten eingesetzt werden. In den Zellen J12:J41 wird angezeigt in welcher Spalte die jeweilige Kette beginnt. Ich habe hier kein zusätzliches Auswahlkriterium eingebaut, da du selbst entscheiden kannst wann dir das Muster noch gefällt.
@Elex Ich weis nicht wie zeitlich aufwendig deine Prüfung, ob eine benachbarte Zelle die gleiche Farbe hat aber zu einer anderen Kette gehört, ist. Sie muss aber sehr häufig durchgeführt werden. Da du nach meinem Verständnis auch keine zwei Ketten der gleichen Farbe in einer Spalte zulässt und die Spalten von links nach rechts füllst, reicht es doch nur die linke benachbarte Zelle und nur wenn ich in der Startspalte der aktuellen Kette bin zu prüfen.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
z.B. kann A1=1 -> A2,B2=2 sein. Jetzt hat die nächste Kette(Start A3) und alle Varianten für Ende offen. Auch Ende in B2. Somit Wachsen auch nach links möglich.
Code:
____|A|B|C| 1|1|3|3| 2|2|2|3| 3|3|3|3|
Zitat:nur die linke benachbarte Zelle und nur wenn ich in der Startspalte der aktuellen Kette bin zu prüfen
Leider ist die Prüfung in alle Richtungen nötig. A1 füllt zufällig bis D2 A2 bis B4 A3 macht bis A4 und B3 A5 als einer bleibt. A6 kann jetzt 1, 2, 3, 5 als Startfarbe haben. Bei A6 könnten 1, 2, 3 aber nur noch nach rechts, weil A7 dann 5 sein muss. Ab B6 kann dann 1, 3 nach oben oder unten. 2 kann nur nach unten wachsen.
sorry, da habe ich nicht genau hingeschaut. Die Aussage "keine zwei Ketten der gleichen Farbe in einer Spalte" ist für deine Lösung nicht richtig, daher vergiss meine Bemerkung.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
22.02.2023, 14:51 (Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2023, 14:52 von Elex.)
Wenn ich meinen Code nicht gleich so kommentiert hätte, würde ich wohl auch nicht mehr wissen was da wie läuft. ;-) Schön dass du es Dir angesehen hast. Mich in deinen Ansatz rein zu denken werde ich wohl vorerst lassen. Evtl. mal wenn viel Zeit ist.