def indices_sorted_by_descending_values(array) array.each_with_index.to_a .sort_by { |(element, index)| -element } .map { |(element, index)| index } end def elements_between_first_and_second_max(array) max_value = array.max max_indices = array.each_with_index.select { |element, index| element == max_value }.map { |_, index| index } if max_indices.size >= 2 first_max_index = max_indices[0] second_max_index = max_indices[1] else second_max_value = array.select { |element| element != max_value }.max return [] if second_max_value.nil? first_max_index = array.index(max_value) second_max_index = array.index(second_max_value) end first_max_index, second_max_index = [first_max_index, second_max_index].sort array[(first_max_index + 1)...second_max_index] end def elements_between_first_and_last_max(array) max_value = array.max first_max_index = array.index(max_value) last_max_index = array.rindex(max_value) return [] if first_max_index == last_max_index first_max_index, last_max_index = [first_max_index, last_max_index].sort array[(first_max_index + 1)...last_max_index] end def minimal_even_element(array) even_elements = array.select(&:even?) even_elements.min end def prime_divisors(number) require 'prime' (2..number).select { |x| number % x == 0 && Prime.prime?(x) } end # IO def get_array_input(input_method) if input_method == 1 puts "Введите элементы массива через пробел:" gets.chomp.split.map(&:to_i) elsif input_method == 2 puts "Введите имя файла:" file_name = gets.chomp File.read(file_name).split.map(&:to_i) else raise "Неверный метод ввода." end end def get_number_input(input_method) if input_method == 1 puts "Введите число:" gets.chomp.to_i elsif input_method == 2 puts "Введите имя файла:" file_name = gets.chomp File.read(file_name).to_i else raise "Неверный метод ввода." end end puts "Выберите задачу для выполнения:" puts "1. Вывести индексы массива в порядке убывания элементов." puts "2. Найти элементы между первым и вторым максимальным." puts "3. Найти элементы между первым и последним максимальным." puts "4. Найти минимальный четный элемент." puts "5. Найти все простые делители числа." task_number = gets.chomp.to_i puts "Выберите метод ввода данных (1: С клавиатуры, 2: Из файла):" input_method = gets.chomp.to_i case task_number when 1 array = get_array_input(input_method) puts "Индексы в порядке убывания элементов:" puts indices_sorted_by_descending_values(array).join(", ") when 2 array = get_array_input(input_method) puts "Элементы между первым и вторым максимальным:" puts elements_between_first_and_second_max(array).join(", ") when 3 array = get_array_input(input_method) puts "Элементы между первым и последним максимальным:" puts elements_between_first_and_last_max(array).join(", ") when 4 array = get_array_input(input_method) puts "Минимальный четный элемент:" puts minimal_even_element(array) when 5 number = get_number_input(input_method) puts "Простые делители числа:" puts prime_divisors(number).join(", ") else puts "Неверный номер задачи." end