Вы должны написать программу или функцию, которая получает строку, описывающую этаж в качестве входных данных, и выводит или возвращает область простейшего мета-тайлинга, которая может создать заданный шаблон этажа.
Пол является частью квадратной сетки. Каждая квадратная плитка окрашена либо в лазурный, либо в черный цвет (представлена a
и b
на входе).
Пример этаж:
aaaa
ababab
aaaaa
Мета-черепица
- построен из
N
поM
прямоугольной мета-плитке лазурных и черных квадратов - используемые мета-плитки идентичны до перевода (вы не можете вращать или отражать их)
- если стороны двух мета-плиток соединены, они должны соединиться по всей их длине (т.е. мета-тайлы разбивают пространство по сетке)
Пример мета-плитки:
ba
aa
и мета-тайлинг, созданный им:
.
.
.
babababa
aaaaaaaa
... babababa ...
aaaaaaaa
babababa
aaaaaaaa
.
.
.
Эта мета-мозаика создает верхний показанный этаж, как показывают левые буквы:
.
.
.
********
***aaaa*
... *ababab* ...
*aaaaa**
********
********
.
.
.
Мета-мозаика проще, чем другая, если область ее мета-мозаики меньше. Наш пример имеет площадь, 2*2 = 4
которая является наименьшей возможной для пола примера. Таким образом, вывод должен быть 4
для примера.
вход
- Строка, состоящая из символов
a b space
иnewline
содержащая хотя бы одинa
илиb
. - Буквы (
ab
) образуют одну 4-связную (бок о бок) форму. - В начале строк не будет лишних пробелов, т.е. будет хотя бы одна строка, начинающаяся с
a
илиb
. Вы можете выбрать один из двух форматов ввода:
- Нет лишних пробелов в конце строк (как видно из примеров).
- Пробелы с правой стороны строк, чтобы все строки имели одинаковую длину с самой длинной строкой.
Трейлинг новой строки необязателен
Вывод
- Единственное целое число, область наименьшего возможного мета-тайла, чья мозаика содержит входной этаж.
Примеры
Примеры ограничены тире. Три части примера - это ввод, вывод и одна из возможных наименьших мета-плиток.
a
1
a
-----------------
aaaa
aaa
a
1
a
-----------------
aabaab
abaa
aaba
6
aab
aba
-----------------
aabaab
a a a
aabab
18
aabaab
aaaaaa
aababa
-----------------
ba
aaab
8
baaa
aaab
-----------------
aaaa
ababb
aaaa
10
aaaaa
ababb
-----------------
a aa
ab ba
aba
6
aa
ab
ba
-----------------
aaaa
abab
aaaa
4
aa
ab
-----------------
ba
ba
b
4
ba
ab
-----------------
baa
aba
aab
9
baa
aba
aab
-----------------
aaaa
aabaa
aaaa
6
aaa
aab
Это код гольф, поэтому выигрывает самый короткий вход.
Ответы:
C - 208 байтов
Эквивалентный код перед игрой в гольф:
Алгоритм является довольно грубой силой, поэтому должно быть достаточно очевидно, как он работает на основе кода. В любом случае, вот несколько комментариев:
q
. Выход сreturn
мета-плитки, когда пол может покрыть пол. Обратите внимание, что циклу не нужно другое условие выхода, поскольку всегда есть решение (наихудший случай - размер ввода).if
перечисляют допустимые комбинации ширины / высоты мета-тайла для размераq
.u
является индексом в мета-тайле, который соответствует тайлу пола.a
илиb
отличаются (суммаa = 97
иb = 98
есть195
), существует несоответствие, и размер мета-мозаики с указанными размерами не будет работать.a
илиb
, цвет мозаичного изображения копируется в мета-мозаику-кандидат.Используемый тестовый код:
Вывод:
источник