Дана строка формата «Предмет: Фамилия_студента1, Оценка, Фамилия_студента2, Оценка, …» - C#
Формулировка задачи:
Дана строка формата «Предмет: Фамилия_студента1, Оценка, Фамилия_студента2, Оценка, …». По каждому предмету такие строки занесены в массив. Напишите метод формирования массива, содержащего строки формата «Предмет: 70%, 100%» со значениями абсолютной и качественной успеваемости в процентах, соответственно, по каждому предмету.
Решение задачи: «Дана строка формата «Предмет: Фамилия_студента1, Оценка, Фамилия_студента2, Оценка, …»»
textual
Листинг программы
private static void Main()
{
string[] subjects =
{
"Math: A, 1, B, 2, C, 3, D, 4, E, 5",
"Chem: A, 3, B, 3, C, 3, D, 4"
};
string[] result = CalcStat(subjects);
Array.ForEach(result, Console.WriteLine);
}
private static string[] CalcStat(IEnumerable<string> subjects)
{
return (from subject in subjects
let index = subject.IndexOf(':')
let name = subject.Substring(0, index)
let marks = subject.Substring(index).Split(',').Where((x, i) => i % 2 == 1).Select(int.Parse).ToArray()
select new Tuple<string, double[]>(name, new[]
{
(double)marks.Count(x => x >= 3 && x <= 5) / marks.Length,
(double)marks.Count(x => x == 4 || x == 5) / marks.Length
})).Select(tuple => $"{tuple.Item1}: {string.Join(", ", tuple.Item2.Select(x => $"{x:P0}"))}").ToArray();
}