// 1. Создайте типаж Summary с методом summarize(&self) -> String. // 2. Реализуйте его длā: // ○ Vec (где T: ToString), метод должен соединять элементы через запятую. // ○ HashMap (где K: ToString, V: ToString), метод должен выводить пары key:value. // 3. Напиúите функøиĀ print_summary(item: T), которая печатает результат summarize(). use std::collections::HashMap; // Определяем типаж Summary trait Summary { fn summarize(&self) -> String; } // Реализация для Vec где T: ToString impl Summary for Vec { fn summarize(&self) -> String { self.iter() .map(|v| v.to_string()) .collect::>() .join(",") .to_string() } } // Реализация для HashMap где K: ToString, V: ToString impl Summary for HashMap { fn summarize(&self) -> String { self.iter() .map(|(k, v)| format!("{}:{}", k.to_string(), v.to_string())) .collect::>() .join(", ") } } // Обобщённая функция для вывода сводки fn print_summary(summary: impl Summary) { println!("{}", summary.summarize()) } fn main() { // Пример с вектором let vec = vec![1, 2, 3]; print_summary(vec); // "1, 2, 3" // Пример с HashMap let mut map = HashMap::new(); map.insert("name", "Alice"); map.insert("age", "30"); print_summary(map); // "name:Alice, age:30" (порядок может отличаться) // Дополнительный пример с разными типами let words = vec!["hello", "world"]; print_summary(words); // "hello, world" let mut scores = HashMap::new(); scores.insert("math", 95); scores.insert("science", 90); print_summary(scores); // "math:95, science:90" }