Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
catweazle
Anmeldungsdatum: 13.02.2016 Beiträge: 6
|
Verfasst am: 13.02.2016, 20:33 Titel: logisches Problem |
|
|
Hallo zusammen,
ich stehe gerade logisch ein wenig auf dem Schlauch und würde gerne eure Hilfe in Anspruch nehmen.
Ich bastele gerade an Mastermind und kriege das mit den weißen Pins nicht hin. Ich habe zwei Arrays, items(4) und user(4), beide sind String-Arrays mit 5 Zeichen. Items enthält die vier zufällig gewählten Farben und user die vom User eingegeben. Die Überprüfung darauf, ob die richtige Farbe an der richtigen Stelle sitzt, ist kein Problem, wohl aber die richtige Farbe an der falschen Stelle.
Hat jemand von euch eine Idee, wie ich das am besten machen kann? Ich danke euch für die Hilfe.
Grüße von Catweazle |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
|
Nach oben |
|
|
catweazle
Anmeldungsdatum: 13.02.2016 Beiträge: 6
|
Verfasst am: 13.02.2016, 22:24 Titel: |
|
|
Hallo alwin,
danke. Das zu verstehen, was du da gemacht hast, wird wohl eine Weile dauern,fürchte ich. Das Programm drumherum ist bei mir schon fast fertig. Mir fehlen nur noch wenige Teile, u.a. eben das Überprüfen auf die weißen Pins. _________________ Grüße von Catweazle |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 13.02.2016, 23:34 Titel: |
|
|
Mal so als Grundidee, ob das dann unbedingt die beste ist, kann man sich ja dann überlegen:
Code: | CONST WEISS = 1, SCHWARZ = 2, FARBLOS = 0
DIM AS INTEGER anzWeiss, anzSchwarz, aktuelleFarbe
FOR itemCount AS INTEGER = 0 TO 4
aktuelleFarbe = FARBLOS
FOR userCount AS INTEGER = 0 TO 4
IF item(itemCount) = user(userCount) THEN ' Übereinstimmung gefunden
IF itemCount = userCount THEN ' richtige Stelle
aktuelleFarbe = SCHWARZ
EXIT FOR
ELSE ' falsche Stelle
aktuelleFarbe = WEISS
END IF
END IF
NEXT
IF aktuelleFarbe = SCHWARZ THEN
anzSchwarz += 1
ELSEIF aktuelleFarbe = WEISS THEN
anzWeiss += 1
END IF
NEXT |
Grundidee: Jedes item-Feld wird mit jedem user-Feld verglichen. Ist die Farbe an der richtigen Stelle, wird die innere Schleife verlassen, um die Markierung als richtige Stelle nicht später durch eine weitere Übereinstimmung an falscher Stelle wieder kaputt zu machen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
catweazle
Anmeldungsdatum: 13.02.2016 Beiträge: 6
|
Verfasst am: 14.02.2016, 09:00 Titel: |
|
|
Hallo nemored,
danke für deine Mühe. Das klappt prima. Lediglich die Schleifen müssen von 0 bis 3 laufen, weil es nur 4 Farben gibt.
Das nächste Problem wird dann sein, doppelte Farben schon beim Zusammenstellen auszuschließen. Mal sehen, wie das dann geht. Erst einmal danke. _________________ Grüße von Catweazle |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 14.02.2016, 21:41 Titel: |
|
|
Von mir ein Projekt in diese Richtung:
http://www.dreael.ch/Deutsch/Download/Mastermind-Knacker.html
Besonderheit: Rollentausch! D.h. PC "knobelt" an der Lösung, Du gibst die Antworten.
Sonst zu Deinem Problem: # schwarze Stifte (Platzrichtige) ist trivial: Jedes Element des Versuchs mit Lösung vergleichen und zählen.
Zu # weisse Stifte: Du musst zuerst # weisse + # schwarze (deren Summe) bestimmen. Algorithmus: Array so gross wie die Anzahl Farben, in dieses die Anzahl Farben. Danach Summe der Minimum bilden.
Beispiel: Farbensatz rot/gelb/grün/blau
Lösung: rot/gelb/rot/gelb/grün
Versuch des Spielers: blau/gelb/rot/grün/blau
# schwarze Stifte = 1 hier (nur rot in der Mitte übereinstimmend)
# schwarze+weisse Stifte: Farben zählen
Lösung: rot=2, gelb=2, grün=1, blau=0
Spielerversuch: rot=1, gelb=1, grün=1, blau=2
Code: | ' Pseudocode
s = 0
For Each i In Farben
s += min(anzInVersuch(i), anzInLoesung(i))
Next |
in diesem Fall also:
#S+W = min(2,1)+min(2,1)+min(1,1)+min(0, 2)
= 1 + 1 + 1 + 0 = 3
Somit # weisse Stifte = 3 - 1 = 2 => Du wirst für dieses Beispiel 2x weiss + 1x schwarz stecken müssen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
catweazle
Anmeldungsdatum: 13.02.2016 Beiträge: 6
|
Verfasst am: 17.02.2016, 11:15 Titel: |
|
|
Danke für deine Hilfe. _________________ Grüße von Catweazle |
|
Nach oben |
|
|
|