Skip to content

Latest commit

 

History

History
64 lines (41 loc) · 4.14 KB

HomeExercise.md

File metadata and controls

64 lines (41 loc) · 4.14 KB

Задание Облако тегов

Сделай форк этого репозитория. Добавь проект TagsCloudVisualization. Выполняй задания в этом проекте.

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

TagCloud

Задача 1 «Основная»

Реализуй в режиме TDD алгоритм раскладки со следующим интерфейсом:

class CircularCloudLayouter
{
  CircularCloudLayouter(Point center)
  Rectangle PutNextRectangle(Size rectangleSize)
}

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

Некоторые требования к раскладке:

  • Форма итогового облака должна быть близка к кругу с центром в точке center.
  • Прямоугольники не должны пересекаться друг с другом.
  • Облако должно быть плотным, чем плотнее, тем лучше.

Требования к тестам:

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

Лучше выполнить не все требования, но держать код и тесты в порядке, чем выполнить всё, но с неряшливым кодом и непонятными тестами.

Алгоритм для этой задачи можете выдумать самостоятельно или развить следующую несложную идею: Можно располагать прямоугольники по очереди вдоль достаточно плотной раскручивающейся спирали с центром в точке center. При позиционировании конкретного прямоугольника его можно дополнительно сдвинуть к центру так, чтобы облако тегов уплотнилось.

Задача 2 «Эстетическая»

Сделай визуализацию получившейся раскладки. Сгенерируй 2-3 раскладки с разными параметрами, сохрани изображения в репозитории и создай в директории проекта README.md файл включающий эти изображения.

Подсказки

  • Создать изображение new Bitmap(...).
  • Получить объект Graphics для рисования на изображении: Graphics.FromImage(bitmap).
  • Сохранить изображение в файл bitmap.Save(...).

Задача 3 «Иследовательская»

Исследуй возможности NUnit и сделай так, чтобы при падении любого теста на раскладку из первой задачи, создавался файл изображения раскладки и на консоль выводилась надпись Tag cloud visualization saved to file <path>

Это может упростить процесс отладки тестов.

Подсказка: ключевые слова TestContext, TearDown.