diff --git a/test/exercise/fp/solution.rb b/test/exercise/fp/solution.rb index 91c40040..119ca274 100644 --- a/test/exercise/fp/solution.rb +++ b/test/exercise/fp/solution.rb @@ -4,12 +4,27 @@ 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) + ratings_list = + array.map { |film| film['rating_kinopoisk'].to_f if rated_and_multi_country?(film) } + .compact + + ratings_list.reduce(&:+) / ratings_list.size end - def chars_count(_films, _threshold) - 0 + def chars_count(films, threshold) + films_names = + films.map { |film| film['name'] if film['rating_kinopoisk'].to_f >= threshold } + .compact + + films_names.reduce(0) { |total, name| total + name.count('и') } + end + + private + + def rated_and_multi_country?(film) + film['rating_kinopoisk'].to_f.positive? && + film['country'].to_s.split(',').size > 1 end end end diff --git a/test/exercise/fp/test.rb b/test/exercise/fp/test.rb index c1554768..bcdb360e 100644 --- a/test/exercise/fp/test.rb +++ b/test/exercise/fp/test.rb @@ -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) @@ -18,7 +17,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)