Meine Kinder haben dieses lustige Spiel namens Spot It! Die Spielbeschränkungen (so gut ich beschreiben kann) sind:
- Es ist ein Kartenspiel mit 55 Karten
- Auf jeder Karte befinden sich 8 einzigartige Bilder (dh eine Karte kann nicht 2 gleiche Bilder enthalten).
- Bei 2 Karten, die aus dem Stapel ausgewählt wurden, gibt es 1 und nur 1 passendes Bild .
- Übereinstimmende Bilder können auf verschiedenen Karten unterschiedlich skaliert werden, was das Spiel jedoch nur erschwert (dh ein kleiner Baum passt immer noch zu einem größeren Baum).
Das Prinzip des Spiels ist: Wirf 2 Karten um und wer zuerst das passende Bild auswählt, bekommt einen Punkt.
Hier ist ein Bild zur Verdeutlichung:
(Beispiel: Auf den beiden unteren Karten oben sehen Sie, dass das passende Bild der grüne Dinosaurier ist. Zwischen dem Bild unten rechts und der Mitte rechts befindet sich der Kopf eines Clowns.)
Ich versuche Folgendes zu verstehen:
Wie viele verschiedene Bilder sind mindestens erforderlich, um diese Kriterien zu erfüllen, und wie würden Sie dies bestimmen?
Wie würden Sie mit Pseudocode (oder Ruby) 55 Spielkarten aus einem Array von N Bildern generieren (wobei N die Mindestanzahl aus Frage 1 ist)?
Aktualisieren:
Bilder kommen mehr als zweimal pro Deck vor (im Gegensatz zu dem, was einige vermutet haben). Sehen Sie dieses Bild von 3 Karten mit jeweils einem Blitz:
quelle
Antworten:
Endliche projektive Geometrien
Die Axiome der projektiven (ebenen) Geometrie unterscheiden sich geringfügig von der euklidischen Geometrie:
Fügen Sie nun "endlich" in die Suppe ein und Sie haben die Frage:
Können wir eine Geometrie mit nur 2 Punkten haben? Mit 3 Punkten? Mit 4? Mit 7?
Es gibt noch offene Fragen zu diesem Problem, aber wir wissen dies:
Q
Punkten gibt, dannQ = n^2 + n + 1
undn
wird dieorder
der Geometrie genannt.n+1
In jeder Zeile gibt es Punkte.n+1
Linien.Die Gesamtzahl der Zeilen beträgt ebenfalls
Q
.Und schließlich, wenn
n
es Primzahl ist, gibt es eine Geometrie der Ordnungn
.Was hat das mit dem Puzzle zu tun?
Setzen Sie
card
stattpoint
undpicture
stattline
und die Axiome werden:Nehmen
n=7
wir nun und wir haben dieorder-7
endliche Geometrie mitQ = 7^2 + 7 + 1
. Das machtQ=57
Linien (Bilder) undQ=57
Punkte (Karten). Ich denke, die Puzzler haben entschieden, dass 55 eine rundere Zahl als 57 ist und 2 Karten ausgelassen.Wir erhalten auch
n+1 = 8
, so dass von jedem Punkt (Karte) 8 Linien vergehen (8 Bilder erscheinen) und jede Linie (Bild) 8 Punkte hat (erscheint in 8 Karten).Hier ist eine Darstellung der berühmtesten endlichen projektiven Ebene (Ordnung 2) (Geometrie) mit 7 Punkten, bekannt als Fano-Ebene , kopiert von Noelle Evans - Finite Geometry Problem Page
Ich dachte daran, ein Bild zu erstellen, das erklärt, wie die obige Ebene der Ordnung 2 mit 7 Karten und 7 Bildern zu einem ähnlichen Puzzle gemacht werden kann, aber dann hat ein Link aus der Zwillingsfrage math.exchange genau ein solches Diagramm: Dobble-et- la-geometrie-finie
quelle
every two cards have exactly one picture in common
wird in der Frage angegeben. Das 2.for every two pictures there is exactly one card that has both of them
, das OP kann uns sagen, ob das Spielset es erfüllt.Für diejenigen, die Probleme haben, sich die Geometrie der projektiven Ebene mit 57 Punkten vorzustellen, gibt es eine wirklich schöne, intuitive Möglichkeit, das Spiel mit 57 Karten und 57 Symbolen zu konstruieren (basierend auf der Antwort von Yuval Filmus auf diese Frage ):
Im Beispiel nehme ich eine Linie mit Steigung Null (rot) und eine mit Steigung 1 (grün). Sie schneiden sich an genau einem gemeinsamen Punkt (der Eule).
Diese Methode stellt sicher, dass zwei beliebige Karten genau ein gemeinsames Symbol haben, weil
Auf diese Weise können wir 7x7-Karten (7 Offsets und 7 Steigungen) konstruieren.
Wir können auch sieben zusätzliche Karten aus vertikalen Linien durch das Gitter konstruieren (dh jede Spalte nehmen). Für diese wird das Unendlichkeitssteigungssymbol verwendet.
Da jede Karte aus sieben Symbolen aus dem Raster und genau einem "Steigungssymbol" besteht, können wir eine zusätzliche Karte erstellen, die einfach aus allen 8 Steigungssymbolen besteht.
Dies lässt uns 7x8 + 1 = 57 mögliche Karten und 7 x 7 + 8 = 57 erforderliche Symbole.
(Dies funktioniert natürlich nur mit einem Raster mit Primzahlgröße (z. B. n = 7). Andernfalls können Linien mit unterschiedlicher Steigung null oder mehr als einen Schnittpunkt haben, wenn die Steigung ein Teiler der Rastergröße ist.)
quelle
Es gibt also k = 55 Karten mit jeweils m = 8 Bildern aus einem Pool von insgesamt n Bildern. Wir können die Frage neu formulieren : Wie viele Bilder n brauchen wir, damit wir einen Satz konstruieren k Karten mit nur einem gemeinsamen Bild zwischen zwei beliebigen Karten? " gleichwertig mit der Frage:
Es gibt genau ( n wähle m ) mögliche Vektoren, aus denen Paare gebildet werden können. Wir brauchen also mindestens ein ausreichend großes n, damit ( n wähle m )> = k . Dies ist nur eine Untergrenze. Um die paarweise Kompatibilitätsbedingung zu erfüllen, benötigen wir möglicherweise ein viel höheres n .
Nur um ein bisschen zu experimentieren, habe ich ein kleines Haskell-Programm geschrieben, um gültige Kartensätze zu berechnen:
Bearbeiten: Ich habe gerade festgestellt, nachdem ich Neils und Gajets Lösung gesehen habe, dass der von mir verwendete Algorithmus nicht immer die bestmögliche Lösung findet, daher ist nicht unbedingt alles unten gültig. Ich werde versuchen, meinen Code bald zu aktualisieren.
Die resultierende maximale Anzahl kompatibler Karten für m = 8 Bilder pro Karte für eine unterschiedliche Anzahl von Bildern zur Auswahl aus n für die ersten n sieht folgendermaßen aus:
Diese Brute-Force-Methode kommt jedoch aufgrund der kombinatorischen Explosion nicht sehr weit. Aber ich dachte, es könnte immer noch interessant sein.
Interessanterweise scheint es , dass für gegebenen m , k steigt mit n nur bis zu einem bestimmten n , wonach er konstant bleibt.
Dies bedeutet, dass für jede Anzahl von Bildern pro Karte eine bestimmte Anzahl von Bildern zur Auswahl steht, was zu einer maximal möglichen Anzahl von legalen Karten führt. Durch Hinzufügen weiterer Bilder zur Auswahl dieser optimalen Anzahl wird die Anzahl der legalen Karten nicht weiter erhöht.
Die ersten optimalen k sind:
quelle
Andere haben den allgemeinen Rahmen für das Design (endliche projektive Ebene) beschrieben und gezeigt, wie endliche projektive Ebenen erster Ordnung erzeugt werden können. Ich möchte nur einige Lücken füllen.
Endliche projektive Ebenen können für viele verschiedene Ordnungen erzeugt werden, sind jedoch im Fall der Primordnung am einfachsten
p
. Dann bilden die ganzen Zahlen modulop
ein endliches Feld, mit dem Koordinaten für die Punkte und Linien in der Ebene beschrieben werden können. Es gibt 3 verschiedene Arten von Koordinaten für Punkte:(1,x,y)
,,(0,1,x)
und(0,0,1)
, wox
undy
können Werte von0
bis annehmenp-1
. Die 3 verschiedenen Arten von Punkten erklären die Formelp^2+p+1
für die Anzahl der Punkte im System. Wir können auch Linien mit den gleichen drei verschiedenen Arten von Koordinaten beschreiben:[1,x,y]
,[0,1,x]
, und[0,0,1]
.Wir berechnen, ob ein Punkt und eine Linie einfallen, indem wir feststellen, ob das Punktprodukt ihrer Koordinaten gleich 0 mod ist
p
. So fallen zum Beispiel der Punkt(1,2,5)
und die Linie ein,[0,1,1]
wennp=7
seitdem1*0+2*1+5*1 = 7 == 0 mod 7
, aber der Punkt(1,3,3)
und die Linie fallen[1,2,6]
seitdem nicht ein1*1+3*2+3*6 = 25 != 0 mod 7
.In die Sprache der Karten und Bilder übersetzen bedeutet, dass die Karte mit den Koordinaten
(1,2,5)
das Bild mit den Koordinaten enthält[0,1,1]
, die Karte mit den Koordinaten(1,3,3)
jedoch nicht das Bild mit den Koordinaten[1,2,6]
. Mit diesem Verfahren können wir eine vollständige Liste der Karten und der darin enthaltenen Bilder erstellen.Ich denke übrigens, es ist einfacher, sich Bilder als Punkte und Karten als Linien vorzustellen, aber die projektive Geometrie zwischen Punkten und Linien ist dual, so dass es wirklich egal ist. Im Folgenden werde ich jedoch Punkte für Bilder und Linien für Karten verwenden.
Die gleiche Konstruktion funktioniert für jedes endliche Feld. Wir wissen, dass es genau dann ein endliches Ordnungsfeld gibt,
q
wenn es sich umq=p^k
eine Hauptmacht handelt. Das Feld heißtGF(p^k)
"Galois-Feld". Die Felder sind im Primzahlfall nicht so einfach zu konstruieren wie im Primzahlfall.Glücklicherweise wurde die harte Arbeit bereits in freier Software, nämlich Sage, geleistet und implementiert . Um beispielsweise ein projektives Flugzeugdesign der Ordnung 4 zu erhalten, geben Sie einfach ein
und Sie erhalten eine Ausgabe, die aussieht wie
Ich interpretiere das Obige wie folgt: Es gibt 21 Bilder mit den Bezeichnungen 0 bis 20. Jeder der Blöcke (Linie in projektiver Geometrie) sagt mir, welche Bilder auf einer Karte erscheinen. Beispielsweise enthält die erste Karte die Bilder 0, 1, 2, 3 und 20. Die zweite Karte enthält die Bilder 0, 4, 8, 12 und 16. und so weiter.
Das System der Ordnung 7 kann erzeugt werden durch
welches die Ausgabe erzeugt
quelle
Ich habe gerade einen Weg gefunden, dies mit 57 oder 58 Bildern zu tun, aber jetzt habe ich sehr starke Kopfschmerzen. Ich werde den Ruby-Code in 8-10 Stunden veröffentlichen, nachdem ich gut geschlafen habe! Nur ein Hinweis, dass meine Lösung alle 7 Karten die gleiche Note hat und mit meiner Lösung insgesamt 56 Karten erstellt werden können.
Hier ist der Code, der alle 57 Karten generiert, über die ypercube gesprochen hat. Es werden genau 57 Bilder verwendet, und leider habe ich tatsächlichen C ++ - Code geschrieben, aber da ich weiß, dass
vector <something>
es sich um ein Array handelt, das Werte vom Typ enthält, istsomething
es leicht zu verstehen, was dieser Code bewirkt. und dieser Code erzeugtP^2+P+1
Karten unter Verwendung vonP^2+P+1
Bildern, die jeweils einP+1
Bild enthalten und nur 1 gemeinsames Bild für jeden primären P-Wert teilen. Das heißt, wir können 7 Karten mit 7 Bildern mit jeweils 3 Bildern (für p = 2), 13 Karten mit 13 Bildern (für p = 3), 31 Karten mit 31 Bildern (für p = 5) und 57 Karten mit 57 Bildern haben (für p = 7) und so weiter ...Nochmals Entschuldigung für den verspäteten Code.
quelle
p=4
? (und 21 Karten / Bilder)Hier ist Gajets Lösung in Python, da ich Python besser lesbar finde. Ich habe es so modifiziert, dass es auch mit Nicht-Primzahlen funktioniert. Ich habe Thies Insight verwendet, um einen leichter verständlichen Anzeigecode zu generieren.
Mit Ausgabe:
quelle
(p) + (p * p) + (1)
Konfigurationen gibt.all p except 4 and 6
. Wenn Sie eine endliche Ebene erzeugen möchten, in der esp*p+p+1
Punkte und Linien (Karten und Bilder) gibt, dann ist dies verwandtfinite fields
und nichtrings
. Es gibt endliche Ordnungsfelder,p
wenn pprime
oder a istprime power
. Ihr Code funktioniert korrekt für Primzahlen, da Ausdrücke wie die Multiplikation und Addition im endlichen Ordnungsfeldk * p + (j + i * k) % p
ausdrücken .k*p + j + i*k
p
p^2
,p^3
usw. So wird es für Arbeit4, 8, 9, 16, 25, 27, ...
Verwendung des
z3
TheorembeweisersSei
P
die Anzahl der Symbole pro Karte. Nach diesem Artikel und seinerypercubeᵀᴹ
Antwort gibt esN = P**2 - P + 1
Karten bzw. Symbole. Ein Kartenspiel kann mit seiner Inzidenzmatrix dargestellt werden, die eine Zeile für jede Karte und eine Spalte für jedes mögliche Symbol enthält. Sein(i,j)
Element ist,1
wenn die Kartei
ein Symbol enthältj
. Wir müssen diese Matrix nur unter Berücksichtigung dieser Einschränkungen füllen:P
P
Das bedeutet
N**2
Variablen undN**2 + 2*N + (N choose 2)
Einschränkungen. Es scheint in nicht allzu langer Zeit mitz3
kleinen Eingaben überschaubar zu sein .edit : Leider scheint P = 8 für diese Methode zu groß zu sein. Ich habe den Prozess nach 14 Stunden Rechenzeit abgebrochen.
Ergebnisse
quelle
Ich mag diesen Thread sehr. Ich baue dieses Github-Python-Projekt mit Teilen dieses Codes hier, um benutzerdefinierte Karten als PNG zu zeichnen (damit man benutzerdefinierte Kartenspiele im Internet bestellen kann).
https://github.com/plagtag/ProjectiveGeometry-Game
quelle
Ich habe einen Artikel darüber geschrieben, wie man diese Art von Decks mit Code in Perl generiert. Der Code ist nicht optimiert, aber er kann zumindest Decks mit "vernünftigen" Ordnungen generieren ... und noch mehr.
Hier ist ein Beispiel mit der Reihenfolge 8, bei der eine etwas kompliziertere zugrunde liegende Mathematik berücksichtigt werden muss, da 8 keine Primzahl ist, obwohl es sich um eine gültige Reihenfolge zum Generieren dieser Art von Decks handelt. Siehe oben oder im Artikel für eine detailliertere Erklärung unten, wenn Sie nur einen etwas schwierigeren Spot-It generieren möchten :-)
Jede Kennung von
0
bis72
kann sowohl als Kartenkennung als auch als Bildkennung gelesen werden. Zum Beispiel bedeutet die letzte Zeile Folgendes:72
enthält Bilder2
,13
,22
, ...,59
,68
, und72
erscheint in Karten2
,13
,22
, ...,59
und68
.quelle