Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
42
Task/Bulls-and-cows/Elixir/bulls-and-cows.elixir
Normal file
42
Task/Bulls-and-cows/Elixir/bulls-and-cows.elixir
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue