Загрузка данных


Бриллиантовая рука;Леонид Гайдай;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);
    }
}