Загрузка данных
Бриллиантовая рука;Леонид Гайдай;1968
Кавказская пленница;Леонид Гайдай;1966
Операция Ы;Леонид Гайдай;1965
Иван Васильевич меняет профессию;Леонид Гайдай;1973
Война и мир;Сергей Бондарчук;1967
Судьба человека;Сергей Бондарчук;1959
Они сражались за Родину;Сергей Бондарчук;1975
Солярис;Андрей Тарковский;1972
Сталкер;Андрей Тарковский;1979
Асса;Сергей Соловьев;1987
Брат;Алексей Балабанов;1997
Брат 2;Алексей Балабанов;2000
Ночной дозор;Тимур Бекмамбетов;2004
Движение вверх;Антон Мегердичев;2017
Холоп;Клим Шипенко;2019
Вызов;Клим Шипенко;2023
Фильм текущего года;Иван Иванов;2026
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Film
{
public string Name { get; set; }
public string Director { get; set; }
public int Year { get; set; }
public Film(string name, string director, int year)
{
Name = name;
Director = director;
Year = year;
}
}
class Program
{
static void Main()
{
int currentYear = DateTime.Now.Year;
List<Film> films = File.ReadAllLines("films.txt")
.Select(line => line.Split(';'))
.Select(parts => new Film(parts[0], parts[1], int.Parse(parts[2])))
.ToList();
Console.WriteLine("1. Фильтрация: советские фильмы Леонида Гайдая или Сергея Бондарчука");
var filtered = films
.Where(f => f.Year >= 1917 && f.Year <= 1991 &&
(f.Director == "Леонид Гайдай" || f.Director == "Сергей Бондарчук"));
foreach (var film in filtered)
Console.WriteLine($"{film.Name} — {film.Director}, {film.Year}");
Console.WriteLine("\n2. Проекция: наименование и сколько лет в прокате");
var projection = films.Select(f => new
{
f.Name,
YearsInRent = currentYear - f.Year
});
foreach (var item in projection)
Console.WriteLine($"{item.Name} — {item.YearsInRent} лет в прокате");
Console.WriteLine("\n3. Сортировка по наименованию и году выпуска");
var sorted = films
.OrderBy(f => f.Name)
.ThenBy(f => f.Year);
foreach (var film in sorted)
Console.WriteLine($"{film.Name} — {film.Year}");
Console.WriteLine("\n4. Группировка по режиссеру");
var grouped = films.GroupBy(f => f.Director);
foreach (var group in grouped)
{
Console.WriteLine($"\n{group.Key}:");
foreach (var film in group)
Console.WriteLine($" {film.Name} ({film.Year})");
}
Console.WriteLine("\n5. Группировка с подсчетом количества фильмов у каждого режиссера");
var groupedCount = films
.GroupBy(f => f.Director)
.Select(g => new
{
Director = g.Key,
Count = g.Count()
});
foreach (var item in groupedCount)
Console.WriteLine($"{item.Director}: {item.Count}");
Console.WriteLine("\n6. Агрегатная операция: количество фильмов, вышедших в текущем году");
int currentYearFilmsCount = films.Count(f => f.Year == currentYear);
Console.WriteLine($"Фильмов {currentYear} года: {currentYearFilmsCount}");
Console.WriteLine("\n7. Извлечение: элементы начиная с 1990 года выпуска");
var from1990 = films
.OrderBy(f => f.Year)
.SkipWhile(f => f.Year < 1990);
foreach (var film in from1990)
Console.WriteLine($"{film.Name} — {film.Year}");
Console.WriteLine("\n8. Проверка: все ли фильмы вышли в прокат в текущем году");
bool allCurrentYear = films.All(f => f.Year == currentYear);
Console.WriteLine(allCurrentYear
? "Все фильмы вышли в текущем году"
: "Не все фильмы вышли в текущем году");
Console.WriteLine("\n9. Объединение двух последовательностей");
List<string> additionalFilms = new List<string>
{
"Аватар",
"Титаник",
"Интерстеллар"
};
var filmNames = films.Select(f => f.Name);
var unionFilms = filmNames.Union(additionalFilms);
foreach (var name in unionFilms)
Console.WriteLine(name);
}
}