У моих детей есть эта веселая игра под названием Spot It! Ограничения игры (насколько я могу описать):
- Это колода из 55 карт
- На каждой карточке 8 уникальных картинок (т.е. на карточке не может быть 2 одинаковых картинок)
- Учитывая любые 2 карты, выбранные из колоды, есть 1 и только 1 подходящая картинка .
- Соответствующие изображения могут быть по-разному масштабированы на разных картах, но это только усложняет игру (т. Е. Небольшое дерево по-прежнему соответствует большему дереву)
Принцип игры: переверните 2 карты, и тот, кто первым выберет подходящую картинку, получит очко.
Вот картинка для пояснения:
(Пример: из двух нижних карт выше видно, что соответствующее изображение - зеленый динозавр. Между изображением справа внизу и справа - голова клоуна.)
Я пытаюсь понять следующее:
Какое минимальное количество различных изображений требуется для соответствия этим критериям и как бы вы это определили?
Используя псевдокод (или Ruby), как бы вы сгенерировали 55 игровых карт из массива из N картинок (где N - минимальное число из вопроса 1)?
Обновить:
Снимки происходят более чем в два раза на одну колоду (вопреки тому, что некоторые предполагали). Посмотрите на эту картинку из 3 карт, каждая с молнией:
источник
Ответы:
Конечные проективные геометрии
В аксиомах о проективной (плоскости) геометрии немного отличаются от евклидовой геометрии:
Теперь добавьте «конечный» в суп, и у вас возникнет вопрос:
Можем ли мы получить геометрию всего с 2 точками? С 3 баллами? С 4? С 7?
Есть еще открытые вопросы относительно этой проблемы, но мы знаем это:
Q
точками, тоQ = n^2 + n + 1
иn
называетсяorder
геометрия.n+1
точки в каждой строке.n+1
линии.Общее количество строк также
Q
.И, наконец, если
n
простое число, то существует геометрия порядкаn
.Можно спросить, какое отношение это имеет к головоломке.
Поставь
card
вместоpoint
аpicture
вместоline
и аксиомы ставим:Теперь, давайте возьмем,
n=7
и мы имеемorder-7
конечную геометрию сQ = 7^2 + 7 + 1
. Это делаетQ=57
линии (картинки) иQ=57
точки (карты). Я предполагаю, что создатели головоломки решили, что 55 - больше круглое число, чем 57, и оставили 2 карты.Мы также получаем
n+1 = 8
, поэтому из каждой точки (карты) проходит 8 линий (появляется 8 изображений), и каждая линия (изображение) имеет 8 точек (появляется в 8 картах).Вот представление самой известной конечной проективной (порядка 2) плоскости (геометрии) с 7 точками, известной как плоскость Фано , скопированной со страницы Ноэль Эванс - Проблема конечной геометрии
Я думал о создании образа, который объяснил бы, как вышеупомянутая плоскость порядка 2 могла бы сделать похожую головоломку с 7 картами и 7 картинками, но затем ссылка из вопроса-близнеца math.exchange имеет именно такую диаграмму: Dobble-et- ла-Geometrie-finie
источник
every two cards have exactly one picture in common
, изложенная в вопросе. Во-вторыхfor every two pictures there is exactly one card that has both of them
, ОП может сказать нам, удовлетворяет ли игровой набор.Для тех, у кого проблемы с изображением геометрии проективной плоскости с 57 точками, есть действительно хороший, интуитивно понятный способ построить игру с 57 картами и 57 символами (основываясь на ответе Ювала Фильмуса на этот вопрос ):
В этом примере я возьму одну линию с наклоном ноль (красный) и одну линию с наклоном 1 (зеленый). Они пересекаются ровно в одной общей точке (сова).
Этот метод гарантирует, что любые две карты имеют ровно один общий символ, потому что
Таким образом, мы можем построить карты 7х7 (7 смещений и 7 уклонов).
Мы также можем построить семь дополнительных карт из вертикальных линий через сетку (т.е. взяв каждый столбец). Для них используется значок наклона бесконечности.
Поскольку каждая карта состоит из семи символов из сетки и ровно одного символа «уклон», мы можем создать одну дополнительную карту, которая просто состоит из всех 8 символов уклона.
Это оставляет нам 7x8 + 1 = 57 возможных карт и 7 x 7 + 8 = 57 необходимых символов.
(Естественно, это работает только с сеткой размером с простое число (например, n = 7). В противном случае линии с другим наклоном могут иметь ноль или более одного пересечения, если уклон является делителем размера сетки.)
источник
Таким образом, есть k = 55 карт, содержащих m = 8 изображений каждая из общего количества n изображений. Мы можем переформулировать вопрос : "Сколько фотографии п нужны ли нам, так что мы можем построить множество K карт только с одной общей картиной между любой парой карт? эквивалентно спрашивая:
Существует ровно ( n выбрать m ) возможных векторов, из которых можно построить пары. Таким образом, нам нужно по крайней мере достаточно большое n, чтобы ( n выбрать m )> = k . Это просто нижняя граница, поэтому для выполнения ограничения парной совместимости нам, возможно, понадобится намного большее n .
Просто чтобы немного поэкспериментировать, я написал небольшую программу на Haskell для вычисления правильных наборов карт:
Редактировать: Я только что понял, увидев решение Нейла и Гаджета, что алгоритм, который я использую, не всегда находит наилучшее из возможных решений, поэтому все нижеприведенное не обязательно верно Я постараюсь обновить свой код в ближайшее время.
Результирующее максимальное количество совместимых карт для m = 8 изображений на карту для различного количества изображений на выбор n для первых нескольких n выглядит следующим образом:
Этот метод грубой силы не очень далеко, хотя из-за комбинаторного взрыва. Но я подумал, что это все еще может быть интересно.
Интересно, что , кажется , что для данного м , K увеличивается с ростом п только до некоторого п , после чего она остается постоянной.
Это означает, что для каждого количества картинок на карточке есть определенное количество картинок на выбор, что приводит к максимально возможному количеству легальных карточек. Добавление большего количества картинок на выбор из этого оптимального числа больше не увеличивает количество легальных карточек.
Первые несколько оптимальных k :
источник
Другие описали общие рамки для проектирования (конечная проективная плоскость) и показали, как генерировать конечные проективные плоскости простого порядка. Я просто хотел бы заполнить некоторые пробелы.
Конечные проективные плоскости могут быть сгенерированы для многих различных порядков, но они наиболее просты в случае простого порядка
p
. Тогда целые числа по модулюp
образуют конечное поле, которое можно использовать для описания координат точек и линий на плоскости. Есть 3 различных видов координат для точек:(1,x,y)
,(0,1,x)
, и(0,0,1)
, гдеx
иy
может принимать значения от0
доp-1
. 3 различных вида точек объясняют формулуp^2+p+1
для количества точек в системе. Мы также можем описать линии с теми же 3 -х различных видов координат:[1,x,y]
,[0,1,x]
и[0,0,1]
.Мы вычисляем, являются ли точка и линия инцидентными, равно ли произведение точек их координат на 0 mod
p
. Так, например, точка(1,2,5)
и линия[0,1,1]
инцидентны с техp=7
пор1*0+2*1+5*1 = 7 == 0 mod 7
, как , но точка(1,3,3)
и линия[1,2,6]
не инцидентны с тех пор1*1+3*2+3*6 = 25 != 0 mod 7
.В переводе на язык карточек и картинок это означает, что карточка с координатами
(1,2,5)
содержит картинку с координатами[0,1,1]
, но карточка с координатами(1,3,3)
не содержит картинку с координатами[1,2,6]
. Мы можем использовать эту процедуру для разработки полного списка карточек и изображений, которые они содержат.Кстати, я думаю, что проще воспринимать картинки как точки, а карты как линии, но в проективной геометрии между точками и линиями есть двойственность, поэтому это действительно не имеет значения. Однако в дальнейшем я буду использовать точки для картинок и линии для карточек.
Та же самая конструкция работает для любого конечного поля. Мы знаем, что существует конечное поле порядка
q
тогда и только тогдаq=p^k
, когда это простая степень. Поле называетсяGF(p^k)
"Галуа поле". Поля не так просто построить в простом степенном случае, как в простом случае.К счастью, тяжелая работа уже выполнена и реализована в свободном программном обеспечении, а именно в Sage . Например, чтобы получить проективный проект плоскости 4, просто наберите
и вы получите вывод, который выглядит как
Я интерпретирую вышесказанное следующим образом: есть 21 изображение, помеченное от 0 до 20. Каждый из блоков (линия в проективной геометрии) говорит мне, какие изображения появляются на карте. Например, первая карта будет иметь изображения 0, 1, 2, 3 и 20; вторая карта будет иметь изображения 0, 4, 8, 12 и 16; и так далее.
Система порядка 7 может быть сгенерирована
который генерирует вывод
источник
Я только что нашел способ сделать это с 57 или 58 фотографиями, но сейчас у меня очень сильная головная боль, я выложу код рубина через 8-10 часов после того, как я выспался! просто подсказка мое решение Каждые 7 карт имеют одинаковую оценку, и с помощью моего решения можно построить 56 карт.
Вот код, который генерирует все 57 карт, о которых говорил ypercube. он использует ровно 57 картинок, и извините, я написал настоящий код C ++, но, зная, что
vector <something>
это массив, содержащий значения типаsomething
, легко понять, что делает этот код. и этот код генерируетP^2+P+1
карточки с использованиемP^2+P+1
изображений, каждое из которых содержитP+1
изображение и совместно использует только 1 общее изображение для каждого простого значения P. это означает, что мы можем иметь 7 карт, используя 7 изображений, каждое из которых имеет 3 изображения (для p = 2), 13 карт, используя 13 изображений (для p = 3), 31 карту, используя 31 изображение (для p = 5), 57 карт для 57 изображений (для р = 7) и так далее ...еще раз извините за задержанный код.
источник
p=4
? (и 21 карта / картинки)Вот решение Gajet на Python, так как я считаю Python более читабельным. Я изменил его так, чтобы он работал и с не простыми числами. Я использовал Thies Insight для создания более понятного кода дисплея.
С выходом:
источник
(p) + (p * p) + (1)
конфигурации.all p except 4 and 6
. Если вы хотите создать конечную плоскость, в которой естьp*p+p+1
точки и линии (карты и рисунки), то это связаноfinite fields
и не связаноrings
. Есть конечные поля порядка,p
когда рprime
или аprime power
. Ваш код работает правильно для простых чисел, потому что выражения типаk * p + (j + i * k) % p
выражаютсяk*p + j + i*k
в терминах умножения и сложения в конечном поле порядкаp
.p^2
,p^3
и т.д. Таким образом, он будет работать4, 8, 9, 16, 25, 27, ...
Используя
z3
доказательство теоремыПозвольте
P
быть количество символов на карту. Согласно этой статье иypercubeᵀᴹ
ответу естьN = P**2 - P + 1
карты и символы соответственно. Колода карт может быть представлена с ее матрицей инцидентности, которая имеет строку для каждой карты и столбец для каждого возможного символа. Его(i,j)
элемент,1
если на картеi
есть символj
. Нам нужно только заполнить эту матрицу с учетом этих ограничений:P
P
Это означает
N**2
переменные иN**2 + 2*N + (N choose 2)
ограничения. Кажется, что это можно сделать за очень короткое время приz3
небольших затратах.редактировать : к сожалению, P = 8 кажется слишком большим для этого метода. Я убил процесс после 14 часов вычислений.
Полученные результаты
источник
Мне очень нравится эта тема. Я строю этот проект на github python с частями этого кода, чтобы рисовать пользовательские карты в формате png (так что можно заказать пользовательские карточные игры в интернете).
https://github.com/plagtag/ProjectiveGeometry-Game
источник
Я написал статью о том, как генерировать такие колоды с помощью кода на Perl. Код не оптимизирован, но, по крайней мере, способен генерировать колоды "разумных" заказов ... и некоторые другие.
Вот пример с порядком 8, который должен учитывать немного более сложную базовую математику, потому что 8 не является простым, хотя действительный порядок для генерации таких колод. См. Выше или статью для более подробного объяснения, ниже, если вы просто хотите создать немного более сложный Spot-It :-)
Каждый идентификатор от
0
до72
может быть прочитан как идентификатор карты и как идентификатор изображения. Например, последняя строка означает, что:72
содержит фотографии2
,13
,22
, ...,59
,68
, и72
появляется в картах2
,13
,22
, ...,59
, и68
.источник