|
1 | 1 | defmodule GuessingGame do
|
2 |
| - @spec compare(Number, Number) :: <<_::56, _::_*8>> |
3 |
| - def compare(secret_number, guess) do |
4 |
| - case {secret_number, guess} do |
5 |
| - {secret_number, guess} when is_number(guess) -> |
6 |
| - cond do |
7 |
| - secret_number == guess -> "Correct" |
8 |
| - secret_number + 1 == guess -> "So close" |
9 |
| - secret_number - 1 == guess -> "So close" |
10 |
| - secret_number < guess -> "Too high" |
11 |
| - secret_number > guess -> "Too low" |
12 |
| - true -> "Make a guess" |
13 |
| - end |
| 2 | + @spec compare(Number, any) :: <<_::56, _::_*8>> |
14 | 3 |
|
15 |
| - {_, _} -> |
16 |
| - "Make a guess" |
17 |
| - end |
18 |
| - end |
| 4 | + def compare(_, guess \\ :guess) |
| 5 | + def compare(_, guess) when not is_integer(guess), do: "Make a guess" |
| 6 | + def compare(secret_number, secret_number), do: "Correct" |
19 | 7 |
|
20 |
| - def compare(_) do |
21 |
| - "Make a guess" |
22 |
| - end |
| 8 | + def compare(secret_number, guess) |
| 9 | + when is_number(guess) and abs(secret_number - guess) == 1, |
| 10 | + do: "So close" |
| 11 | + |
| 12 | + def compare(secret_number, guess) when is_number(guess) and secret_number < guess, |
| 13 | + do: "Too high" |
| 14 | + |
| 15 | + def compare(secret_number, guess) when is_number(guess) and secret_number > guess, do: "Too low" |
23 | 16 | end
|
0 commit comments