Skip to content

Latest commit

 

History

History
60 lines (41 loc) · 4.2 KB

HomeExercise.md

File metadata and controls

60 lines (41 loc) · 4.2 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.