-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathguess.ex
More file actions
50 lines (35 loc) · 1.06 KB
/
guess.ex
File metadata and controls
50 lines (35 loc) · 1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
defmodule Chop do
def guess(actual, min..max) do
IO.puts "guess #{actual} #{min} #{max}"
current = halve(min..max)
IO.puts "Is it #{current}?"
do_guess current, actual, min..max
end
defp do_guess(_, actual, min..max) when actual < min do
raise "don't cheat!"
end
defp do_guess(_, actual, min..max) when actual > max do
raise "don't cheat!"
end
defp do_guess(current, actual, _) when current == actual do
IO.puts "The number is #{current}"
end
defp do_guess(current, actual, min..max) when current < actual do
#IO.puts " Too low!"
new_guess = halve current..max
IO.puts "Is it #{new_guess}?"
do_guess new_guess, actual, current..max
end
defp do_guess(current, actual, min..max) when current > actual do
#IO.puts " Too high!"
new_guess = halve min..current
IO.puts "Is it #{new_guess}?"
do_guess new_guess, actual, min..current
end
def halve(min..max) do
#IO.puts " halve #{min} #{max}"
div(min + max, 2)
end
end
Chop.guess 7, 1..20
Chop.guess 273, 1..1000