Skip to content

possible logic error in 60_mastermind #611

Closed

Description

@AnthonyMichaelTDM

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):

1010 FOR X=1 TO P
1020 GOSUB 3500
1030 IF I(X)=0 THEN 1070
1035 GOSUB 6500
1040 GOSUB 4000
1050 GOSUB 4500
1060 IF B1<>B OR W1<>W THEN I(X)=0
1070 NEXT

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 to 1060 IF B1>B OR W1>W THEN I(X)=0 which, as compared to 1060 IF B1>B OR W1>W THEN I(X)=0, makes the computer a bit more powerful, and actually able to win with some consistency

note: 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

Activity

  1. changed the title [-]possible logic error in 66_mastermind[/-] [+]possible logic error in 60_mastermind[/+] on Mar 7, 2022
  2. AnthonyMichaelTDM commented on Mar 7, 2022

    @AnthonyMichaelTDM
    ContributorAuthor

    as promised #613

  3. coding-horror commented on Mar 7, 2022

    @coding-horror
    Owner

    This is great -- let's be sure it is in the readme.md for the project as well!

  4. AnthonyMichaelTDM commented on Mar 7, 2022

    @AnthonyMichaelTDM
    ContributorAuthor

    I'll write something up later today

  5. AnthonyMichaelTDM commented on Mar 7, 2022

    @AnthonyMichaelTDM
    ContributorAuthor

    how should I go about doing that @coding-horror, there seem to be multiple precedents:

    • a note saying when and what was patched (as in 02_amazing)
      or
    • revert the change to the source and add a note detailing what the issues is and how future implementers should fix it (as in 84_super_star_trek)
  6. coding-horror commented on Mar 8, 2022

    @coding-horror
    Owner

    Mainly I think the note should be in the readme.md in the game folder under implementation notes heading.. that seems like the best place?

  7. AnthonyMichaelTDM commented on Mar 8, 2022

    @AnthonyMichaelTDM
    ContributorAuthor

    Right, but which would you prefer, documenting what was fixed, or saying what should be fixed

  8. coding-horror commented on Mar 8, 2022

    @coding-horror
    Owner

    both, if you have time! 🙏

  9. AnthonyMichaelTDM commented on Mar 8, 2022

    @AnthonyMichaelTDM
    ContributorAuthor

    sure, does that ^ look good?

  10. AnthonyMichaelTDM commented on Mar 10, 2022

    @AnthonyMichaelTDM
    ContributorAuthor

    well i think that settles it, issue is fixed so no use keeping this issue open

  11. jnellis commented on Apr 1, 2022

    @jnellis
    Contributor

    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.

    NOW I GUESS.  THINK OF A COMBINATION.
    HIT RETURN WHEN READY:?
    MY GUESS IS: WB  BLACKS, WHITES ? 1,0
    MY GUESS IS: BB  BLACKS, WHITES ? 0,0
    MY GUESS IS: WB  BLACKS, WHITES ? 1,0
    MY GUESS IS: WW  BLACKS, WHITES ? 2,0
    I GOT IT IN  4  MOVES!
    

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions