Обещаю, это будет моим последним испытанием о плитах алмаза (какое-то время, во всяком случае). С другой стороны, этот вызов не имеет ничего общего с искусством ASCII, и он также не является гольф-кодом, так что это на самом деле совершенно другое.
Напоминаем, что каждый шестиугольник может быть назван тремя разными бриллиантами:
Интересный вопрос, который нужно задать, состоит в том, сколько таких плиток существует для данного размера шестиугольника. Кажется, что эти цифры были изучены довольно тщательно и могут быть найдены в OEIS A008793 .
Однако проблема усложняется, если мы спросим, сколько существует наклонов до поворота и отражения . Например, для длины стороны N = 2 существуют следующие 20 углов:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/\_\_\ /\_\_\ /\_\_\ /\_\_\ /_/\_\ /_/\_\ /\_\_\ /_/\_\ /_/\_\ /_/\_\
/\/\_\_\ /\/_/\_\ /\/_/_/\ /\/_/\_\ /\_\/\_\ /\_\/_/\ /\/_/_/\ /\_\/\_\ /\_\/_/\ /_/\/\_\
\/\/_/_/ \/\_\/_/ \/\_\_\/ \/_/\/_/ \/\_\/_/ \/\_\_\/ \/_/\_\/ \/_/\/_/ \/_/\_\/ \_\/\/_/
\/_/_/ \/_/_/ \/_/_/ \_\/_/ \/_/_/ \/_/_/ \_\/_/ \_\/_/ \_\/_/ \_\/_/
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/_/_/\ /\_\_\ /_/\_\ /_/_/\ /_/\_\ /_/\_\ /_/_/\ /_/_/\ /_/_/\ /_/_/\
/\_\_\/\ /\/_/_/\ /_/\/_/\ /\_\_\/\ /\_\/_/\ /_/\/_/\ /_/\_\/\ /\_\_\/\ /_/\_\/\ /_/_/\/\
\/\_\_\/ \/_/_/\/ \_\/\_\/ \/_/\_\/ \/_/_/\/ \_\/_/\/ \_\/\_\/ \/_/_/\/ \_\/_/\/ \_\_\/\/
\/_/_/ \_\_\/ \_\/_/ \_\/_/ \_\_\/ \_\_\/ \_\/_/ \_\_\/ \_\_\/ \_\_\/
Но многие из них идентичны при вращении и отражении. Если мы примем во внимание эти симметрии, останется только 6 различных элементов мозаичного изображения:
____ ____ ____ ____ ____ ____
/\_\_\ /\_\_\ /\_\_\ /_/\_\ /_/\_\ /_/\_\
/\/\_\_\ /\/_/\_\ /\/_/_/\ /\_\/_/\ /\_\/_/\ /_/\/\_\
\/\/_/_/ \/\_\/_/ \/\_\_\/ \/\_\_\/ \/_/\_\/ \_\/\/_/
\/_/_/ \/_/_/ \/_/_/ \/_/_/ \_\/_/ \_\/_/
2 2 6 6 1 3
где числа указывают на кратность каждой плитки. Обратите внимание, что для больших шестиугольников также есть мозаики с кратностями 4 и 12.
Похоже, что число наклона до симметрии изучено менее тщательно. Запись OEIS A066931 содержит только пять терминов:
1, 1, 6, 113, 20174
где первый член для длины стороны N = 0
и последний член для длины стороны N = 4
.
Я уверен, что мы можем сделать лучше, чем это!
Ваша задача - вычислить количество плиток для заданной длины стороны.
Это самый быстрый код . Ваша оценка будет наибольшей длиной сторон, N
для которой ваш код дает правильный результат в течение 30 минут на моей машине. В случае ничьей я приму представление, которое даст результат для этого N
самого быстрого.
Как обычно, вы не должны жестко кодировать результаты, которые вы уже знаете, чтобы выиграть тай-брейк. Решающий алгоритм N = 3
должен быть идентичен решающему N = 5
.
Ваша заявка не должна использовать более 4 ГБ памяти. Я дам некоторую свободу в этом, если вы работаете близко к этому пределу, но если вы постоянно превышаете этот предел, или если вы значительно превысили его, я не буду считать это N
для вашего представления.
Я протестирую все заявки на моем компьютере с Windows 8, поэтому убедитесь, что ваш язык свободно доступен в Windows. Единственное исключение - Mathematica (потому что у меня есть лицензия на него). Пожалуйста, включите инструкции о том, как скомпилировать / запустить ваш код.
Конечно, не стесняйтесь вычислять больше терминов в свое время (для науки и для других, чтобы сравнить их числа), но оценка вашего ответа будет определена через эти 30 минут.
источник
N = 6
выдает результат более 10 ^ 12, неконструктивное решение почти наверняка необходимо для достижения этой цели.Ответы:
Алгебра, теория графов, инверсия Мёбиуса, исследования и Java
Группа симметрии шестиугольника является диэдральной группой порядка 12 и создается поворотом на 60 градусов и зеркальным отражением поперек диаметра. У него 16 подгрупп, но некоторые из них находятся в нетривиальных группах сопряженности (те, которые имеют только отражения, имеют 3 варианта выбора оси), поэтому существует 10 принципиально различных симметрий, которые может иметь мозаика шестиугольника:
Количество алмазных мозаичных элементов в подмножестве треугольной решетки можно рассчитать как определитель , поэтому мой первоначальный подход заключался в том, чтобы установить один определитель для каждой из симметрий шестиугольника, чтобы рассчитать количество мозаичных элементов, которые имеют хотя бы эти симметрии. ; а затем с помощью инверсии Мёбиуса в алгебре инцидентности их множества (в основном, это обобщение принципа включения-исключения), чтобы вычислить число тайлингов, группа симметрии которых точно равна каждому из 10 случаев. Однако некоторые симметрии имеют неприятные граничные условия, поэтому я был вынужден суммировать по экспоненциальному множеству определителей. К счастью, значения, полученные для
n < 10
дал мне достаточно данных, чтобы иметь возможность идентифицировать соответствующие последовательности в OEIS и собрать воедино закрытую форму (для некоторого значения «закрытая», которая допускает конечные продукты). В формальной рецензии есть небольшая дискуссия о последовательностях и ссылки на доказательства, которые я подготовил, чтобы оправдать обновления последовательностей OEIS.Как только двойной счет учтен, получается, что четыре из десяти значений аккуратно удаляются, поэтому нам нужно только вычислить оставшиеся шесть и затем сделать взвешенную сумму.
Этот код занимает менее 30 секунд
N=1000
на моей машине.источник
С
Введение
Как прокомментировал Дэвид Каррахер, простейший способ анализа мозаики шестиугольника, по-видимому, заключается в том, чтобы воспользоваться его изоморфизмом с трехмерной диаграммой Юнга, по существу, квадратом x, y, заполненным целочисленными столбцами высоты, высота которых z должна оставаться неизменной или увеличиваться по мере приближения к оси Z.
Я начал с алгоритма нахождения итогов, который более приспособлен к адаптации для подсчета симметрии, чем опубликованный алгоритм, который основан на смещении к одной из трех декартовых осей.
Алгоритм
Я начинаю с заполнения ячеек плоскостей x, y и z единицами, а остальная часть области содержит нули. Как только это будет сделано, я создаю шаблон слой за слоем, где каждый слой содержит ячейки, которые имеют общее трехмерное манхэттенское расстояние от начала координат. Ячейка может содержать только 1, если три ячейки под ней также содержат 1. Если любая из них содержит 0, то ячейка должна быть 0.
Преимущество построения шаблона таким образом состоит в том, что каждый слой является симметричным относительно линии x = y = z. Это означает, что каждый слой можно проверить независимо на симметрию.
Проверка симметрии
Симметрии тела следующие: 3-кратное вращение вокруг линии x = y = z -> 3-кратное вращение вокруг центра шестиугольника; и 3 отражения по 3 плоскостям, содержащим линию x = y = z и каждую из осей x, y, z -> отражение по линиям через углы шестиугольника.
Это добавляет только 6-кратную симметрию. Чтобы получить полную симметрию шестиугольника, необходимо рассмотреть другой вид симметрии. Каждое тело (построено из 1) имеет дополнительное тело (построено из 0). Там, где N нечетно, дополнительное тело должно отличаться от исходного тела (потому что они не могут иметь одинаковое количество кубов). Тем не менее, когда дополнительное тело поворачивается, обнаруживается, что его двумерное представление в виде ромбовидной мозаики идентично (за исключением операции симметрии в 2 раза) исходному телу. Если N четное, тело может быть самообращенным.
Это можно увидеть в примерах для N = 2 в вопросе. Если смотреть слева, первый шестиугольник выглядит как сплошной куб с 8 маленькими кубиками, а последний шестиугольник выглядит как пустая оболочка с 0 маленькими кубиками. Если смотреть справа, обратное верно. 3-й, 4-й и 5-й шестиугольники и 16-й, 17-й и 18-й шестиугольники выглядят так, как будто они содержат либо 2, либо 6 кубов, и, таким образом, они дополняют друг друга в 3 измерениях. Они связаны друг с другом в двух измерениях с помощью операции симметрии в 2 раза (2-кратное вращение или отражение вокруг оси через края шестиугольника.) С другой стороны, 9-й, 10-й, 11-й и 12-й шестиугольники показывают трехмерные структуры, которые являются их собственными дополнениями и, следовательно, имеют более высокую симметрию (следовательно, это единственные модели с нечетной кратностью).
Обратите внимание, что наличие (N ^ 3) / 2 кубов является необходимым условием для самодополнения, но в целом оно не является достаточным условием, если N> 2. Результатом всего этого является то, что для нечетных N мозаики всегда происходят в парах (N ^ 3) / 2 куба должны быть тщательно проверены.
Текущий код (генерирует правильную сумму для N = 1,2,3,5. Ошибка, как обсуждалось для N = 4.)
Выход
Программа генерирует выходную таблицу из 8 записей в соответствии с 8 симметриями тела. Твердое тело может иметь любую из 4 симметрий следующим образом (обозначение Schoenflies)
Кроме того, когда тело имеет ровно половину ячеек с 1 и половину с 0, существует возможность перевернуть все 1 и 0, а затем инвертировать координаты через центр пространства куба. Это то, что я называю самодополнением, но более математический термин будет «антисимметричным по отношению к центру инверсии».
Эта операция симметрии дает 2-кратную ось вращения в шестиугольной плитке.
Шаблоны с такой симметрией перечислены в отдельном столбце. Они встречаются только там, где N четно.
Мой счет, кажется, немного для N = 4. В разговоре с Питером Тейлором выясняется, что я не обнаруживаю наклоны, которые имеют симметрию только линии, проходящей через ребра шестиугольника. Вероятно, это связано с тем, что я не проверял самодополнение (антисимметрию) для операций, отличных от (инверсия) x (тождество.) ) может раскрыть недостающие симметрии. Тогда я бы ожидал, что первая строка данных для N = 4 будет выглядеть следующим образом (на 16 меньше в c1 и еще 32 в C1):
Это приведет итоги в соответствие с ответом Питера и https://oeis.org/A066931/a066931.txt.
Токовый выход выглядит следующим образом.
Список дел (обновлено)
Готово, более или менее
Готово, результаты для нечетного N согласуются с опубликованными данными
Это можно сделать, добавив к рекурсивному вызову еще одно условие:
if(s1 && m<n*3-2)f(m + 1,e+d,s1)
оно сокращает время выполнения для N = 5 с 5 минут до примерно секунды. В результате первая строка выходных данных становится общим мусором (как и общие итоги), но если итог уже известен из OEIS, число асимметричных значений может быть восстановлено, по крайней мере, для нечетного N.Но даже для N число асимметричных (в соответствии с c3v-симметриями) тел, которые являются самодополняемыми, будет потеряно. Для этого случая может быть полезна отдельная программа, посвященная твердым телам с точно (N ** 3) / 2 ячейками с 1. Имея это в наличии (и считая правильно), можно попробовать N = 6, но для запуска потребуется много времени.
Не сделано, сбережения, как ожидается, будут незначительными
Готово, но, похоже, есть пропуски, см. N = 4.
Ожидается, что сбережения не будут такими большими. Подавление асимметричных фигур устраняет большинство из этого. Единственное отражение, которое проверяется, - это плоскость, проходящая через ось y (x и z вычисляются позже путем умножения на 3.) Фигуры только с симметрией вращения учитываются в обеих их энантиомерных формах. Возможно, он будет работать почти вдвое быстрее, если считать только один.
Интересно, но, вероятно, есть другие вопросы на сайте для изучения.
источник