Tangram является рассечение головоломки из семи форм: пять разного размера треугольников, параллелограмм и квадратная. При заданной форме цель состоит в том, чтобы воссоздать форму, используя все части и без наложения. Очевидно, существует бесконечно много способов расположить этот набор элементов на плоскости. Интересным подмножеством являются
Сетка Танграммы
Мы можем нарисовать «стандартный» квадрат Tangram в больший квадрат, который разделен сеткой на 16 меньших квадратов. Танграммы сетки - это просто фигуры, составленные из частей танграма, так что все вершины фигур находятся в точках сетки.
Это те головоломки Tangram, которые мы хотим рассмотреть в этой задаче, поскольку с ними, вероятно, легче справиться, чем с более общими.
В качестве примечания: в 1942 году китайские математики Цюань-Чин Сюн и Фу Трейнг Ван доказали, что существует только 13 выпуклых танграмм. Сначала они показали, что задача может быть сведена к сетчатым танграммам, а затем использовали некоторые комбинаторные и геометрические аргументы. Это все те 13:
Вызов
Учитывая разрешимую сетчатую танграмму, выведите разделение сетчатой танграммы на семь частей танграммы.
IO
Танграм дается как черно-белое изображение (форма черного цвета, фон белым), с обеих сторон, кратными 50px. Сетка имеет ширину ровно 50 пикселей. Линии сетки параллельны сторонам изображения.
РЕДАКТИРОВАТЬ: изображение может быть принято в качестве входных данных и возвращено в качестве выходных данных в любом удобном формате растровых изображений, таких как PNG, TIFF, PBM и т. Д., Но приемлемо представление в виде двоичного 2-мерного массива или строки или матрицы.
Выходные данные должны снова иметь одинаковый размер и снова иметь одинаковую форму, но с каждым элементом разного цвета или, альтернативно, с белыми линиями, разделяющими все элементы. Стоит отметить, что непрямоугольный четырехугольник можно перевернуть.
Пиксели на границе фигур не обязательно должны совпадать с пикселями на фигуре, также, если есть эффекты сглаживания или другой пух, это все еще хорошо.
Пример ввода и вывода:
Примеры:
Возможные решения:
Ответы:
BBC BASIC,
570 514490 байтов ASCIIСкачать переводчик можно по адресу http://www.bbcbasic.co.uk/bbcwin/download.html.
435 байт токенизированы
Полная программа отображает входные данные
L.bmp
на экране, а затем изменяет его, чтобы найти решение.объяснение
Обратите внимание, что в BBC basic расстояние 1 пиксель = 2 единицы, поэтому сетка 50x50 пикселей становится сеткой 100x100.
Мы используем рекурсивную функцию, чтобы поместить 2 больших треугольника, средний треугольник, квадрат и параллелограмм в форму. Более ранняя фигура в списке рисуется до того, как будет сделан следующий рекурсивный вызов. если рекурсивный вызов возвращается без поиска решения, более ранняя фигура перерисовывается черным, и пробуется новая позиция более ранней фигуры.
После того, как эти пять фигур нарисованы, размещение двух маленьких треугольников - это просто формальность. Однако необходимо нарисовать один из них, чтобы выделить их, если они имеют общее преимущество. Мы окрашиваем только один из двух маленьких треугольников. Другой оставлен в естественном черном цвете.
Попытка размещения каждой фигуры выполняется в разных координатах x, y и в 4 различных поворотах. Чтобы проверить, есть ли свободное место для рисования фигуры, мы используем шаблон ниже, с углами 45 градусов. Повороты сделаны примерно на
*
8 пикселей в 2 полукругах радиуса 9 и 81 единиц и падают на излучающие линии с нечетным кратным 22,5 градуса к осям x и y.Для большого треугольника все 8 пробелов должны быть чистыми. Для других форм только некоторые ячейки должны быть прозрачными, поэтому применяется маска.
Как только будет установлено, что форма будет соответствовать, она должна быть нарисована. Если это треугольник, с которым он нанесен
PLOT 85
, если это параллелограмм, число будет на 32 больше (обратите внимание, что дляPLOT
целей мы считаем квадрат специальным параллелограммом). В любом случае необходимо указать 3 последовательных вершины. Вторая вершина является источником формы (отмечена*
в приведенной выше таблице), за исключением случая большого треугольника, где (до вращения) она есть-1,-1.
. Другие 2 вершины могут иметь координаты x и y,-1,0 or 1
которые извлекаются из базы 3 закодированные числа, затем масштабируемые на 99 и поворачиваемые по мере необходимости путем преобразования с помощьюc
иs
.Код без правил
Выход
Это монтаж решений, найденных программой для тестовых случаев. Использование 99 вместо 100 для игры в гольф оставляет небольшие черные пробелы. Поскольку формы перерисовываются во время поиска, в некоторых случаях может потребоваться несколько секунд, и на них довольно интересно смотреть.
источник