Giter VIP home page Giter VIP logo

biatlon's Introduction

Задача: Обработка статистики соревнований по биатлону

Файл содержит статистику биатлонных гонок кубка мира типа спринт с 2-мя огневыми рубежами:

  1. № этапа гонки
  2. стартовый № участника
  3. занятое место
  4. фамилия участника
  5. имя участника
  6. страна участника
  7. общее время прохождения дистанции, сек.
  8. время подхода к первому огневому рубежу (относительное, в секундах от начала гонки)
  9. время подхода ко второму огневому рубежу (относительное, в секундах от начала гонки)
  10. время отхода от первого огневого рубежа (относительное, в секундах от начала гонки)
  11. время отхода от второго огневого рубежа (относительное, в секундах от начала гонки)
  12. общее кол-во промахов
  13. общее время прохождения штрафных кругов

Для незавершивших гонку указывается общее время -1. Найти тех, кто стрелял точнее всего на протяжении сезона и вывести по ним данные по всем гонкам, а конкретно:

  1. № этапа гонки
  2. № участника
  3. занятое место
  4. общее время прохождения дистанции
  5. кол-во промахов и указать наилучшее время стрельбы и гонка, где оно было достигнуто.

В заголовке указывается кол-во этапов, в футере - кол-во записей и общее кол-во промахов.

Описание формата данных

Первая строка начинается с header:, после чего идет содержимое заголовка. Строки с данными начинаются с порядкового номера строки (номерация с 1). Отдельные элементы строк (поля) разделены символом ";". Разделитель внутри контента встречаться не должен. В файле могут быть пустые строки и строки из пробелов, которые не номеруются и должны игнорироваться при разборе. Последняя строка (футер) начинается с footer:, после чего идет содержимое футера.

Требования

  • Входные данные поступают в файле. Если в командной строке более 1 параметра/ключа, то имя/путь исходного файла должно браться как соответствующий аргумент командной строки. В противном случае он должен задаваться пользователем при запуске программы.
  • Исходные и результирующие файлы, указанные пользователем - через пробел - во время выполнения программы, также даолжны обрабатываться.
  • Правильный результат обработки правильных данных должен выводиться на экран либо в файл. Решение о точке вывода данных принимается динамически, в процессе выполнения программы, путем запроса у пользователя.
  • Реализован контейнер/контейнеры, содержащие данные, предоставляемые в файле (необязательно сохранять все поля, можно хранить частично агрегированную информацию)
  • Ограничения контейнера по памяти зависит только от доступного объема свободной памяти. Файлы размером 10 Мб должны успешно загружаться.
  • В контейнере должен быть метод, выводящий содержимое контейнера на экран (в консоль)
  • В контейнере/контейнерах должны быть реализованы публичные методы для добавления информации в контейнер в виде обработанных данных (скалярных или ссылочных), но не содержимое всего файла или его части, или неразобранные строки, или входной поток.
  • В контейнере/контейнерах должны быть реализованы публичные методы для поиска в них информации. Аргументами этих методов должны быть не пользовательские объекты, а скалярные данные или строки. Методы для поиска элемента типа Т в контейнере элементов типа Т не запрещаются, однако они не должны быть публичными. Могут использоваться для поиска с помощью перегруженного оператора "==". При таком подходе, они должны быть "обернуты" в публичные методы, к которым относится это подпункт.
  • Логика разбора строк должна быть вынесена в отдельный класс/классы (Lexer), отвечающий исключительно за разбор текста. Разбор осуществляется за 1 проход по ленивой стратегии (исключением может быть случай использования специальных системных библиотек, выпоняющих энергичный разбор).
  • Логику загрузки исходного файла в контейнер вынести в отдельный класс (Builder), который, используя объект(ы) класса Lexer (возможно и классов-наследников), реализует загрузку содержимого текстового файла в контейнер. В нем должен быть соответствующий метод, аргументами которого выступают контейнер и имя файла.
  • Корректный файл должне правильно разбираться и загружаться в контейнер.
  • При разборе строк не должны разрабатываться функции, аналоги которых входят в состав стандартных библиотек.
  • При наличии ошибок в исходном файле выводится диагностическое сообщение, оперделяющее тип ошибки (ошибки при работе с физическим файлом, синтаксические или семантические ошибки) и сообщает суть ошибки и номер строки файла, на которой ошибка выявлена. При наличии ошибок в исходном файле загрузка данных производится до первой ошибки.
  • Реализовать метод(ы) контейнера, выводящие правильный результат обработки в файл. Если путь/имя файла для вывода не задано, вывод осуществляется в консоль.
  • Все открытые файлы должны быть закрыты сразу после того, как завершается их чтение.
  • Избегать использование алгоритмов со сложностью, превышающей квадратичную. Файли размеров до 100Кб должны обрабатываться не долее часа.

Валидация данных

  • Проверка синтаксических ошибок:
    1. некорректное отображение чисел (?)
    2. несоответствие формата
    3. неверное кол-во элементов информации в строке При вводе принимается максимальный размер строки записи 2047 символов. Проверять это не требуется.
  • Пустые строки и строки, содержащие пробелы, игнорируются.
  • Контролируется соответствие содержимого файла его заголовку и футеру.
  • Контролируются все возможные семантические ошибки.

biatlon's People

Contributors

alexelev avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.