Занятное задание для отважных, знающих и храбрых (текстовые файлы) - C#

Узнай цену своей работы

Формулировка задачи:

Исходный файл состоит из строк, в каждой из которых записаны данные о богатыре в следующем порядке: • Имя и отчество • Название родного города (случаются и земляки, вестимо) • Количество побежденных чудищ за поход (массив из пяти элементов) Записать в выходной файл следующие данные: Лучших богатырей по среднему количеству убитых чудищ в каждом городе.

Решение задачи: «Занятное задание для отважных, знающих и храбрых (текстовые файлы)»

textual
Листинг программы
static class Program
{
    static void Main(string[] args)
    {
        File.WriteAllLines(@"output.txt",
            Read(@"input.txt").SelectMany(
                city => city.Heroes
                    .Where(h => h.Frags > city.Average)
                    .OrderByDescending(h => h.Frags)
                    .Select(h => h.Name)
                ),
            Encoding.Default);
    }
 
    static IList<City> Read(string FileName)
    {
        var pattern = @"(\w+)\W+(\w+)\W+(\w+)\W+(\w+)\W+(\d+)";
        var re = new Regex(pattern);
        var cities = new List<City>();
        var hash = new Dictionary<string, City>();
 
        foreach(string line in File.ReadLines(FileName, Encoding.Default))
        {
            var m = re.Match(line);
            if (m.Success)
            {
                City city;
                string cityName = m.Groups[4].Value;
                if (!hash.TryGetValue(cityName, out city))
                {
                    city = new City() { Name = cityName };
                    hash.Add(cityName, city);
                    cities.Add(city);
                }
 
                city.AddHero(new Hero()
                {
                    Frags = int.Parse(m.Groups[5].Value),
                    Name = String.Concat(
                        m.Groups[1], ' ', 
                        m.Groups[2], ' ', 
                        m.Groups[3])
                });
            }
        }
 
        return cities;
    }
}
 
class City
{
    public string Name;
    public IList<Hero> Heroes = new List<Hero>();
    public double Average { get { return (double)FragCount / Heroes.Count; } }
    public int FragCount;
 
    public void AddHero(Hero hero)
    {
        Heroes.Add(hero);
        FragCount += hero.Frags;
    }
}
 
class Hero
{
    public string Name;
    public int Frags;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы