Результат работы - архив с исходными кодами приложения, который прикрепляется как решение задачи.

Важно. Если у проверяющего возникнет обоснованное предположение о совместном решении, тогда все участники получат неудовлетворительную оценку.

Проверяемые знания учащихся

  • Уровень знакомства с языком Ruby:
    • Запуск приложения.
    • Описание переменных и методов, их использование.
    • Работа с контейнерами, итераторами.
    • Описание собственных классов.
    • Знание деталей работы стандартных классов: чисел, строк.
    • Знание деталей вызова методов и указания их аргументов.
  • Уровень знакомства с экосистемой языка Ruby:
    • Проверка качества исходного кода с помощью Rubocop.

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

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

Задача лабораторной №1

Требуется реализовать приложение, работающее с треугольниками на плоскости. Каждый треугольник характеризуется цветом граничной линии (border-color), цветом заливки (field-color) и набором из трёх точек (points). Каждая точка характеризуется цветом (color) и целочисленными координатами на плоскости (coordinates). Начальная инициализация данных должна происходить из JSON-файла triangles.json.

После запуска приложения необходимо прочитать файл по известному местоположению и сохранить в память информацию о треугольниках. Для обработки файла можно использовать стандартную библиотеку json. Если файл отсутствует или не соответствует формату JSON, приложение должно выдать пользователю соответствующее сообщение и завершить работу.

После инициализации данных приложение должно вывести текстовое пользовательское меню:

  1. Список треугольников
  2. Фильтр по цвету границы
  3. Фильтр по цвету вершин
  4. Фильтр по периметру треугольника
  5. Фильтр по типу треугольника
  6. Количество треугольников внутри прямоугольника
  7. Сортировка по площади треугольника
  8. Сортировка по нижней левой вершине
  9. Поиск пар треугольников с общей вершиной
  10. Статистика по цветам
  11. Выход

Далее пользователь может выбрать пункт меню, указав его номер. После выполнения выбранного пользователем действия приложение должно заново показать меню.

1. Список треугольников

Вывести список всех треугольников в том же порядке, в котором они были записаны в файле. Для каждого треугольника указать цвет его границы, цвет заливки и список координат вершин.

2. Фильтр по цвету границы

Запросить у пользователя цвет, желательно (но необязательно) перечислить имеющиеся уникальные оттенки границ.

Для введённого или выбранного пользователем цвета вывести список треугольников с данным цветом границы. Цвета должны быть не чувствительны к регистру символов и наличию пробелов в начале и конце строки. Например, «red», «Red», « RED » и «rEd» должны считаться одним и тем же цветом.

3. Фильтр по цвету вершин

Запросить у пользователя цвет, желательно (но необязательно) перечислить имеющиеся уникальные оттенки вершин.

Вывести список треугольников, у которых хотя бы одна вершина раскрашена в введённый или выбранный пользователем цвет. Цвета должны быть не чувствительны к регистру символов и наличию пробелов в начале и конце строки. Например, «red», «Red», « RED » и «rEd» должны считаться одним и тем же цветом.

4. Фильтр по периметру треугольника

Запросить у пользователя нижнюю и верхнюю границы желаемого периметра треугольника. Вывести список треугольников, у которых периметр принадлежит введённому отрезку.

Формула для вычисления длины стороны представлена на изображении ниже.

5. Фильтр по типу треугольника

Запросить у пользователя тип треугольника (точки на прямой, остроугольный, прямоугольный, тупоугольный) и вывести список треугольников, соответствующий выбранному пользователем типу.

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

6. Количество треугольников внутри прямоугольника

Запросить у пользователя характеристики прямоугольника со сторонами, параллельными осям координат: координаты нижней левой вершины, ширину и высоту. Вывести количество треугольников, для которых все три вершины находятся внутри заданного пользователем прямоугольника.

7. Сортировка по площади треугольника

Вывести список всех треугольников, упорядоченный по площади.

Для вычисления площади треугольника рекомендуется использовать следующую формулу.

8. Сортировка по нижней левой вершине

Нижней левой вершиной треугольника назовём вершину с минимальной координатой по оси OX из всех вершин с минимальной координатой по оси OY.

Вывести все треугольники, отсортировав их по расположению нижней левой вершины слева направо снизу вверх. На рисунке приведён пример треугольников с отмеченной красным цветом нижней левой вершиной и пронумерованных в порядке сортировки по нижней левой вершине.

9. Поиск пар треугольников с общей вершиной

Вывести все пары треугольников, у которых хотя бы одна пара вершин имеют одинаковые координаты.

10. Статистика по цветам

Вывести статистику, в которой для всех использованных цветов будет указано три числа: количество треугольников с соответствующим цветом границы, заливки и хотя бы одной вершины.

11. Выход

Приложение должно завершать свою работу.