Репозиторий содержит решения этой, этой и этой задачи с ulearn.me. Задачи прошли код-ревью у преподавателя (баллы: 50/50, 50/50, 100/100). Все решения курса на максимальный балл также выложены в других репозиториях. Ветка unsolved содержит изначальный проект.
Конечное приложение - парсинг и анализ данных, поступающих через входящие текстовые файлы.
В файле ExtensionsTask реализуйте два метода расширения: для вычисления медианы и для вычисления списка биграмм.
Эти методы пригодятся в будущем. Вы сможете их использовать на ряду и в перемешку с остальными методами LINQ.
Есть важное замечание по деталям реализации.
Создавая методы, работающие с IEnumerable
стоит придерживаться следующих рекомендаций:
- Если это возможно, не перечисляйте входной IEnumerable до конца. Потому что IEnumerable может теоретически быть бесконечным.
- Не перечисляйте больше элементов, чем нужно для работы IEnumerable. Возможно, при перечислении лишнего элемента случится ошибка или другой нежелательный побочный эффект.
- Не полагайтесь на то, что
IEnumerable
можно будет перечислить дважды. Этого никто не гарантирует. Кстати, некоторые IDE, автоматически находят нарушение этого пункта. Например, подобные предупреждения умеют показывать JetBrains Rider и Visual Studio с установленным Resharper.
В этой серии задач вам нужно будет проанализировать статистику посещения слайдов этого курса студентами.
Исходные данные содержатся в двух файлах:
-
slide.txt содержит информацию про каждый из слайдов — идентификатор, тип слайда (теория, задача или тест), и тема соответствующей недели. Пример файла slides.txt:
SlideId;SlideType;UnitTitle 0;theory;Первое знакомство с C# 1;quiz;Первое знакомство с C# 2;theory;Первое знакомство с C# 3;exercise;Первое знакомство с C#
-
visits.txt содержит по одной записи на первое посещение слайда каждым пользователем. Запись состоит из идентификатора пользователя, идентификатора слайда, даты и времени посещения этим пользователем этого слайда. Пример файла visits.txt:
UserId;SlideId;Date;Time 0;5;2014-09-03;12:20:28 1;6;2014-09-03;12:25:09 1;4;2014-09-03;12:25:24
В этой задаче в классе ParsingTask нужно реализовать методы чтения этих файлов.
Не используйте циклы в решении. Вместо этого используйте LINQ.
Обратите внимание, что в разных методах предлагается реализовать разную реакцию на некорректные строки файлов: в одном случае — игнорировать их, а в другом — выбрасывать исключение на первой же ошибочной строке. Это сделано исключительно в учебных целях — в реальных проектах стоит, конечно, придерживаться какой-то одной выбранной стратегии.
В файле StatisticsTask реализуйте метод GetMedianTimePerSlide. Он должен работать так.
Обозначим T(U, S) время между посещением пользователем U слайда S и ближайшим следующим посещением тем же пользователем U какого-то другого слайда S2 != S.
T(U, S) можно считать примерной оценкой того, сколько времени пользователь U провел на слайде S.
Метод должен для указанного типа слайда, считать медиану значений T(U, S) по всем пользователям и всем слайдам этого типа.
Нужно игнорировать значения меньшие 1 минуты и большие 2 часов при расчете медианы.
Гарантируется, что в тестах и реальных данных отсутствуют записи, когда определенный пользователь заходит на один и тот же слайд более одного раза.
Время нужно возвращать в минутах.
Воспользуйтесь реализованными ранее методами Bigrams и Median.