| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| catweazle 
 
 
 Anmeldungsdatum: 13.02.2016
 Beiträge: 6
 
 
 | 
			
				|  Verfasst am: 13.02.2016, 19: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: 1048
 Wohnort: Niederbayern
 
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| catweazle 
 
 
 Anmeldungsdatum: 13.02.2016
 Beiträge: 6
 
 
 | 
			
				|  Verfasst am: 13.02.2016, 21: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: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 13.02.2016, 22: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, 08: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: 2530
 Wohnort: Hofen SH (Schweiz)
 
 | 
			
				|  Verfasst am: 14.02.2016, 20: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, 10:15    Titel: |   |  
				| 
 |  
				| Danke für deine Hilfe.  _________________
 Grüße von Catweazle
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		|  |