[PYTHON] Spielen wir mit der 4. Dimension der 4. Dimension

Einführung

Kennen Sie das Spiel der dreidimensionalen vier Augen? Versuchen Sie es mit Google Irgendwie verstehen Sie Wie Sie sehen können, handelt es sich um eine vieräugige Anordnung in einem 4x4x4-Raum. Ich habe dies mit einem leichten Gefühl auf 4 Dimensionen erweitert, deshalb möchte ich darüber schreiben.

Was wurde gemacht

Ich habe so etwas gemacht.

Ich habe es auf einem iPad mit Pythonista 3 erstellt, auf dem Python unter iOS ausgeführt wird.

Was du tun kannst

――Spielen Sie mit der 4. Dimension 4 ..

Implementierungsgeschichte

Ich werde es vorerst in GitHub erwähnen, aber da die Umgebung begrenzt ist, werde ich die spezifische Implementierung der Benutzeroberfläche nicht diskutieren.

Aggregat

Da die Anzahl der Kombinationen beim Versuch, ernsthaft zu aggregieren, sehr groß ist, habe ich beschlossen, alle Sequenzen nach dem folgenden Verfahren abzudecken.

  1. Bestimmen Sie den Vektor, der die Scanrichtung darstellt
  2. Listen Sie alle geeigneten Koordinaten als Scan-Startpunkt in dieser Richtung auf.
  3. Scannen Sie vom Startpunkt in die angegebene Richtung

1. Aufzählung von Richtungsvektoren

Zum Beispiel

--x Achse → $ (1, 0, 0, 0) $ --Diagonale Linie der y-z-Ebene → $ (0, \ pm1, 1, 0) $ --x-z-w Diagonale Würfellinie → $ (\ pm1, 0, \ pm1, 1) $ --Diagonale Linie des Superwürfels → $ (\ pm1, \ pm1, \ pm1, 1) $

Es ist wie (alle mehreren Probleme sind optional).

Beim eindimensionalen Scannen sollte die Achse von $ (1, 0, 0, 0) $ verschoben werden

for i in range(4):
  _aggregate([[1, 0, 0, 0][i:]+[1, 0, 0, 0][:i]])

Wenn ja, ist es OK. (_Aggregate ist eine Funktion, die nach 2 erscheint)

Das Scannen in zwei oder mehr Dimensionen macht die Lesbarkeit traurig, wenn eine einheitliche Implementierung verwendet wird. Deshalb habe ich alle Muster aufgegeben und geschrieben. Ich habe "itertools.product" verwendet, das das direkte Produkt zurückgibt, um das Mehrfachproblem optional zu machen. Für den x-z-w-Würfel können Sie beispielsweise vier Diagonalen darstellen, indem Sie "Produkt ([-1, 1], [0], [-1, 1], [1])" verwenden.

2. Aufzählung der Startpunkte

Wenn die Scanrichtung für eine Achse +1 ist, müssen die Startpunktkoordinaten 0 sein, um von 0 → 1 → 2 → 3 fortzufahren. Im Gegenteil, wenn es -1 ist, muss von 3 ausgegangen werden, um von 3 → 2 → 1 → 0 fortzufahren. Wenn es 0 ist, können alle 0, 1, 2, 3 möglich sein. Ich werde das gehorsam schreiben.

def start(val):
  if val == 1:
    return [0]
  elif val == -1:
    return [3]
  else:
    return range(4)

3. Scannen

Scannt von allen möglichen Startpunkten in die angegebene Richtung. Der Ausgangspunkt besteht darin, alle Kombinationen aus mehreren für jede der vier Achsen aufzulisten. Es ist also wieder Zeit für "itertools.product". Insbesondere sieht es so aus

def _aggregate(vec):
  for X, Y, Z, W in vec:
    if (X, Y, Z, W) == (0, 0, 0, 0):
      continue
    for x, y, z, w in product(start(X), start(Y), start(Z), start(W)):
      s = sum(
        self.get_cell(x+X*i, y+Y*i, z+Z*i, w+W*i).player for i in range(4)
      )
      if s == 4:
        self.black += 1
      elif s == -4:
        self.white += 1

