Gele letters controleren

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Don1233
  • Registratie: Juni 2016
  • Laatst online: 27-03-2022
Sinds een tijdje ben ik bezig met het woordspelletje Lingo. Je weet wel, dat ene met die woorden en getallen. Nu kom ik daar een heel eind mee met de "foute" en de "goede" letters. Het enige wat nog ontbreekt zijn de "halve" letters.
  • Goede letters: Zijn dus goed geraden voor zowel de plaats als de letter.[G]
  • [i]Controleer ik door te kijken of de gekozen letter op dezelfde plaats in het woord zit.[/i]
  • Halve letters; Zijn wel geraden, zitten in het woord, alleen op een andere plaats. Dit geeft aan hoeveel van dezelfde letter er nog een keer ergens anders in het woord voorkomt. [H]
  • [i]Controleer ik door als het geen "Goede" letter is maar hij zit wel in het woord[/i]
  • Foute letters: Komen helemaal niet in het woord voor.[F]
  • [i]Dat is dan de laatste optie automatisch[/i]
Heb daarvoor 3 array's:
1 voor het te raden woord
2 voor de poging van het te raden woord
3 letter helpen, die bijhoud wat de status is tussen elke gelijke posities van 1 en 2.

Verder heb ik:
Een array van 5x5 voor de te kleuren vakjes (genummerd van 01 tot en met 25)..
Een array van 5x5 voor de in te vullen letters (genummerd van 01 tot en met 25).
Een variable die bijhoud wat de huidige letter is [l]
Een variabele die bijhoud wat de huidige rij is.

Voorbeeld:
Het te raden woord; LINGO.
Je doet een poging met: OODLE
Wat er vervolgens gebeurd is dat alle 2 de "o" geel word, omdat die dus ergens anders in het woord voorkomen. De derde array word ook [H][H][F][H][F].

Wat ik geprobeerd heb:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
for (int i = 0; i < 5; i++)
{
    if (l[current_line, i].Text == mistery_word[i])
    {
        continue;
    }
    for (int j = 0; j < 5; j++)
    {
        if (l[current_line, i].Text == mistery_word[j])
        {
            if (letter_helper[j] == "H")
            {
                try_letters[loop_word] = l[current_line, loop_word].Text;
                break;
            }
           else if (mistery_word[j + 1].IndexOf(l[current_line, j].Text) >= 0)
            {
                continue;
            }
            else
            {
                letter_helper[j] = "F";

                try_letters[loop_word] = l[current_line, loop_word].Text;
                break;
            }
        }
    }
}


Dit resulteerde dat er GEEN gele letters meer tevoorschijn kwamen, dus dat is helaas niet wat de bedoeling was.

Vraag:
Hoe kan ik een check laten uitvoeren die controleert bij het 'kleuren' van de letters of een "[H]" ook nog wel zo is of dat deze niet nog een keer in het woord voorkomt en dus er voor zorgd dat de eerste "o" geel maakt, maar de tweede blauw (fout) doordat deze niet ook nog in het woord zit?

Gebruik visual studio voor de code en C# als programmeertaal.

[ Voor 31% gewijzigd door RobIII op 09-02-2018 22:11 . Reden: Code tags toegevoegd, irrelevante code verwijderd. ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Als je een match gevonden hebt, tik 't ding dan uit de array. Dus als je L I N G O hebt en de eerste is een O. Tik die O dan uit de array. Dan heb je voor de 2e letter nog L I N G over.

Mogelijk zijn er nog wel complexere manieren om 't te doen, maar dit is simpel, en werkt :)

Acties:
  • 0 Henk 'm!

  • Don1233
  • Registratie: Juni 2016
  • Laatst online: 27-03-2022
TERW_DAN schreef op vrijdag 9 februari 2018 @ 21:19:
Als je een match gevonden hebt, tik 't ding dan uit de array. Dus als je L I N G O hebt en de eerste is een O. Tik die O dan uit de array. Dan heb je voor de 2e letter nog L I N G over.

Mogelijk zijn er nog wel complexere manieren om 't te doen, maar dit is simpel, en werkt :)
Gaat dat ook werken als ik DOLEO probeer? Want dan moet dus de eerste 'o' fout zijn want de laatste is reeds goed geraden..

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ja, dat gaat ook werken als je het goed doet :)

Stap 1 : Zoek 1 voor 1 naar alle identieke letters en haal die uit de array
Stap 2 : Kijk in de overgebleven array 1 voor 1 naar de overgebleven letters.

Waar dit soort dingen meestal fout gaat is dat mensen met regexen etc alles in 1x willen checken terwijl het gewoon 1 voor 1 bekeken moet worden en expliciet niet als totaal.

Je hebt gewoon een aantal stappen die je moet doorlopen, neem geen short-cuts maar neem gewoon alle stappen en je hebt het in code staan.

