// Bulls and Cows - Written in Frink
println["Welcome to Bulls and Cows!"]
// Put 4 random digits into target array
digits = array[1 to 9]
target = new array
for i = 0 to 3
target@i = digits.removeRandom[]
// Game variables
guessCount = 0
solved = false
while solved == false
{
// Round variables
bulls = 0
cows = 0
// Input guess from player
guess = input["Guess a 4 digit number with numbers 1 to 9: "]
// Valid Guess Tests. Set validGuess to true. If any test fails it will be set to false
validGuess = true
// Test for exactly 4 digits
if length[guess] != 4
{
println["$guess is invalid. Your guess must be 4 digits."]
validGuess = false
}
// Test for any characters not in 1 - 9 using regex
if guess =~ %r/[^1-9]/
{
println["$guess is invalid. Your guess can only contain the digits 1 through 9."]
validGuess = false
}
// Check for duplicate digits in guess
comboCheck = true
guessArr = charList[guess] // Split guess string into array of characters.
guessArrCombos = guessArr.combinations[2] // Divide the array into all possible 2 digits combinations.
for guessCombo = guessArrCombos
if guessCombo@0 == guessCombo@1 // If the two digits in the combinations are the same mark the comboCheck as failed.
comboCheck = false
if comboCheck == false
{
println["$guess is invalid. Each digit in your guess should be unique."]
validGuess = false
}
// If all tests pass, continue with the game.
if validGuess == true
{
guessCount = guessCount + 1
for i = 0 to 3
{
if parseInt[guessArr@i] == target@i // Convert guess from string to int. Frink imports all input as strings.
{
bulls = bulls + 1
next // If bull is found, skip the contains check.
}
if target.contains[parseInt[guessArr@i]]
cows = cows + 1
}
if bulls == 4
solved = true // Exit from While loop.
else
{
// Print the results of the guess. Formatting for plurals.
bullsPlural = bulls == 1 ? "bull" : "bulls"
cowsPlural = cows == 1 ? "cow" : "cows"
println["Your guess of $guess had $bulls $bullsPlural and $cows $cowsPlural."]
}
}
}
guessPlural = guessCount == 1 ? "guess" : "guesses"
println["Congratulations! Your guess of $guess was correct! You solved this in $guessCount $guessPlural."]