From b2989add5f23a7cc180e635bd6aa308dac28c9f4 Mon Sep 17 00:00:00 2001 From: the38th Date: Thu, 3 Dec 2020 00:06:40 -0800 Subject: [PATCH 1/2] arrays exercises solved --- test/exercise/arrays/solution.rb | 17 ++++++++++++++--- test/exercise/arrays/test.rb | 2 -- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/test/exercise/arrays/solution.rb b/test/exercise/arrays/solution.rb index a7d518fc..950ed7f1 100644 --- a/test/exercise/arrays/solution.rb +++ b/test/exercise/arrays/solution.rb @@ -2,11 +2,22 @@ module Exercise module Arrays class << self def replace(array) - array + max = array.first + array.each { |el| max = el if el > max } + array.map { |el| el.positive? ? max : el } end - def search(_array, _query) - 0 + def search(array, query) + binnary_search(array, query, 0, array.size) + end + + def binnary_search(array, query, left, right) + mid = (left + right) / 2 + return mid if array[mid] == query + return -1 if left == right + return binnary_search(array, query, mid + 1, right) if array[mid] < query + + binnary_search(array, query, left, mid) end end end diff --git a/test/exercise/arrays/test.rb b/test/exercise/arrays/test.rb index 8cd6fb66..4e3e8acf 100644 --- a/test/exercise/arrays/test.rb +++ b/test/exercise/arrays/test.rb @@ -4,7 +4,6 @@ class Exercise::ArraysTest < Minitest::Test # Заменить все положительные элементы целочисленного массива на максимальное значение элементов массива. def test_replace - skip array = [3, 2, -8, 4, 100, -6, 7, 8, -99] new_array = Exercise::Arrays.replace(array) @@ -14,7 +13,6 @@ def test_replace # Реализовать двоичный поиск # Функция должна возвращать индекс элемента def test_bin_search - skip assert Exercise::Arrays.search([1], 900) == -1 assert Exercise::Arrays.search([1], 1).zero? assert Exercise::Arrays.search([], 900) == -1 From 7abfd29699413487be33e6035d32f493448bfb65 Mon Sep 17 00:00:00 2001 From: the38th Date: Mon, 7 Dec 2020 05:13:22 -0800 Subject: [PATCH 2/2] find_max method added --- test/exercise/arrays/solution.rb | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/test/exercise/arrays/solution.rb b/test/exercise/arrays/solution.rb index 950ed7f1..a0d34112 100644 --- a/test/exercise/arrays/solution.rb +++ b/test/exercise/arrays/solution.rb @@ -2,22 +2,27 @@ module Exercise module Arrays class << self def replace(array) + max = find_max(array) + array.map { |el| el.positive? ? max : el } + end + + def find_max(array) max = array.first array.each { |el| max = el if el > max } - array.map { |el| el.positive? ? max : el } + max end def search(array, query) - binnary_search(array, query, 0, array.size) + binary_search(array, query, 0, array.size) end - def binnary_search(array, query, left, right) + def binary_search(array, query, left, right) mid = (left + right) / 2 return mid if array[mid] == query return -1 if left == right - return binnary_search(array, query, mid + 1, right) if array[mid] < query + return binary_search(array, query, mid + 1, right) if array[mid] < query - binnary_search(array, query, left, mid) + binary_search(array, query, left, mid) end end end