Hoi
Momenteel ben ik bezig voor een practicum om mastermind te schrijven in haskell.
Dit lukt heel aardig, en eigenlijk is alle functionaliteit al geimplementeerd.... op 1 ding na.
Wiki quote over het doel:
).
Mijn huidige idee is als volgt (waarbij solution en guess allebei een Int lijst zijn):
neem de lengte van de intersectie van solution en guess en trek daar black vanaf.
In haskell:
black is de functie om het aantal goed geplaatste pionnetjes te berekenen. Hier trek ik dat ervanaf om te zorgen dat de pionnen die wel goed geplaatst zijn niet mee worden gerekend.
Dit werkt prima, maar heeft een groot manco.
Stel he, ik heb als guess: [1,1,2,3] en als solution [8,5,1,7]. Nu levert de intersection [1,1] op en dus een lengte van 2 . Dat is incorrect.
Als ik de intersectie van solution op guess doe krijg je hetzelfde probleem maar dan in omgedraaide zin.
Ik weet niet hoe ik dit 'probleem' nou moet uitdrukken; kan iemand me daar bij helpen?
Een mogelijkheid is om als een getal gevonden is in beide lijsten is het uit de solution lijst te verwijderen. Probleem is dat ik dan niet meer met intersect kan werken, maar een voor een de guess lijst door moet itereren.
Momenteel ben ik bezig voor een practicum om mastermind te schrijven in haskell.
Dit lukt heel aardig, en eigenlijk is alle functionaliteit al geimplementeerd.... op 1 ding na.
Wiki quote over het doel:
ik wil de witte pinnetjes goed berekenen, en vraag me af wat daar nou een goede strategie voor is in haskell. Ik wil het eerst in woorden uitdrukken en daarna omzetten naar een stukje code; ik vraag daarom ook geen oplossingen in code , alleen wat hints of ideeen. (ik moet er zelf nml ook wat van lerenDe codemaker kiest in het geheim vier code-pionnen en plaatst deze in een gekozen volgorde achter het zichtschermpje. Het is toegelaten om twee of meer pionnen in dezelfde kleur te kiezen. De codemaker heeft de keuze uit zes verschillende kleuren. Dit is de verborgen code die de codebreker moet gaan ontrafelen.
In zijn beurt plaatst de codebreker vier code-pionnen naar keuze in de eerste lege rij. Nu geeft de codemaker met de sleutel-pinnen het resultaat:
* met zwarte pinnen: hoeveel kleuren staan op de juiste positie?
* met witte pinnen: hoeveel kleuren komen wel in de code voor, maar staan niet op de juiste positie?
Mijn huidige idee is als volgt (waarbij solution en guess allebei een Int lijst zijn):
neem de lengte van de intersectie van solution en guess en trek daar black vanaf.
In haskell:
code:
1
2
| white [] [] = 0 white solution guess = length (intersect guess solution) - black solution guess |
black is de functie om het aantal goed geplaatste pionnetjes te berekenen. Hier trek ik dat ervanaf om te zorgen dat de pionnen die wel goed geplaatst zijn niet mee worden gerekend.
Dit werkt prima, maar heeft een groot manco.
Stel he, ik heb als guess: [1,1,2,3] en als solution [8,5,1,7]. Nu levert de intersection [1,1] op en dus een lengte van 2 . Dat is incorrect.
Als ik de intersectie van solution op guess doe krijg je hetzelfde probleem maar dan in omgedraaide zin.
Ik weet niet hoe ik dit 'probleem' nou moet uitdrukken; kan iemand me daar bij helpen?
Een mogelijkheid is om als een getal gevonden is in beide lijsten is het uit de solution lijst te verwijderen. Probleem is dat ik dan niet meer met intersect kan werken, maar een voor een de guess lijst door moet itereren.
[ Voor 5% gewijzigd door Boudewijn op 20-09-2007 16:14 ]