-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
possible logic error in 60_mastermind #611
Comments
as promised #613 |
This is great -- let's be sure it is in the readme.md for the project as well! |
I'll write something up later today |
how should I go about doing that @coding-horror, there seem to be multiple precedents:
|
Mainly I think the note should be in the |
Right, but which would you prefer, documenting what was fixed, or saying what should be fixed |
both, if you have time! 🙏 |
sure, does that ^ look good? |
well i think that settles it, issue is fixed so no use keeping this issue open |
I am unconvinced. Here is a 2 color, 2 position game, which is the simplest game that isn't just black or white as a possibility. Here, with this fix, the computer guessed that same guess twice.
I don't see how you were witnessing it throwing up the "you gave inconsistent results" every time unless you had the reporting of black and white pegs backwards. |
while porting 60_mastermind to rust, I came across a peculiar issue, here in mastermind.bas (the flawed logic is present in every other port I looked at too):
this code basically looks through every possible combination,
for all that haven't already been marked as impossible (with previously given player feedback),
it checks whether or not the black and white pins that that combination should get are not-equal to what the previous guess got ... if they are equal, the combination is marked as possible, if they aren't equal then the combination is marked as impossible
the issue is, this almost always will mark the correct answer as impossible, unless its first guess happens to be right
a potential fix (that I can't test but did work in my rust port), is changing that logic from
1060 IF B1<>B OR W1<>W THEN I(X)=0
to1060 IF B1>B OR W1>W THEN I(X)=0
which, as compared to1060 IF B1>B OR W1>W THEN I(X)=0
, makes the computer a bit more powerful, and actually able to win with some consistencynote: it could very well be that I messed something up in my implementation, hence why I'm making this issue, in case people agree that this is a problem I'll be making a PR to fix it that I'll link to in the comments
edit: typo
The text was updated successfully, but these errors were encountered: