```##.mmind ⎕A[?4⍴6]                           ⍝ Mastermind or "cows and bulls".

Reima Naumanen provides this one-liner to play Mastermind (or "cows and bulls").

The rules of the game are:

- The  machine  chooses  a  4-letter code at random from characters A B C D E F.
Letters in the code may be repeated, so examples might be: ABDF, FFAB, BBBB,··

- You try to guess the combination by suggesting a 4-letter code.

- The  machine  responds  to your guess by reporting a "hint" of how many "cows"
and "bulls" you scored:

A bull (*) is a correct letter in its correct position.
A cow  (+) is a correct letter in the wrong position.

Note that the order and position of the *s and +s in the hint has no signif-
icance;  for example, **+ means that two of the letters (not necessarily the
first two) are in the correct position and that a further one is present but
in the wrong position.

For  example,  if  the code is ABBA, then the following guesses would elicit
hints:

code:       ABBA    ABBA    ABBA    ABBA    ABBA    ABBA    ABBA    ABBA
guess:      EACD    CDEF    BACD    AAAD    BAAB    BABA    AAAA    ABBA
hint:       +               ++      *+      ++++    **++    **      ****

- Based  on  the  hints, you try repeated guesses until you score 4 bulls (****)
and the game finishes.

- The aim of the game is to guess the hidden code in as few moves as possible.

For example, if the code were ADEA, a game might look like this:

mmind ⎕A[?4⍴6]
FECF                        1st guess
+                               0 bulls 1 cow
BABC                        2nd guess
+                               1 cow
EBDB                        3rd guess
++                              2 cows
DDFB                        4th guess
*                               1 bull
****                            4 bulls! (osuu oikein)

Note  that  while  "official"  Mastermind  uses 4 letters chosen from 6, Reima's
version works with any number chosen from any number. Try: mmind ⎕a[5?9], etc.

Technical notes:

Remarkably, the game can be both programmed and invoked by entering just 77 key-
strokes (including the terminating _Return_) into a clear session!

{'*'∨.≠(⍴⍵)↑⎕←'*+'/⍨⍵{(⍺+.=⍵),⍺{+/⊃⌊/+/¨(⊂∪⍺)∘.=¨(⍺≠⍵)∘/¨⍺ ⍵}⍵}⍞:∇⍵}⎕A[?4⍴6]

If we eschew codes with repeated letters, this number drops to 55!

{'*'∨.≠(⍴⍵)↑⎕←'*+'/⍨⍵{(⍺+.=⍵),+/(⍺∊⍵)>⍺=⍵}⍞:∇⍵}⎕A[5?6]

Veli-Matti  Jantunen  suggests  this version, which copes with wrong-length ans-
wers:

{⍵{⎕←(+/¨<\(⍵=⍺)(⍵∊⍺))/'*+' ⋄ ⍺≢⍵}(⍴⍵)↑⍞~' ':∇ ⍵}⎕A[?4⍴6]

Alternatively,  as  Reima says, you can make a human opponent sweat by using the
computer to help in guessing:

At first 1296 possible codes:

p←4{⎕IO←0⋄ ↓⎕a[⍉(⍺⍴⍵)⊤⍳⍵*⍺]}6

Say ABCC and hint is 1+1, then there are about 230 codes left:

{⍵⊃⍨?⍴⍵}p←p/⍨11=p{10⊥(⍺+.=⍵),⍺{+/⊃⌊/+/¨(⊂∪⍺)∘.=¨(⍺≠⍵)∘/¨⍺ ⍵}⍵}¨⊂'ABCC'
CBBF

Say CBBF and there'll be 46 left

{⍵⊃⍨?⍴⍵}p←p/⍨ 1=p{10⊥(⍺+.=⍵),⍺{+/⊃⌊/+/¨(⊂∪⍺)∘.=¨(⍺≠⍵)∘/¨⍺ ⍵}⍵}¨⊂'CBBF'
ACAA

Say ACAA and get 3+0 so

{⍵⊃⍨?⍴⍵}p←p/⍨30=p{10⊥(⍺+.=⍵),⍺{+/⊃⌊/+/¨(⊂∪⍺)∘.=¨(⍺≠⍵)∘/¨⍺ ⍵}⍵}¨⊂'ACAA'

There will be 4 codes left. A Lucky quess ends the game:

ACAE

References:

Mayer,A., "Cows and Bulls", Vector 10.1, July 1993.
http://www.vector.org.uk/archive/v101/mayer101_39.htm

Back to: contents

Back to: Workspaces
```