Der Status jeder Zelle ist +1 für ●, -1 für ○ und 0, wenn nichts platziert ist. Wenn Sie also alle addieren, können Sie sehen, dass sie vollständig sind.

CPU-Übereinstimmung

Die CPU ist derzeit sehr einfach, wie zum Beispiel:

  1. Wenn Sie 3 Stiche haben, richten Sie 4 Stiche aus
  2. Wenn Sie 3 Gegner haben, hören Sie auf
  3. Blockieren Sie für die Muskeln, bei denen der Gegner zwei Augen hat, die Teile, die vielen Muskeln gemeinsam sind
  4. Platzieren Sie die Muskeln, für die Sie zwei Augen haben, an derselben Stelle wie viele Muskeln.
  5. Wenn Sie sich nicht für die oben genannten vier entscheiden können, legen Sie sie an einen offenen Ort.

Wenn Sie in diesem Spiel zwei 3er gleichzeitig machen, gewinnen Sie, also gibt es Prozesse wie 3 und 4. (Wenn es mehrere Orte mit derselben Priorität gibt, wählen Sie sie zufällig aus.) Es ist stark für einen einfachen Algorithmus.

schließlich

Wenn Sie Pythonista haben, spielen Sie bitte damit. Ich wäre dankbar, wenn mir jemand sagen könnte, dass es in eine andere Umgebung portiert wurde!

Recommended Posts

Spielen wir mit der 4. Dimension der 4. Dimension
Spielen wir mit Amedas Daten - Teil 1
Spielen wir mit Amedas Daten - Teil 4
Spielen wir mit Amedas Daten - Teil 3
Spielen wir mit Amedas Daten - Teil 2
Lass uns mit Python mit Python spielen [Anfänger]
[Einführung in WordCloud] Spielen Sie mit Scraping ♬
[Ergänzung] [PySide] Spielen wir mit Qt Designer
Spiele mit PyTorch
Spielen Sie mit 2016-Python
Spielen Sie mit CentOS 8
Spiel mit der Pyramide
Spiel mit Fathom
Python-Handspiel (Beginnen wir mit AtCoder?)
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen einer Lambda-Funktion
Spiel mit Othello (Reversi)
3D-Plot mit Matplotlib
3D oder D mit Py
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Spielen wir mit JNetHack 3.6.2, das einfacher zu kompilieren ist!
[Piyopiyokai # 1] Lass uns mit Lambda spielen: Holen Sie sich einen Twitter-Account
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen eines Python-Skripts
Spielen Sie mit Push-Benachrichtigungen mit imap4lib
Spielen Sie mit Linux-Partitionen herum
Erstellen Sie ein 3D-GIF mit Python3
Machen wir Othello mit wxPython
3D-Streudiagramm mit PyQtGraph
Spielen Sie mit Jupyter Notebook (IPython Notebook)
[Python] Spielen Sie mit Discords Webhook.
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
Schreiben wir Python mitinema4d.
Lassen Sie uns R-CNN mit Sklearn-theano machen
Lassen Sie uns Git-Cat mit Python bauen
Spielen Sie mit dem MD-Modul von ASE
Spielen Sie mit A3RT (Textvorschlag)
[Lass uns mit Python spielen] Ziel ist die automatische Satzgenerierung ~ Abschluss der automatischen Satzgenerierung ~
Laden wir S3-Dateien mit CLI hoch
Forschungs- und Entwicklungsleben mit iPython Notebook
Spiele mit einer Schildkröte mit Schildkrötengrafiken (Teil 1)
Dreidimensionale Skelettstrukturanalyse mit Python
Lassen Sie uns eine GUI mit Python erstellen.
Löse ABC166 A ~ D mit Python
Spielen Sie mit Poancare-Serien und SymPy
HTTPS mit Django und Let's Encrypt
Lass uns mit Selene Deep SEA lernen
Machen wir einen Blockbruch mit wxPython
Machen wir Othellos KI mit Chainer-Teil 1-
Spielen Sie mit der Pythonista-UI-Implementierung [Action-Implementierung]
Spielen Sie mit dem PIR-Sensormodul [DSUN-PIR]
Spielen Sie mit Linux-Partitionen herum ~ Fortsetzung ~
Lassen Sie uns mit Python Image Scraping durchführen
3D-Zeichnung mit SceneKit in Pythonista