Of schrijf voor jezelf gewoon eens op hoe je het zelf bepaalt en werk dat in code uit.

[ Voor 7% gewijzigd door Gomez12 op 09-02-2018 21:27 ]


Acties:
  • 0 Henk 'm!

  • Don1233
  • Registratie: Juni 2016
  • Laatst online: 27-03-2022
Op dit moment heb ik wel dat ik controleer bij het kleuren via de Letter Helper. Dus een H word Geel, een G word Rood en een F word blauw. Dan zou ik dus verder moeten kijken als het een "H' is.

Dan zou je dus 2 mogelijkheden krijgen:
de gele is echt geel, hij komt nog een keer voor op een andere plek.
de gele is niet geek, hij komt niet nog een keer voor op een andere plek.

[ Voor 32% gewijzigd door Don1233 op 09-02-2018 21:34 ]


Acties:
  • +3 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
@Don1233 Wil je voortaan gewoon je code in het topic plaatsen a.u.b.? We hebben gewoon code tags en als vandaag-of-morgen pastebin (of welke site dan ook) besluit er mee te stoppen is jouw topic niet opeens meer nutteloos voor mensen die met eenzelfde vraag worstelen.

Probeer voortaan ook je code te beperken tot 't hoognodige; heel dat gedoe met soundplayers, bitmaps etc. is niet relevant voor je vraag van algoritmische aard. Als je een probleem aan mensen voor wil leggen moet je hen helpen jou te helpen; je wil ze dus niet vermoeien met irrelevante details. En in 9 v.d. 10 gevallen blijkt dat als je de moeite neemt je probleem te reduceren tot een klein aantal regels code om 't probleem te reproduceren en voor te leggen aan anderen dat je dan opeens een inzicht krijgt dat je eerder niet had en daarmee jezelf al helpt voordat je een topic opent ;)

[ Voor 49% gewijzigd door RobIII op 09-02-2018 22:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Don1233
  • Registratie: Juni 2016
  • Laatst online: 27-03-2022
RobIII schreef op vrijdag 9 februari 2018 @ 22:09:
@Don1233 Wil je voortaan gewoon je code in het topic plaatsen a.u.b.? We hebben gewoon code tags en als vandaag-of-morgen pastebin (of welke site dan ook) besluit er mee te stoppen is jouw topic niet opeens meer nutteloos voor mensen die met eenzelfde vraag worstelen.
Ja! Thanks. Ik was daar al naar op zoek, maar ik kon het zo even snel niet vinden...

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Het antwoord is: LINGO
Iemand typt een woord: DOLEO
Je hebt een result array [0, 0, 0, 0, 0] (0 = false, 1 = verkeerde plek, 2 = goed)
Loop 2x door het woord:
  1. stop de goede in de array, en haal de letter uit het antwoord: LING_
    in dit geval de laatste: array[4] = 2
  2. stop nu de verkeerde in de array, en haal de letter uit het antwoord: _ING_
    in dit geval de derde: array[2] = 1
Zo weet je zeker dat de eerste O niet gemarkeerd wordt als "verkeerde plek"

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
DJMaze schreef op vrijdag 9 februari 2018 @ 22:24:
Het antwoord is: LINGO
Iemand typt een woord: DOLEO
Je hebt een result array [0, 0, 0, 0, 0] (0 = false, 1 = verkeerde plek, 2 = goed)
Loop 2x door het woord:
  1. stop de goede in de array, en haal de letter uit het antwoord: LING_
    in dit geval de laatste: array\[4] = 2
  2. stop nu de verkeerde in de array, en haal de letter uit het antwoord: _ING_
    in dit geval de derde: array\[2] = 1
Zo weet je zeker dat de eerste O niet gemarkeerd wordt als "verkeerde plek"
Of ik snap jouw methode niet, of het is essentieel dat je 2x (bolding all mine) door het woord loopt.
Met 1 loop zie ik geen logica waarom stap 1 voor stap 2 zou gebeuren (of je moet van achter naar voren gaan loopen, maar dan draai je het probleem alleen maar om :) ) en dan maak je het probleem alleen maar erger.
Want dan krijg je (als je oplopend gaat loopen): [0,1,1,0,0]
Je moet expliciet de 1e x alleen maar gaan voor de goede matches en van wat je daarna nog overhoudt ben je
geinteresseerd of het op de verkeerde plek staat.

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@Gomez12 correct, ik had de "2x" niet getypt ;)
Maar zou TS niet ook zelf kunnen nadenken met logica om er achter te komen? (jij kwam er immers ook achter)

[ Voor 11% gewijzigd door DJMaze op 10-02-2018 13:12 ]

Maak je niet druk, dat doet de compressor maar

Pagina: 1