Требования к выполнению задания

  • Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
  • Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью gem запрещена. Исключением является джем bundler.
  • Для разрабатываемого приложения должны быть создан отдельный каталог.
    • В корне каталога должны располагаться конфигурационные файлы: Gemfile, Gemfile.lock.
    • В корне каталога приложения должны находится каталоги bin, lib, в которых должен находиться исходный код приложения. В каталоге bin находится исполняемый файл, в каталоге lib находится описание всех собственных классов и модулей.
  • Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
  • Необходимо выделить отдельные классы, описывающие предметную область.
  • В одном модуле нельзя совмещать логику обработки предметной области и операции ввода-вывода.
  • Приложение должно корректно обрабатывать неправильный ввод от пользователя.

Задача

Разработать приложение, оперирующее данными об окружностях. Окружность описывается следующими полями: координаты центра и радиус.

Информация об окружностях содержится в CSV-файле. В качестве параметра приложению передаётся имя файла с данными.

Приложение должно считать файл и вывести:

  • Среднюю площадь кругов, указанных в файле. Площадь окружности высчитывается по формуле S = PI * r^2.
  • Для каждой окружности вывести список других окружностей, пересекающих данную окружность.

Требования к реализации

  • Необходимо использовать объектно-ориетированный подход при реализации приложения. При реализации необходимо как минимум описать класс Circle для описания окружности и Plane для описания плоскости с окружностями (список окружностей).
  • Данные для обработки необходимо использовать следующие: lab-4-circle-data.csv
  • Запуск приложения должен выглядеть следующим образом:

    ruby bin/application.rb data/lab-4-circle-data.csv
    

    То есть путь к файлу с данными должен получаться из аргументов приложения.

  • Вывод приложения должен быть следующий:

    Всего кругов в файле: 100
    Средняя площадь кругов: 5356,56
    
    Пересечение между кругами:
    1. (100, 200, 400) 5, 6, 7, 15.
    2. (50, 30, 60) 3, 50, 25, 46.
    3. (25, 63, 55) 2, 5, 50.
    4. (1, 1, 10).
    ...
    
  • Исходный код должен быть загружен в архиве на сайт https://moodle.uniyar.ac.ru/ в качестве ответа на задание Пересдача №1.
    • Если у вас нет доступа к сайту, то исходный код можно отправить на электронный адрес преподавателя.

Рекомендации по распределению времени

  • Реализация приложения 14:30-15:30.
  • Отправка результатов приложения 15:30-15:45.