Занятное задание для отважных, знающих и храбрых (текстовые файлы) - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д