Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wordle (ähnlich Mastermind) + gleiche Buchstaben

Forumthread: Wordle (ähnlich Mastermind) + gleiche Buchstaben

Wordle (ähnlich Mastermind) + gleiche Buchstaben
23.07.2024 15:53:52
KlausF
Hallo Forum,

ich bräuchte mal einen Input zu dem Spiel Wordle, das ich gerne für mich der grauen Zellen wegen mit VBA programmieren möchte. Hier kurz die einfachen Regeln, für die, die es nicht kennen:

- Es gilt ein Wort mit 5 Buchstaben in maximal 6 Versuchen herauszufinden.

- Ein nicht vorhandener Buchstabe wird mit grauem Feld, ein richtig platzierter Buchstabe mit grün unterlegtem Feld und ein vorhandener aber falsch platzierter Buchstabe mit gelbem Feld angezeigt.

Ich habe das mit 2 Schleifen abgearbeitet, was auch gut funktioniert aber leider nicht zu Ende gedacht. Mein Problem: Kommt ein Buchstabe - z.B. „B“ - im Lösungswort nur 1 x vor aber im Lösungsversuch mehr als 1 x, dann werden alle „B“ im Lösungsversuch mit gelb bzw. grün hinterlegt …

Wie lässt sich das am Besten lösen? Komme ich da überhaupt mit meinen Schleifen weiter oder braucht es da einen komplett anderen Ansatz?

171190.xlsm

Danke für jeden Input im voraus!
Gruß
Klaus
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wordle (ähnlich Mastermind) + gleiche Buchstaben
23.07.2024 22:09:16
Oppawinni
Um deine grauen Zellen zu trainieren, sollen wir unsere grauen Zellen anstrengen ?
Das kann ja wohl nicht ganz der Sinn sein.
Überlege, wie du das zu Fuß machst und schreibe dir deine Vorgehensweise auf.
Stichwort: Pseudo-Code
Wenn du das hast, überlegst du, wie du das programmieren kannst.
Ne Lösung abschreiben oder einfach übernehmen strengt deine grauen Zellen doch nicht an.
Anzeige
AW: Wordle (ähnlich Mastermind) + gleiche Buchstaben
23.07.2024 22:55:15
Oppawinni
Vermutlich brauchst du irgend eine Möglichkeit dir zu merken, ob ein Buchstabe deines Lösungswortes schon markiert wurde und den darfst du dann nicht mehr beachten. Ein Array vielleicht ?
Unsere Antworten haben sich überschnitten. o.w.T.
23.07.2024 23:08:29
KlausF
o.w.T.
AW: Wordle (ähnlich Mastermind) + gleiche Buchstaben
23.07.2024 22:57:58
KlausF
Hallo Oppawinni,

danke für Deine Antwort. Um es deutlich zu sagen, ich habe keine fertige Lösung erwartet sondern wie auch geschrieben einen Input! Genau um den Pseudo-Code geht es mir ja, da komme ich derzeit an meine Grenzen. Mein Eindruck war, dass ich mit dem bisherigen Ansatz auf dem Holzweg bin. Aber ich habe eben auch keinen anderen Ansatz gefunden. Das programmieren wollte ich schon selber versuchen.

Aber lass mal, ich sehe schon, dass das hier anscheinend auf Unmut stößt.

Danke nochmal und noch einen schönen Abend
Klaus
Anzeige
AW: Wordle (ähnlich Mastermind) + gleiche Buchstaben
24.07.2024 07:44:19
MCO
Moin Klaus!

Nicht gleich eingeschnappt sein. ;-)

Ist nur nicht ganz einfach einen Lösungsweg zu zeigen ohne die Lösung zu zeigen.
Du hast aber schon genug gelernt, wenn du verstehst was gemacht wird.

Daher schreib ich jetzt auch keine Erklärung für den Code.
Selbst herausfinden darfst du auch , wie eine Eingabe direkt bei Eingabe überprüft wird und wie man zufällig aus der Langen Liste der Worte selbst eines auswählt, ohne sie mühsam in 5 Felder zu schreiben.
Nur so viel: Zufällig eine Zeile im Bereich generieren und die bis zur Lösung in eine Zelle schreiben. Darauf während der Überprüfung referenzieren. L_Wort = sheets(2).cells(Zeile,1)

Hier noch der Code
Sub Vergleich()

Dim x As Single
Dim sp As Single
Dim pos As Single
Dim L_Wort As String
For x = 3 To 7
L_Wort = L_Wort & Cells(14, x)
Next x

Range("Wort1").Interior.Color = RGB(128, 128, 128)

For sp = 1 To 5
If Cells(5, sp + 2).Value = Mid(L_Wort, sp, 1) Then
Cells(5, sp + 2).Interior.Color = RGB(57, 215, 87) 'Grün
Select Case sp
Case 1: L_Wort = "_" & Right(L_Wort, 4)
Case 5: L_Wort = Left(L_Wort, 4) & "_"
Case Else: L_Wort = Left(L_Wort, sp) & "_" & Right(L_Wort, 6 - sp)
End Select

ElseIf InStr(L_Wort, Cells(5, sp + 2).Value) > 0 Then
Cells(5, sp + 2).Interior.Color = RGB(255, 204, 0) 'Gelb

pos = InStr(L_Wort, Cells(5, sp + 2).Value)
Select Case pos
Case 1: L_Wort = "_" & Right(L_Wort, 4)
Case 5: L_Wort = Left(L_Wort, 4) & "_"
Case Else: L_Wort = Left(L_Wort, pos - 1) & "_" & Mid(L_Wort, pos + 1, 5)
End Select
End If
Next sp

End Sub


Anzeige
AW: Wordle (ähnlich Mastermind) + gleiche Buchstaben
24.07.2024 13:20:13
KlausF
Moin :-)
herzlichen Dank erst einmal für den Code - das ist mehr als ich erwartet hatte! Und ich war nicht eingeschnappt, eher stark verunsichert.

Zum besseren Verständnis: Die Beispielmappe habe ich so abgespeckt, dass der Fokus nur auf dieser Frage lag. In der Originalfassung sind Dinge wie Auswahl eines Zufallswortes, Begrenzung der Eingabe auf die richtigen Felder, entsprechende Fehlermeldungen etc. gelöst und eingebracht. Ich möchte später auch 2 Varianten anbieten, einmal dass nur Worte aus der Auswahl Gültigkeit haben (Original Wordle) und einmal, dass auch freie Buchstabenkombinationen geschrieben werden können. Aber das ist noch Schnee von Übermorgen.

Zu Deinem Code: Er macht noch nicht, was er soll. Bei dem voreingestellten Beispiel ABBAU : ABTEI macht er wie bei meinem Code das 2. B in ABBAU gelb, müsste aber grau sein. War das jetzt Absicht wegen des Lerneffekts? :-)

Egal wie die Antwort ausfällt: Nochmals Danke ...!
Lieben Gruß
Klaus
Anzeige
AW: Wordle (ähnlich Mastermind) + gleiche Buchstaben
24.07.2024 14:09:38
MCO
Hallo!

Der Code bezieht sich jetzt immer auf die gewählte Zeile.
Der Fehler in der Färbung lag darin, dass der Buchstabe zum Ersetzen falsch gewählt war

Richtig isses so:
Sub Vergleich()

Dim x As Single
Dim sp As Single
Dim pos As Single
Dim akt_zeile As Single
Dim L_Wort As String
For x = 3 To 7
L_Wort = L_Wort & Cells(14, x)
Next x

akt_zeile = ActiveCell.Row

Range("C" & akt_zeile & ":G" & akt_zeile).Interior.Color = RGB(128, 128, 128)

For sp = 1 To 5
If Cells(akt_zeile, sp + 2).Value = Mid(L_Wort, sp, 1) Then
Cells(akt_zeile, sp + 2).Interior.Color = RGB(57, 215, 87) 'Grün
Select Case sp
Case 1: L_Wort = "." & Right(L_Wort, 4)
Case 5: L_Wort = Left(L_Wort, 4) & "."
Case Else: L_Wort = Left(L_Wort, sp - 1) & "." & Right(L_Wort, 5 - sp)
End Select

ElseIf InStr(L_Wort, Cells(akt_zeile, sp + 2).Value) > 0 Then
Cells(akt_zeile, sp + 2).Interior.Color = RGB(255, 204, 0) 'Gelb

pos = InStr(L_Wort, Cells(akt_zeile, sp + 2).Value)
Select Case pos
Case 1: L_Wort = "_" & Right(L_Wort, 4)
Case 5: L_Wort = Left(L_Wort, 4) & "."
Case Else: L_Wort = Left(L_Wort, pos - 1) & "." & Mid(L_Wort, pos + 1, 5)
End Select
End If
Next sp

End Sub


Gruß, MCO
Anzeige
AW: Wordle (ähnlich Mastermind) + gleiche Buchstaben
24.07.2024 17:41:55
KlausF
Hallo,

vielen Dank für Deine weitere Hilfe! Funzt aber immer noch nicht richtig. Bei z.B. der 2. Zeile MESSE : ABTEI dürfte nur eins der beiden E gelb werden und bei SEELE : ABTEI auch nur eins statt drei.

Aber beim Sinnieren über Deinen Code und die eigentliche Problematik ist mir eine ganz einfache Lösung eingefallen, die sich in meinen alten Code mit nur 2 oder 3 Zeilen einbauen lässt: Ich verändere einfach temporär das Lösungswort! Genauer gesagt suche ich nach Grün und belege die Fundstellen im Lösungswort dann in der Schleife mit einem Platzhalter, z.B. mit "*"

Im vorliegenden Fall wird aus ABTEI dann **TEI. Bei der Suche nach Gelb verfahre ich genauso. Beim ersten Vorkommen von E wird aus **TEI dann **T*I und es kann in der Folge kein weiteres E mehr gefunden werden.

Manchmal brauchen die Dinge einen Umweg und sind am Ende ganz einfach. Ich danke Dir noch einmal herzlich für Deine Unterstützung, die mich letztlich dann auf die richtige Fährte geführt hat ...

Lieben Gruß
Klaus
Anzeige
AW: Worksheetfunction.Countif
24.07.2024 18:39:45
Rolf
Hallo Klaus,

meine Idee:
schau Dir mal die Worksheetfunction Countif an.
Damit kannst Du zählen, wie oft ein Buchstabe in einem Bereich vorkommt.
Du musst die Grün-Prüfung vor der Gelb-Prüfung machen, sonst mach die alles wieder kaputt.
Dann in der Gelb-Prüfung:
Wenn die Anzahl des jeweiligen Buchstabens im Lösungswort grösser gleich der Anzahl in Deinem Wort ist
und die Zellfarbe ist nicht grün, dann färben, sonst nicht.

So, das war nur Input, ohne Code ;-)
versuch das mal umzusetzen!

Gruß Rolf
Anzeige
AW: Worksheetfunction.Countif
24.07.2024 19:22:03
Oppawinni
Ich sagte doch, dass du dir irgendwie merken musst, was schon markiert ist und das dann nicht mehr beachten.
Ich hätte wahrscheinlich zunächst auf Positionsrichtigkeit geprüft und zwar vom Ende der Worte her und hätte im Prüfwort Übereinstimmungen entfernt, statt sie zu ersetzen.
Wenn das Prüfwort (gesuchtes Wort) dann weg ist, ist die Lösung gefunden.
Ansonsten hätte ich halt noch gegen die verbleibenden Buchstaben geprüft, ggf. markiert und auch da Übereinstimmungen eliminiert, bis entweder kein Buchstabe mehr übrig ist, also alle markiert sind, oder alle Buchstaben des geratenen Wortes durchlaufen sind ...
Anzeige
AW: Worksheetfunction.Countif
24.07.2024 21:26:10
KlausF
Moin,

das "irgendwie" war es ja, für das ich keine Idee hatte ...

Dass man statt ersetzen auch einfach entfernen kann ist ein guter Hinweis, das schau ich mir noch mal genauer an. Für mich ist erst einmal wichtig, dass mein vorhandener Code doch brauchbar ist und für ein korrektes Ergebnis nur geringfügig ergänzt werden muss.

