[PYTHON] "Comment compter Fukashigi"

L'endroit où vous avez passé le $ n \ times n $ square une fois dans "How to count fluffy" Le problème du comptage des combinaisons d'itinéraires qui se déplacent du haut à gauche vers le bas à droite pour ne pas passer. J'ai créé le processus le plus basique de cette marche auto-évitée, c'est-à-dire le processus de comptage de toutes les combinaisons dans l'expression d'une sœur avec python.

Cependant, je viens de le créer, et comme vous pouvez le voir dans la vidéo, le nombre de combinaisons augmente à mesure que le nombre de carrés augmente, donc ce script n'est pas du tout pratique (Graphillion pour une utilisation décente. Utilisez (: //github.com/takemaru/graphillion/wiki) etc.).

scénario

def saw(n, path):
    if -1 in path[-1] \
     or n in path[-1] \
     or path[-1] in path[:-2] : return 0 

    if path[-1]==(n-1,n-1) : return 1

    return saw(n,path+[(path[-1][0]+1, path[-1][1]+0)]) \
         + saw(n,path+[(path[-1][0]-1, path[-1][1]+0)]) \
         + saw(n,path+[(path[-1][0]+0, path[-1][1]+1)]) \
         + saw(n,path+[(path[-1][0]+0, path[-1][1]-1)]) 

n = 5
print(saw(n,[(0,0)]))

Résultat de sortie

8512

La fonction saw (marche auto-évitée) reçoit le nombre de nœuds verticaux ou horizontaux (* nombre de carrés + 1 ) et les coordonnées du point de départ. Les coordonnées du point de départ sont données sous forme de " liste comprenant les points de coordonnées du point de départ *".

Le contenu de la fonction «scie» est

En conséquence, «saw» est récursé en ajoutant les coordonnées avec les dernières coordonnées décalées de un verticalement et horizontalement, et les valeurs numériques renvoyées sont totalisées. En d'autres termes, le nombre total d'itinéraires ayant atteint la destination et renvoyé «1» est calculé.

Recommended Posts

"Comment compter Fukashigi"
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Grattage 2 Comment gratter
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment installer Python
Comment lire PyPI
Comment installer pip
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment mettre à jour easy_install
Comment installer Archlinux
Comment utiliser pytest_report_header
Comment redémarrer gunicorn
Comment héberger virtuel
Comment déboguer le sélénium
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment lire JSON
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment mettre à jour Spyder
Comment installer BayesOpt
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
Comment installer Nbextensions
Comment utiliser OptParse
Comment compter les nombres dans une plage spécifique
Comment utiliser le retour
Comment installer Prover9
Comment utiliser NumPy
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
Comment estimer la densité du noyau
Comment utiliser Qt Designer
[IPython] Comment partager un bloc-notes IPython
Comment installer Python [Windows]
Comment utiliser la recherche triée
python3: Comment utiliser la bouteille (2)
Comprendre comment utiliser django-filter
XPath Basics (2) - Comment écrire XPath
Comment utiliser le générateur
Comment installer Tabpy 1.0 (version 2020-01)
Comment changer la disposition de Jupyter
Comment appeler une fonction
Comment mettre à jour Tkinter de Python vers la version 8.6