Было доказано, что следующие 13 квадратных плиток Ванга всегда апериодически покрывают плоскость . Это означает, что когда квадраты расположены в виде сетки со всеми соседними сторонами одного цвета, перевод шаблона никогда не будет совпадать с самим собой.
Мы представим каждую плитку в текстовом виде сеткой 3 × 3, заполненной пробелами в центре и углах, а также числами от 1 до 5 вместо цветов красного, зеленого, синего, желтого, серого по краям:
2 2 2 1 1 1 4 3 2 2 4 3 2
1 2 1 3 2 3 2 1 3 1 3 2 4 4 4 4 4 5 4 5 5 5 5 5 5 4
3 2 3 2 3 2 1 2 1 4 1 2 2
Цель
Ваша задача - написать программу, которая принимает ширину и высоту и выводит действительную сетку тайлов Wang с этими размерами. Действительным является тот, в котором все смежные края плиток имеют одинаковый цвет (или номер). Победит самая маленькая программа в байтах.
Ваш ввод должен исходить из аргументов stdin или командной строки, а вывод должен идти в stdout. Точный формат ввода может быть чем угодно, например >>> wangtiler 3 2
. Ширина и высота всегда являются положительными целыми числами.
Пример (ширина = 3, высота = 2)
Обратите внимание, что когда мы размещаем текстовые плитки, соседние ребра образуют необходимые избыточные пары цифр:
1 2 1
2 11 22 1
2 3 2
2 3 2
4 55 55 4
1 2 2
(Это НЕ правильный формат вывода.)
Мы можем сжать их горизонтально и вертикально, чтобы получить:
1 2 1
2 1 2 1
2 3 2
4 5 5 4
1 2 2
Этот сжатый формат является правильным выходным форматом, который вы должны использовать. Нечетные пронумерованные строки должны включать их завершающий пробел.
Графический бонус
Вместо текстового вывода ваша программа может выводить изображение мозаичной сетки. Графические плитки должны состоять из четырех 45-45-90 треугольников, расположенных в виде квадрата, и использовать пять легко различимых цветов, таких как плитки выше. Черные границы не требуются. Размер графических плиток должен быть не менее 32 × 32 пикселей. К ним не применяется "сжатие".
Пример бонусного изображения: (та же сетка, что и в примере выше)
Бонус стоит минус 150 байт.
Заметки
- Вы должны использовать этот набор из 13 плиток.
- Плитка не может быть повернута.
- Плитки могут появляться любое количество раз (в том числе ни одного).
- Вы можете предположить, что возможна допустимая плитка с любыми размерами.
источник
Ответы:
GolfScript, 200 символов
Версия ASCII без графического вывода. Дайте вход по STDIN - попробуйте здесь . Код использует простой подход возврата и заполняет пространство построчно.
Примеры:
Графический бонус, оценка 122, 272 персонажа - 150 бонусов
Тот же базовый код с другим форматом вывода. Вывод - это изображение в формате PPM (т.е. просто перенаправить вывод в файл
image.ppm
). Цвета немного отличаются от плиток в вопросе, но четко различимы (1-> синий, 2-> зеленый, 3-> голубой, 4-> красный, 5-> пурпурный).Пример 16x12:
источник
Python (565 - 150 = 415)
Кстати ... кажется, что мы не можем наивно просто определить следующую плитку по ее левой и верхней плитке. Там есть какая-то комбинация плиток, которые будут подходить друг другу.
Это решение заполняет левые -> правые, верхние -> грубые силы всех возможных комбинаций и откатов, если плитка не может поместиться.
Для получения дополнительной информации о 13 доказательствах плитки: апериодический набор из 13 плиток Ванга
Ширина и высота указываются
W
иH
Красный, зеленый, синий, желтый и Noir определяется
R
,G
,B
,Y
иN
Выход. Не фактическая цветовая схема ... Потому что слишком яркий. Это может сделать некоторые интересные модели декора интерьера ...:
источник
Haskell, 208 байт
Нет поиска, только математика. Пример выполнения: дано
(8,5)
на stdin, выходные данныеЗапустить онлайн на Ideone
источник