[PYTHON] Jouons avec la 4e dimension 4e

introduction

Connaissez-vous le jeu des quatre yeux en trois dimensions? Essayez google Vous avez compris Comme vous pouvez le voir, il s'agit d'un arrangement à quatre yeux dans un espace 4x4x4. J'ai étendu cela à 4 dimensions avec une sensation de facilité, alors je voudrais écrire à ce sujet.

Ce qui a été fait

J'ai fait quelque chose comme ça.

Je l'ai créé sur un iPad en utilisant Pythonista 3 qui exécute Python sur iOS.

Ce que tu peux faire

――Jouez avec 4ème dimension 4ème --Maintenir la carte (pas réinitialisée même lorsqu'elle est fermée)

Histoire de mise en œuvre

Pour le moment, je vais le mentionner dans GitHub, mais comme l'environnement est limité, je ne parlerai pas de l'implémentation spécifique de l'interface utilisateur.

Agrégat

Comme le nombre de combinaisons est énorme lorsque l'on essaie d'agréger sérieusement, j'ai décidé de couvrir toutes les séquences par la procédure suivante.

  1. Déterminez le vecteur qui représente la direction de balayage
  2. Répertoriez toutes les coordonnées appropriées comme point de départ du balayage dans cette direction.
  3. Balayez à partir du point de départ dans la direction spécifiée

1. Dénombrement des vecteurs directeurs

Par exemple

--x axe → $ (1, 0, 0, 0) $

C'est comme (tous les problèmes multiples sont facultatifs).

Dans le balayage unidimensionnel, l'axe de $ (1, 0, 0, 0) $ doit être décalé, donc

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

Si c'est le cas, tout va bien. (_Aggregate est une fonction qui apparaît après 2)

La numérisation en deux dimensions ou plus rend la lisibilité triste si une implémentation unifiée est utilisée, j'ai donc abandonné et écrit tous les modèles. J'ai utilisé ʻitertools.productqui renvoie le produit direct pour rendre le problème multiple facultatif. Par exemple, pour le cube x-z-w, vous pouvez représenter quatre diagonales en utilisantproduct ([-1, 1], [0], [-1, 1], [1])`.

2. Énumération des points de départ

Si la direction de balayage est +1 pour un axe, les coordonnées du point de départ doivent être 0 afin de procéder de 0 → 1 → 2 → 3. Au contraire, s'il vaut -1, il faut partir de 3 pour procéder de 3 → 2 → 1 → 0. Si c'est 0, alors 0, 1, 2, 3 peuvent tous être possibles. J'écrirai ceci docilement.

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

3. Scanner

Balaye dans la direction spécifiée à partir de tous les points de départ possibles. Le point de départ est d'énumérer toutes les combinaisons parmi plusieurs pour chacun des quatre axes, ainsi ʻitertools.product` entre à nouveau en jeu. Plus précisément, cela ressemble à ceci

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

L'état de chaque cellule est +1 pour ●, -1 pour ○ et 0 si rien n'est placé, donc si vous les ajoutez toutes ensemble, vous pouvez voir qu'elles sont complètes.

Correspondance CPU

Le CPU est actuellement très simple, tel que:

  1. Si vous avez 3 points, alignez 4 points
  2. Si vous avez 3 adversaires, arrêtez
  3. Pour les muscles où l'adversaire a deux yeux, bloquez les parties communes à de nombreux muscles
  4. Placez les muscles que vous avez deux yeux au même endroit que de nombreux muscles.
  5. Si vous ne pouvez pas choisir les quatre ci-dessus, mettez-le dans un endroit ouvert.

Dans ce jeu, si vous faites deux 3 en même temps, vous gagnez, il y a donc des processus comme 3 et 4. (S'il y a plusieurs endroits avec la même priorité, sélectionnez-les au hasard) C'est fort pour un algorithme simple.

à la fin

Si vous avez Pythonista, veuillez jouer avec. Je serais reconnaissant si quelqu'un pouvait me dire qu'il a été porté dans un autre environnement!

Recommended Posts

Jouons avec la 4e dimension 4e
Jouons avec les données Amedas - Partie 1
Jouons avec les données Amedas - Partie 4
Jouons avec les données Amedas - Partie 3
Jouons avec les données Amedas - Partie 2
Jouons avec Excel avec Python [Débutant]
[Introduction à WordCloud] Jouez avec le scraping ♬
[Complément] [PySide] Jouons avec Qt Designer
Jouez avec PyTorch
Jouez avec 2016-Python
Jouez avec CentOS 8
Jouez avec Pyramid
Jouez avec Fathom
Jeu à la main en Python (commençons avec AtCoder?)
[Piyopiyokai # 1] Jouons avec Lambda: création d'une fonction Lambda
Jouer avec Othello (Reversi)
Graphique 3D avec matplotlib
3D ou D avec Py
[Jouons avec Python] Créer un livre de comptes de ménage
Jouons avec JNetHack 3.6.2 qui est plus facile à compiler!
[Piyopiyokai # 1] Jouons avec Lambda: créez un compte Twitter
[Piyopiyokai # 1] Jouons avec Lambda: création d'un script Python
Jouez avec les notifications push avec imap4lib
Jouez avec les partitions Linux
Créer un gif 3D avec python3
Faisons Othello avec wxPython
Nuage de points 3D avec PyQtGraph
Jouer avec Jupyter Notebook (IPython Notebook)
[Python] Jouez avec le Webhook de Discord.
[Jouons avec Python] Traitement d'image en monochrome et points
Écrivons python avec cinema4d.
Faisons R-CNN avec Sklearn-theano
Construisons git-cat avec Python
Jouez avec le module MD de ASE
Jouez avec A3RT (texte suggéré)
[Jouons avec Python] Viser la génération automatique de phrases ~ Achèvement de la génération automatique de phrases ~
Téléchargeons des fichiers S3 avec CLI
La vie de recherche et développement avec le notebook iPython
Jouez avec une tortue avec des graphiques de tortue (partie 1)
Analyse de la structure du squelette en trois dimensions avec Python
Faisons une interface graphique avec python.
Résoudre ABC166 A ~ D avec Python
Jouez avec la série Poancare et SymPy
HTTPS avec Django et Let's Encrypt
Apprenons Deep SEA avec Selene
Faisons une rupture de bloc avec wxPython
Faisons l'IA d'Othello avec Chainer-Part 1-
Jouer avec l'implémentation de l'interface utilisateur Pythonista [Action implementation]
Jouez avec le module de capteur PIR [DSUN-PIR]
Jouez avec les partitions Linux ~ Suite ~
Faisons du scraping d'images avec Python
Dessin 3D avec SceneKit dans Pythonista