Brain warm-up #2: Кроссворд

Build Status

Вася тренируется составлять кроссворды. Пока он умеет составлять кроссворды только очень простого вида. Все они состоят ровно из шести слов, слова можно читать только сверху вниз по вертикали и слева направо по горизонтали. Слова расположены в виде прямоугольной восьмерки, не обязательно симметричной. Восьмерка упирается одной половиной в левый верхний угол, а другой — в правый нижний угол некоторого прямоугольника. Кроссворд не может вырождаться, т. е. в нем всегда содержится ровно четыре пустые области, две из которых окружены буквами. В качестве примеров смотрите входные/выходные данные в провайдерах данных для тестов.

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

Входные данные

В шести строках записаны заданные слова. Каждое слово состоит не более чем из 30 и не менее чем из 3 больших латинских букв.

Выходные данные

Если решения не существует, возвращайте false. Иначе выведите искомый кроссворд. Все пустые клетки обозначайте точками.

Если решений несколько, выведите лексикографически наименьшее. Т. е. то решение, первая строчка которого меньше первой строчки других. При равенстве первых строк, сравнивайте вторые и т. д.

Прототип задачи стянут с codeforces.ru

Workflow

  • Форкаем репозиторий, создаем бранч вида %login%-solution.
  • Запускаем в корне composer install для автозагрузки классов
  • Копируем заготовку из папки dist\* в папку src\*, меняем везде YourGitHubLogin на свой логин от GitHub (не забываем об PSR-0)
  • Пишем код, запускаем тесты (просто phpunit в папке с проектом), и т.д.
  • Проверяем стиль кода через phpcs, отсутствие дубликатов черех phpcpd (пример смотреть в .travis.yml)
  • Когда все тесты проходят, комментарии написаны, код отрефакторен — отправляем PR в master-ветку.