diff --git a/test/exercise/fp/solution.rb b/test/exercise/fp/solution.rb index 91c40040..9a399c70 100644 --- a/test/exercise/fp/solution.rb +++ b/test/exercise/fp/solution.rb @@ -4,12 +4,39 @@ class << self # Обратиться к параметрам фильма можно так: # film["name"], film["rating_kinopoisk"], film["rating_imdb"], # film["genres"], film["year"], film["access_level"], film["country"] - def rating(_array) - 0 + + def film_rated?(film) + return false if film['rating_kinopoisk'].nil? + + film['rating_kinopoisk'].to_f.positive? + end + + def film_multicountry?(film) + return false if film['country'].nil? + + film['country'].split(',').size >= 2 + end + + def rating(array) + multicountry_rated_films = array.select { |film| film_rated?(film) && film_multicountry?(film) } + multicountry_rated_films.reduce(0) { |sum, film| sum + film['rating_kinopoisk'].to_f } / multicountry_rated_films.size + end + + def film_rated_enough?(film, threshold) + return false if film['rating_kinopoisk'].nil? + + film['rating_kinopoisk'].to_f > threshold + end + + def count_of_i_letter(film_name) + sum = 0 + film_name.each_char { |char| sum += 1 if char == 'и' } + sum end - def chars_count(_films, _threshold) - 0 + def chars_count(films, threshold) + top_rated_films = films.select { |film| film_rated_enough?(film, threshold) } + top_rated_films.reduce(0) { |sum, film| sum + count_of_i_letter(film['name']) } end end end diff --git a/test/exercise/fp/test.rb b/test/exercise/fp/test.rb index cec0f97d..1d98db57 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) @@ -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)