Danke,
Klaus
Anzeige
AW: Worksheetfunction.Countif
25.07.2024 00:37:08
Oppawinni
Ich habe das auch nicht wirklich zu Ende gedacht, das war ja eigentlich deine Aufgabe.
Aber hab halt doch auch ein bisschen Code gebaut, wobei ich dein "Rechteck 7" in "Rechteck 1" umgetauft habe....
ja und allen den Rechtecken das gleiche Makro zugewiesen habe...
Kannst ja mal schauen, ob es das tut....


Sub Zeigen_1()

Dim strCaller As String
Dim strTipp As String
Dim strSuchwort As String
Dim lngLineOffset As Long
Dim wksSpiel As Worksheet
Dim rngSpiel As Range
Dim i As Long, j As Long, lngPos As Long

strCaller = Application.Caller

lngLineOffset = Val(Right(strCaller, 1)) - 1

Set wksSpiel = ThisWorkbook.Worksheets("Spiel")
Set rngSpiel = wksSpiel.Range("C4")

'Strings mit Tipp und Suchwort belegen
For i = 0 To 4
strTipp = strTipp & IIf(IsEmpty(rngSpiel.Offset(lngLineOffset, i)), " ", Left(rngSpiel.Offset(lngLineOffset, i), 1))
strSuchwort = strSuchwort & wksSpiel.Range("C14").Offset(0, i)
Next

'Prüfen auf richtiger Buchstabe auf richtiger Position (ggf. grün)
For i = 4 To 0 Step -1
If Mid(strTipp, i + 1, 1) = Mid(strSuchwort, i + 1, 1) Then
rngSpiel.Offset(lngLineOffset, i).Interior.Color = RGB(57, 215, 87)
strSuchwort = Left(strSuchwort, i) & Right(strSuchwort, Len(strSuchwort) - i - 1)
strTipp = Left(strTipp, i) & " " & Right(strTipp, 4 - i)
Else
rngSpiel.Offset(lngLineOffset, i).Interior.Color = RGB(128, 128, 128)
End If
Next

If Len(strSuchwort) > 0 Then
'noch nicht gelöst, prüfen auf richtige Buchstaben (ggf. gelb)
For i = 0 To 4
lngPos = InStr(1, strSuchwort, Mid(strTipp, i + 1, 1), vbTextCompare)
If lngPos > 0 Then
strSuchwort = Left(strSuchwort, lngPos - 1) & Right(strSuchwort, Len(strSuchwort) - lngPos)
rngSpiel.Offset(lngLineOffset, i).Interior.Color = RGB(255, 204, 0)
End If
If strSuchwort = "" Then Exit For
Next
End If

End Sub
Anzeige
AW: Korrektur
25.07.2024 09:07:36
Oppawinni
Hab ich doch auch gleich noch, kurz vor dem Post, einen kleinen Fehler rein gebaut.
statt
Set rngSpiel = wksSpiel.Range("C4")
sollte da stehen:
Set rngSpiel = wksSpiel.Range("C5")
AW: Korrektur
25.07.2024 14:21:04
KlausF
Moin Opawinni,
auch Dir herzlichen Dank, funzt auch prima! Das war insgesamt wesentlich mehr Input als erwartet.

Ein wirklich außergewöhnlich hilfsbereites Forum hier!

Lieben Gruß an alle Helfer
Klaus
Anzeige
AW: Worksheetfunction.Countif
24.07.2024 21:10:33
KlausF
Hallo Rolf,

ja, danke, mit der Worksheetfunction Countif würde ich sicher auch zum Ergebnis gelangen - und es war Input genug ;-)
Dass mit Grün vor Gelb war mir mittlerweile auch schon klar geworden.

Ich denke, ich mache das aber mit dem Platzhalter, da weiß ich genau, wo und wie ich das in meinem bereits vorhandenen Code einbauen muss ...

Danke.
Klaus
Anzeige
Puh - und Frage nochmal auf offen gestellt ...
23.07.2024 18:00:03
KlausF
https://www.herber.de/bbs/user/171190.xlsm

Soll nicht ungeduldig wirken! Aber ich habe jetzt erst gesehen, dass aufgrund meiner Nachträge der Beitrag nicht mehr unter "offen" gelistet wird. Habe lange nicht mehr intensiv mit dem Forum gearbeitet. Bitte um Nachsicht ...
Klaus
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige