Ecrivez une fonction (en utilisant le moins d'octets possible) qui prend un tableau bidimensionnel de n'importe quel nombre de colonnes et de lignes dans lequel:
0
représente un bloc vide,1
représente le bloc de serpent.
La fonction doit renvoyer le nombre de chemins possibles empruntés par le serpent.
Exemple 1:
Contribution:
[
[1,1,1,1,1],
[0,0,0,0,1],
[0,0,0,0,1],
]
Sortie: 2
Dans l'exemple ci-dessus, la fonction retournera 2
car la réponse est l'une des suivantes:
Exemple 2:
Contribution:
[
[1,1,1,1],
[0,0,1,1],
[0,0,1,1],
]
Sortie: 6
Dans cet exemple, la fonction retournera 6
car la réponse est l'une des suivantes:
Remarque:
Lors de l'évaluation de l'entrée, vous pouvez supposer que:
- Les tableaux représentant les colonnes auront toujours les mêmes tailles (les tableaux sont donc rectangulaires);
- Il existe au moins un chemin valide.
- Le serpent ne peut pas traverser les bords (comme cela peut arriver dans certaines versions de serpent);
- Le serpent aura toujours au moins 2 blocs;
- Le serpent ne peut pas se déplacer en diagonale;
- Les chemins sont dirigés. (Donc, deux chemins se terminant à des positions différentes, mais qui ont exactement la même apparence ne sont pas identiques, cela fera le total)
code-golf
grid
binary-matrix
Adelin
la source
la source
[[0,0,1,1],[0,0,1,1],[0,0,1,1]]
. La plupart des réponses donnent 16, mais on en donne 15.Réponses:
Wolfram Language (Mathematica) , 16 + 83 = 99 octets
Déclaration d'importation de bibliothèque (16 octets):
Corps de la fonction actuelle (83 octets):
Essayez-le en ligne!
Notez que la question demande simplement le nombre de chemins hamiltonien dans le graphique.
Cependant, pour une raison quelconque, la
HamiltonianPath
fonction ne fonctionne pas vraiment avec un graphe dirigé ( exemple ). J'ai donc utilisé la solution de contournement décrite dans cette question Mathematica.SE :True
) connecté à tous les autres sommets.Le graphique est construit en utilisant
MakeGraph
(ennuyeusement, il n'y a pas d'intégré directement équivalent), en utilisant la fonction booléenne##||Norm[#-#2]==1&
, qui retourneTrue
si et seulement si l'un des arguments estTrue
ou si la distance entre les deux sommets l'est1
.Tr[1^x]
ne peut pas être utilisé à la place deLength@x
,<2
ni à la place de==1
.HamiltonianPath
peut être utilisé si le graphique est non dirigé, avec le corps de la fonction prend 84 octets (exactement 1 octet de plus que la soumission actuelle):Essayez-le en ligne!
la source
JavaScript (ES6),
154134 octetsEssayez-le en ligne!
Comment?
Méthode
En commençant par chaque cellule possible, nous inondons la matrice, effaçant toutes les cellules sur notre chemin. Chaque fois que la matrice ne contient plus de 1 , on incrémente le nombre n de chemins possibles.
Chaque chemin valide est compté 4 fois en raison de la direction choisie dans la dernière cellule, ce qui importe peu. Le résultat final est donc n / 4 .
Fonction récursive
Au lieu d'appeler la fonction récursive g () à partir du rappel de la deuxième carte () comme ceci ...
... nous définissons la fonction récursive g () directement comme le rappel de map () :
Malgré la formule plutôt longue
y=1/y?y:Y
nécessaire pour définir la valeur initiale de y , cela économise globalement 2 octets.Code commenté
la source
Gelée ,
12 à11 octetsEssayez-le en ligne!
Explication.
la source
§ỊML
au lieu de§ỊP€S
sauvegarder un octet - je pense que cela devrait fonctionner?§ÐṂL
qui est un peu plus rapide.Python 2 ,
257246241234233227214210 octetsEssayez-le en ligne!
Enregistré
la source
w
eth
Python 2, 158 octets
Essayez-le en ligne!
la source
Haskell ,
187155 octetsEssayez-le en ligne!
la source