Bulls and Cows


Task

Create a four digit random number from the digits   1   to   9,   without duplication.

The program should:

   ask for guesses to this number
   reject guesses that are malformed
   print the score for the guess


The score is computed as:

 The player wins if the guess is the same as the randomly chosen number, and the program ends.
 A score of one bull is accumulated for each digit in the guess that equals the corresponding digit in the randomly chosen initial number.
 A score of one cow is accumulated for each digit in the guess that also appears in the randomly chosen number, but in the wrong position.


Related tasks

   Bulls and cows/Player
   Guess the number
   Guess the number/With Feedback
   Mastermind


rand: first.n: 4 unique map 1..10 => [sample 0..9]
bulls: 0
 
while [bulls <> 4][
    bulls: new 0
	cows: new 0
 
    got: strip input "make a guess: "
    if? or? not? numeric? got
            4 <> size got -> print "Malformed answer. Try again!"
    else [
        loop.with:'i split got 'digit [
            if? (to :integer digit) = rand\[i] -> inc 'bulls
            else [
                if contains? rand to :integer digit -> inc 'cows
            ]
        ]
        print ["Bulls:" bulls "Cows:" cows "\n"]
    ]
]
print color #green "** Well done! You made the right guess!!"