Jump to content

Bulls and cows: Difference between revisions

Added Elixir
(Added Elixir)
Line 780:
}
</lang>
 
=={{header|Clojure}}==
<lang clojure>
Line 1,064 ⟶ 1,065:
}, entropy)
}</lang>
 
=={{header|Eiffel}}==
<lang Eiffel>
Line 1,302 ⟶ 1,304:
Your Guess #6 ?2843
Congratulations! You have won!
</pre>
 
=={{header|Elixir}}==
{{works with|Elixir|1.2}}
<lang elixir>defmodule Bulls_and_cows do
def play(size \\ 4) do
secret = Enum.take_random(1..9, size) |> Enum.map(&to_string/1)
play(size, secret)
end
defp play(size, secret) do
guess = input(size)
if guess == secret do
IO.puts "You win!"
else
{bulls, cows} = count(guess, secret)
IO.puts " Bulls: #{bulls}; Cows: #{cows}"
play(size, secret)
end
end
defp input(size) do
guess = IO.gets("Enter your #{size}-digit guess: ") |> String.strip
cond do
guess == "" ->
IO.puts "Give up"
exit(:normal)
String.length(guess)==size and String.match?(guess, ~r/^[1-9]+$/) ->
String.codepoints(guess)
true -> input(size)
end
end
defp count(guess, secret) do
Enum.zip(guess, secret) |>
Enum.reduce({0,0}, fn {g,s},{bulls,cows} ->
cond do
g == s -> {bulls + 1, cows}
g in secret -> {bulls, cows + 1}
true -> {bulls, cows}
end
end)
end
end
 
Bulls_and_cows.play</lang>
 
{{out}}
<pre>
Enter your 4-digit guess: 1234
Bulls: 1; Cows: 1
Enter your 4-digit guess: 5678
Bulls: 0; Cows: 2
Enter your 4-digit guess: 2345
Bulls: 0; Cows: 1
Enter your 4-digit guess: 1456
Bulls: 1; Cows: 0
Enter your 4-digit guess: 1782
You win!
</pre>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.