Skip to content
25 changes: 22 additions & 3 deletions test/exercise/arrays/solution.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,30 @@ module Exercise
module Arrays
class << self
def replace(array)
array
m = max array
array.map { |e| e > 0 ? m : e }
end

def search(_array, _query)
0
def search(array, query)
bin_search array, query, 0, array.length - 1
end

def max array
buf = array[0]
array.each { |e| buf = e if e > buf }
buf
end

def bin_search(array, query, left, right)
return -1 unless left <= right
i = (left + right) / 2
if array[i] == query
i
elsif array[i] < query
bin_search array, query, i + 1, right
elsif array[i] > query
bin_search array, query, left, i - 1
end
end
end
end
Expand Down
2 changes: 0 additions & 2 deletions test/exercise/arrays/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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) == 0
assert Exercise::Arrays.search([], 900) == -1
Expand Down
13 changes: 9 additions & 4 deletions test/exercise/fp/solution.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@ class << self
# Обратиться к параметрам фильма можно так:
# film["name"], film["rating_kinopoisk"], film["rating_imdb"],
# film["genres"], film["year"], film["access_level"], film["country"]
def rating(_array)
0
def rating(array)
filtered = array.select do |film|
!film['country'].nil? &&
film['country'].split(',').length >= 2 &&
film['rating_kinopoisk'].to_f > 0
end
filtered.map { |e| e['rating_kinopoisk'].to_f }.reduce(:+) / filtered.length
end

def chars_count(_films, _threshold)
0
def chars_count(films, threshold)
films.map { |e| e['rating_kinopoisk'].to_f >= threshold ? e['name'].count('и') : 0 }.reduce :+
end
end
end
Expand Down
2 changes: 0 additions & 2 deletions test/exercise/fp/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ class Exercise::FpTest < Minitest::Test
# Посчитать средний рейтинг фильмов по версии кинопоиска у которых две или больше стран
# Фильмы у которых рейтиг не задан или равен 0 не учитывать в расчете среднего.
def test_rating
skip
array = CSV.readlines('./test/fixtures/films.csv', headers: true)

result = Exercise::Fp.rating(array)
Expand All @@ -16,7 +15,6 @@ def test_rating

# Посчитать количесвто букв 'и' в названиях всех фильмов с рейтингом кинопоиска больше или равным заданному значению
def test_chars_count
skip
array = CSV.readlines('./test/fixtures/films.csv', headers: true)

result = Exercise::Fp.chars_count(array, 5)
Expand Down
13 changes: 12 additions & 1 deletion test/exercise/fp2/solution.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,29 @@ class MyArray < Array

# Написать свою функцию my_each
def my_each
for e in self
yield e
end
end

# Написать свою функцию my_map
def my_map
res = MyArray.new
self.my_each { |e| res.push yield(e) }
res
end

# Написать свою функцию my_compact
def my_compact
res = MyArray.new
self.my_each { |e| res.push e unless e.nil? }
res
end

# Написать свою функцию my_reduce
def my_reduce
def my_reduce(acc = nil)
self.my_each { |e| acc = acc ? yield(acc, e) : e }
acc
end
end
end
Expand Down
4 changes: 0 additions & 4 deletions test/exercise/fp2/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ def setup
end

def test_my_each
skip
result = []
my_result = []

Expand All @@ -23,14 +22,12 @@ def test_my_each
end

def test_my_map
skip
func = -> (element) { element * @int }
assert @array.map(&func) == @my_array.my_map(&func)
assert @array.map(&func).map(&func) == @my_array.my_map(&func).my_map(&func)
end

def test_my_compact
skip
func = -> (element) { element if element.even? }
func_another = -> (element) { element * @int }
func_yet_another = -> (element) { element.even? }
Expand All @@ -40,7 +37,6 @@ def test_my_compact
end

def test_my_reduce
skip
func = -> (acc, element) { acc * element }

assert @array.reduce(&func) == @my_array.my_reduce(&func)
Expand Down
14 changes: 13 additions & 1 deletion test/exercise/rackup/inatra.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
module Inatra
class << self
def routes
def method_missing(method_name, *args, &block)
path = args.first.to_s
method = method_name.upcase.to_s
@routes[path] ||= {}
@routes[path][method] = block
end

def routes(&block)
@routes ||= {}
instance_eval(&block)
end

def call(env)
path = env['PATH_INFO']
method = env['REQUEST_METHOD'].upcase.to_s
@routes[path][method].call(env)
end
end
end
10 changes: 4 additions & 6 deletions test/exercise/rackup/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@

class RackTest < Test::Unit::TestCase
def test_it_says_hello_world
omit do
browser = Rack::Test::Session.new(Rack::MockSession.new(Inatra))
browser.get '/hello'
assert browser.last_response.ok?
assert_equal 'Hello World', browser.last_response.body
end
browser = Rack::Test::Session.new(Rack::MockSession.new(Inatra))
browser.get '/hello'
assert browser.last_response.ok?
assert_equal 'Hello World', browser.last_response.body
end
end