задача
Задача состоит в том, чтобы выложить мозаику полигонов, учитывая конфигурацию вершины.
счет
Ваша оценка равна «уровню сложности», который достигает ваша заявка. Уровни сложности являются кумулятивными, это означает, что для достижения # 3 вы также должны поддерживать # 1 и # 2.
Представления на одинаковом уровне сложности отличаются количеством байтов; самые низкие победы.
вход
Ввод - это строка, содержащая конфигурацию вершины, представляющую фигуру вершины. То есть список целых чисел, разделенных точками, где каждое целое число (n) представляет собой обычный n-угольник, соединенный общей вершиной.
Должны поддерживаться следующие конфигурации вершин:
3.3.3.3.3.3
3.3.3.3.6
3.3.3.4.4
(обратите внимание, что порядок отражен на рисунке вершины, поэтому нижеследующее действительно отличается)3.3.4.3.4
3.12.12
3.4.6.4
3.6.3.6
4.4.4.4
4.6.12
4.8.8
6.6.6
Вывод - уровень сложности № 1: рисунок вершины
На этом уровне сложности вывод представляет собой изображение, показывающее фигуру вершины, соответствующую заданному вводу.
К входу добавляется знак, F
чтобы показать, что должна быть выведена фигура вершины, а не полный лист.
Например, F3.6.3.6
дает этот рисунок вершины:
Выход - Уровень сложности № 2: Черепица
На этом уровне сложности выводится изображение, показывающее равномерную мозаику с использованием числа вершин, соответствующего заданному входу.
Например, 3.6.3.6
дает этот лист:
Нет ограничений по цвету или формату (за исключением лазеек).
Выход - Уровень сложности № 3: Двойной тайлинг
На этом уровне сложности «двойная плитка» может быть сформирована из каждой плитки. Это достигается путем рисования линий от центра каждого многоугольника к центру каждого ограничивающего многоугольника.
Двойной лист задается путем добавления ввода с V
.
Например, V3.6.3.6
это двойная мозаика (красная):
3.3.3.4.4
3.3.4.4.3
3.4.4.3.3
4.4.3.3.3
4.3.3.3.4
. Должны ли мы поддерживать все синонимы или только лексически низший (как указано в вопросе)? Кроме того,3.3.3.3.6
существует в двух формах зеркального отображения. Я понимаю, что либо приемлемо.3.3.3.4.4
отсутствует, например. en.wikipedia.org/wiki/… точно соответствует вашему списку. Я понимаю, что контуры или заполненные многоугольники являются приемлемыми (или их комбинация?). Некоторые двойники уже есть в списке. Например4.4.4.4
является его собственным двойным и3.3.3.3.3.3
и6.6.6
являются mutally двойной. Поскольку двойники отображаются независимо от их родителей, я понимаю, что нет необходимости в правильном выравнивании с родителями.3.3.3.3.6
но как бы вы узнали, что это такое? :)Ответы:
BBC BASIC
Ред. 1 Гольф-код, 655 символов ASCII, размер файла токена 614
Некоторые существенные улучшения в таблице данных: хеширование строки
A.B..N
до числа(1*A+2*B+..n*N)+n
перед поиском и сохранение только одного вектора перевода (другой генерируется кодом.) Дополнительные пояснения, когда я закончу игру в гольф.Ред. 0 Гольф-код, 770 символов ASCII, размер файла маркеров 728
Все, что я сделал здесь, это удалил комментарии, ненужные пробелы и кавычки и поместил все в
DATA
одну строку. Там наверняка есть место для большего количества игры в гольф.объяснение
Это продолжение моего предыдущего ответа уровня 1, но я решил опубликовать его отдельно, потому что он довольно длинный.
Уровень 2
Это достигается путем перевода моих шаблонов "уровня 1.5" из моего предыдущего ответа. Два вектора трансляции для каждой плитки жестко закодированы. Я использую тот факт, что равнобедренный треугольник с основанием 80 и высотой 70 является очень хорошим приближением равностороннего треугольника, а прямоугольный треугольник с вектором гипотенузы
(56,56)
имеет длину гипотенузы, очень близкую к 80.Уровень 3
Чтобы построить дуалы, вместо того, чтобы рисовать ребро многоугольника, мы строим спицу от середины этого ребра до центра многоугольника. Он находится под прямым углом к краю и имеет длину
1/TAN/(PI/n)
вектора (u, v), которая, в свою очередь, вдвое меньше длины края.К сожалению, из-за того, что некоторые полигоны в мозаиках
3.3.3.3.6
и3.4.6.4
не нанесены в явном виде, они не будут построены, если мы только сделаем это. Поэтому спица также простирается наружу от многоугольника. Внешнее расширение контролируется переменнойo
.По умолчанию расширение является достаточным для достижения центра треугольника, но для
3.4.6.4
его необходимо расширить больше, чтобы нарисовать двойные квадраты, которые не отображаются в явном виде. Таким образом, расширение, достаточное для заполнения пропущенных квадратов, применяется, когда шестиугольники и треугольники отображаются явно, но нормальное расширение применяется, когда квадраты отображаются явно, чтобы избежать ложных линий в соседних треугольниках.Вот как они выглядят без расширений спиц. Отверстия в двойном узоре хорошо видны. Правильный вывод можно увидеть на главной картинке внизу ответа
Код комментирования
Отличия от моего предыдущего ответа указаны в строке
Выход
Программа выполняет только одну плитку или двойную для каждого запуска. Однако он отображает двойники в красном. Чтобы сэкономить место, я дважды запустил программу, не очищая экран, чтобы наложить двойное поверх обычного тайлинга.
источник
Mathematica
Уровень 1 содержит базовые шаблоны плиток, которые многократно штампуются для создания мозаики плоскости.
Уровень 2 делает плитки.
Есть еще 2 случая, которых я не смог достичь. Похоже, они требуют вращения, а также перевода.
Уровень 1: рисунок вершины (559 байт)
тестирование
Уровень 2: Черепица (690 дополнительных байтов)
Правила возвращают смещения и отступы для каждой конфигурации.
r
является основной функцией, которая выводит данныеp
показывает шаблон и соответствующую плитку. Пробелы соответствуют тем, которые не включены в шаблон.тестирование
Треугольная черепица
шестиугольный
квадрат
неизвестный
усеченный квадрат
trihexagonal
усеченный шестиугольный
неназванный
удлиненный треугольный
Tilings, чтобы выяснить
источник
3.3.3.3.3.3
вдвое, чтобы юниты перекрывались, вы можете избавиться от этих алмазов и исправить эту плитку. У вас еще есть чем заняться3.3.3.3.6
,3.4.6.4
и4.6.12
все же.4.6.12 anyone know what it should look like?
- Все необходимые материалы находятся на en.wikipedia.org/wiki/… . Смотрите мой комментарий по этому вопросу. Это страница, отличная от указанной в вопросе. Но4.6.12
также отображается на этой странице в любом случае.р
Шаг 1
Вот мои усилия по созданию плитки. Черепица, чтобы прийти дальше. Это не проверяет вводимые данные, поэтому инвалиды будут рисовать странные плитки. Ввод набирается после первой строки
Шаг № 1, № 2 и № 3: 1898
Наконец-то вернулись к этому. Большая часть этого занимает установка смещений и обработка особых случаев :). Редактировать: V флаг для парных теперь обрабатываются
Общий процесс:
Я, вероятно, все еще могу играть в гольф немного больше.
источник
BBC BASIC
Скачать эмулятор на http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
1-й уровень
Уровень 1.5
Уровень 1.5 - это мое собственное обозначение, но это важная веха в моем методе.
Перевод рисунков вершин не всегда приводит к правильному листу. В некоторых случаях строки отсутствуют.
Мое решение этого состоит в том, чтобы обойти самый большой многоугольник, рисуя число вершин для каждой второй вершины этого многоугольника. Это общее решение для всех случаев. Обратите внимание, что у самого большого многоугольника всегда есть четное число сторон, и фигура вершины часто чередуется по часовой стрелке / против часовой стрелки, когда ты идешь вокруг многоугольника. Это может быть наиболее ясно видно с
4.6.12
, но это также верно4.8.8
и для3.12.12
: при просмотре с любого конкретного 8-гонового или 12-гоночного чередования вершин являются зеркальным отображением друг друга. Это также то, что происходит, несколько менее очевидно, с3.3.3.4.4
и3.3.4.3.4
: при просмотре с любого конкретного квадрата чередующиеся вершины являются зеркальным отображением друг друга.Алгоритм, который я использую для перемещения двух сторон вокруг многоугольника, состоит в том, чтобы всегда выполнять 14 итераций цикла рисования ребер, независимо от того, сколько ребер имеет многоугольник. 8 - это коэффициент 16, поэтому при рисовании восьмиугольников графический курсор заканчивается на 16-14 = 2 вершины позади того места, где он начался. У всех 3, 4, 6 и 12 гонов есть стороны, которые имеют множители 12, поэтому графический курсор заканчивается на 14-12 = 2 вершины перед началом.
Цифры можно увидеть ниже. Завтра я надеюсь выработать правильные переводы, чтобы завершить работу. Во всех случаях проводятся достаточные линии для завершения уровня 2 только с переводами. В некоторых случаях рисуется намного больше, чем требуется минимум, но с перекрытием проблем нет: правила ничего не говорят о рисовании линий только один раз :-)
В общем, самый большой полигон является последним в списке. К сожалению, есть один случай, когда это не так:
3.4.6.4
поэтому фигура, нарисованная в этом случае, сосредоточена на квадрате, а не на шестиугольнике. Для завершения уровня 2 достаточно линий, используя только переводы, хотя будут определенные квадраты, которые не нарисованы явно. Это создаст некоторые проблемы на уровне 3 (к счастью, я думаю, что знаю, как решить эту проблему.) Точно так же с3.3.3.3.6
достаточным количеством линий для завершения уровня 2, используя только переводы, но будут определенные треугольники, которые не нарисованы явно.Код
Код для уровня 1.5 закомментирован, активирован только код для уровня 1. Есть четыре строки, начинающиеся с
REM
. Удалите этиREM
s, чтобы активировать уровень 1.5.Уровни 2 и 3
Смотрите мой другой ответ.
источник