Bulls and cows: Difference between revisions
Content added Content deleted
(Added Elixir) |
|||
Line 780: | Line 780: | ||
} |
} |
||
</lang> |
</lang> |
||
=={{header|Clojure}}== |
=={{header|Clojure}}== |
||
<lang clojure> |
<lang clojure> |
||
Line 1,064: | Line 1,065: | ||
}, entropy) |
}, entropy) |
||
}</lang> |
}</lang> |
||
=={{header|Eiffel}}== |
=={{header|Eiffel}}== |
||
<lang Eiffel> |
<lang Eiffel> |
||
Line 1,302: | Line 1,304: | ||
Your Guess #6 ?2843 |
Your Guess #6 ?2843 |
||
Congratulations! You have won! |
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> |
</pre> |
||