В этой задаче вы будете считать псевдополисформы на квадратном фрагменте .
Я думаю, что эта последовательность еще не существует в OEIS , поэтому существует задача вычислить как можно больше терминов для этой последовательности.
Обновление: теперь это в OEIS, как A309159 : Количество обобщенных полиформ на квадратном фрагменте с n-ю ячейками.
Определения
Поверхностная мозаика представляет собой полурегулярную плитку плоскости, которая состоит из равносторонних треугольников и квадратов.
Псевдополимерная форма на мозаике с выпуклым квадратом представляет собой плоскую фигуру, построенную путем соединения этих треугольников и квадратов вдоль их общих сторон, аналогично полиомино. Вот пример псевдополикиформы с шестью ячейками и восьми ячеек:
Примеры
Ибо n = 1
есть две псевдополисформы с 1 ячейкой, а именно квадрат и треугольник:
Ибо n = 2
существуют две двухэлементные псевдополимформы, а именно квадрат с треугольником и двумя треугольниками.
Ибо n = 3
существуют четыре 3-клеточные псевдополимформы.
Вызов
Цель этой задачи состоит в том, чтобы вычислить как можно больше терминов в этой последовательности, которая начинается 2, 2, 4, ...
и где n-й член - это число псевдополимеров из n-ячеек вплоть до вращения и отражения.
Запустите ваш код столько, сколько захотите. Победителем этого конкурса станет пользователь, который отправит большинство терминов последовательности вместе со своим кодом. Если два пользователя публикуют одинаковое количество терминов, выигрывает тот, кто публикует свой последний термин раньше всех.
(Как только будет достаточно известных терминов, чтобы доказать, что эта последовательность еще не существует в OEIS, я создам запись в OEIS и внесу соавтора в список соавторов, если он или она пожелают.)
источник
Ответы:
Haskell
Теперь, когда не только документ с комментариями о том, что Питер Тейлор был первым, кто дал достаточно терминов для поиска в OEIS, я могу дать свои результаты.
Ранее я насчитал шестиугольные полиомино . За исключением некоторых оптимизаций, то, что я делаю здесь, очень похоже.
Элементы мозаики представлены следующим образом: Вы можете идти почти по прямой линии слева направо (на первом рисунке), чередуя квадраты и прямоугольники. Дальнейшие линии почти параллельны, покачиваясь в противоположных направлениях. Вместе они пропускают некоторые треугольники. Есть аналогичные почти прямые параллельные линии снизу вверх, содержащие пропущенные треугольники. Теперь игнорируйте покачивание и используйте декартову систему координат, но используйте только нечетные числа для координат квадратов. Тогда треугольники естественно получают координатные пары с одной четной и одной нечетной координатой. Пары с обеими координатами даже не представляют элементы мозаики.
(Вы также можете использовать четные числа для координат квадратов. Думаю, я решил так, потому что думал об отражении до вращения.)
Сохраните программу в файле с именем как
cgp.hs
и скомпилируйтеghc -O2 -o cgp cgp.hs
. Он принимает либо один числовой аргумент командной строки и вычисляет количество полиомино такого размера, либо ни одного, в этом случае он вычисляет значения до тех пор, пока не будет остановлен.Попробуйте онлайн!
источник
2, 2, 4, 10, 28, 79, 235, 720, 2254, 7146, 22927, 74137, 241461, 790838, 2603210, 8604861, 28549166, 95027832
Я собираюсь поставить кол в землю до того, как Кристиан Сиверс отправит ответ для n = 18. Это насколько я могу пойти с текущим кодом и 16 ГБ оперативной памяти. Мне уже пришлось пожертвовать некоторой скоростью, чтобы уменьшить использование памяти, и я собираюсь сделать это еще больше. У меня есть несколько идей ...
Этот фрагмент является SVG из первого комментария.
Код это C #. Я запускал его с .Net Core 2.2.6 под Linux.
источник