Skip to content

Instantly share code, notes, and snippets.

@vdeemann
Last active December 12, 2024 00:22
Show Gist options
  • Select an option

  • Save vdeemann/f910d8741ef011c11c95b961bc858b96 to your computer and use it in GitHub Desktop.

Select an option

Save vdeemann/f910d8741ef011c11c95b961bc858b96 to your computer and use it in GitHub Desktop.

Revisions

  1. vdeemann revised this gist Dec 12, 2024. 1 changed file with 18 additions and 0 deletions.
    18 changes: 18 additions & 0 deletions modules_and_functions_6_found_solution.exs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    defmodule Chop do
    def guess(actual, range = low..high//_) do
    guess = div(low+high, 2)
    IO.puts "Is it #{guess}?"
    _guess(actual, guess, range)
    end

    defp _guess(actual, actual, _),
    do: IO.puts "Yes, it's #{actual}"

    defp _guess(actual, guess, _..high//_)
    when guess < actual,
    do: guess(actual, guess+1..high)

    defp _guess(actual, guess, low.._//_)
    when guess > actual,
    do: guess(actual, low..guess-1)
    end
  2. vdeemann revised this gist Dec 11, 2024. 1 changed file with 7 additions and 11 deletions.
    18 changes: 7 additions & 11 deletions modules_and_functions_6.exs
    Original file line number Diff line number Diff line change
    @@ -1,29 +1,25 @@
    defmodule Chop do
    def guess(actual, range), do: guess_conditional(actual, range, div(Range.size(range),2))
    def guess_conditional(actual, range, current_guess) do
    if Range.size(range) == actual do
    "#{actual}"
    else
    if actual > 0 and actual <= Range.size(range) do
    helper_guess(actual, range, current_guess)
    end
    if actual > 0 and actual <= Range.size(range) do
    guess_helper(actual, range, current_guess)
    end
    end
    def helper_guess(actual, _, current_guess) when current_guess == actual do
    def guess_helper(actual, _, current_guess) when current_guess == actual do
    "#{current_guess}"
    end
    def helper_guess(actual, range, current_guess) when current_guess > actual do
    def guess_helper(actual, range, current_guess) when current_guess > actual do
    IO.puts "Is it #{current_guess} >"
    low.._//_ = range
    range = low..(current_guess)
    #IO.puts "#{range.first}..#{range.last}"
    helper_guess(actual, range, div(current_guess+low,2))
    guess_helper(actual, range, div(current_guess+low,2))
    end
    def helper_guess(actual, range, current_guess) when current_guess < actual do
    def guess_helper(actual, range, current_guess) when current_guess < actual do
    IO.puts "Is it #{current_guess} <"
    _..high//_ = range
    range = (current_guess)..high
    #IO.puts "#{range.first}..#{range.last}"
    helper_guess(actual, range, div(current_guess+high,2))
    guess_helper(actual, range, div(current_guess+high+1,2))
    end
    end
  3. vdeemann revised this gist Dec 11, 2024. 1 changed file with 10 additions and 2 deletions.
    12 changes: 10 additions & 2 deletions modules_and_functions_6.exs
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,14 @@
    # Chop.guess(1000,1..1000) edge case causing infinite recursion
    defmodule Chop do
    def guess(actual, range), do: helper_guess(actual, range, div(Range.size(range),2))
    def guess(actual, range), do: guess_conditional(actual, range, div(Range.size(range),2))
    def guess_conditional(actual, range, current_guess) do
    if Range.size(range) == actual do
    "#{actual}"
    else
    if actual > 0 and actual <= Range.size(range) do
    helper_guess(actual, range, current_guess)
    end
    end
    end
    def helper_guess(actual, _, current_guess) when current_guess == actual do
    "#{current_guess}"
    end
  4. vdeemann revised this gist Dec 4, 2024. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions modules_and_functions_6.exs
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,4 @@
    # Chop.guess(1000,1..1000) edge case causing infinite recursion
    defmodule Chop do
    def guess(actual, range), do: helper_guess(actual, range, div(Range.size(range),2))
    def helper_guess(actual, _, current_guess) when current_guess == actual do
  5. vdeemann created this gist Dec 4, 2024.
    20 changes: 20 additions & 0 deletions modules_and_functions_6.exs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,20 @@
    defmodule Chop do
    def guess(actual, range), do: helper_guess(actual, range, div(Range.size(range),2))
    def helper_guess(actual, _, current_guess) when current_guess == actual do
    "#{current_guess}"
    end
    def helper_guess(actual, range, current_guess) when current_guess > actual do
    IO.puts "Is it #{current_guess} >"
    low.._//_ = range
    range = low..(current_guess)
    #IO.puts "#{range.first}..#{range.last}"
    helper_guess(actual, range, div(current_guess+low,2))
    end
    def helper_guess(actual, range, current_guess) when current_guess < actual do
    IO.puts "Is it #{current_guess} <"
    _..high//_ = range
    range = (current_guess)..high
    #IO.puts "#{range.first}..#{range.last}"
    helper_guess(actual, range, div(current_guess+high,2))
    end
    end