Écrivez un programme ou une fonction qui, étant donné un entier n
, construit un tableau avec des n
dimensions de n
longueur, où chaque élément est un identifiant de ses propres coordonnées. Autrement dit, en commençant par un tableau, remplissez-le avec des n
tableaux, où chacun d'entre eux contient n
plus de tableaux, jusqu'à une profondeur de n-1
. Les éléments des tableaux les plus profonds sont les coordonnées décrivant où ils se trouvent dans le tableau complet.
Quelques exemples au cas où mon explication serait déroutante.
n = 1
["1"]
n = 2
[
["11", "12"],
["21", "22"]
]
n = 3
[
[
["111","112","113"],
["121","122","123"],
["131","132","133"]
],
[
["211","212","213"],
["221","222","223"],
["231","232","233"]
],
[
["311","312","313"],
["321","322","323"],
["331","332","333"]
]
]
Ici, "321" signifie qu'il s'agit du 1er élément du 2e élément du 3e tableau.
Règles:
- Les coordonnées et la dimension (
n
) peuvent être indexées de 0 ou 1 - Vous pouvez supposer qu'il
n
s'agit d'un seul chiffre, inférieur à 10 pour les deux options d'indexation afin d'éviter les sorties ambiguës - IO est flexible.
- En particulier, les coordonnées peuvent être des tableaux, des chaînes, etc. tant qu'elles sont claires. "321" => [3,2,1]
- La sortie peut être des nombres entiers en base 10 avec ou sans zéros non significatifs.
- Les coordonnées peuvent être dans l'ordre inverse si vous le souhaitez, tant qu'elles sont cohérentes. "321" => "123"
- La sortie ne doit pas nécessairement être une structure de tableau dans votre langue. Tant qu'il y a des marqueurs distincts clairs pour le début d'un tableau, la fin d'un tableau et pour séparer les éléments.
- La sortie pour
n=1
peut simplement être 1 - Si votre sortie est atypique, assurez-vous d'expliquer le format.
- C'est le code-golf, donc la solution la plus courte dans chaque langue gagne!
data L a = L [L a] | E a
.Int -> [String]
ou autreInt -> [[String]]
, selon ce que l'entrée estRéponses:
Dyalog APL ,
53 octets-2 octets grâce à FrownyFrog
Essayez-le en ligne!
⍳
donne tous les indices étant donné la forme d'un tableau. par exemple 2 3 .⍴
remodèle l'argument de droite pour qu'il soit de la taille de l'arg de gauche.⍨
fait que les deux soient le bon argument.la source
Python 3 , 56 octets
Essayez-le en ligne!
M. Xcoder a économisé 2 octets en passant à Python 3 pour le décompression étoilé.
la source
f=lambda n,*l:len(l)//n*l or[f(n,*l,k)for k in range(n)]
fonctionne pour 56 octets.Wolfram Language (Mathematica) ,
3222 octets-10 octets grâce à @alephalpha
Essayez-le en ligne!
la source
J , 18 octets
Essayez-le en ligne!
Solution itérative, pas de produit cartésien intégré. Voici à quoi ressemble le pic J.
la source
Gelée ,
87 octetsEssayez-le en ligne!
Explication
Utilisez l'argument 2 comme exemple.
Si
¡
cela ne variait pas, c'est le bon argument sur les itérations pour les dyades, alors ce serait 4 octets:ṗs³¡
la source
1
est valide?J, 13 octets
Essayez-le en ligne!
Intéressant, c'est beaucoup plus long que la réponse APL (bien que cela puisse être mon incapacité à voir une meilleure traduction)
explication
la source
#.inv
est très intelligent, +1.MATLAB,
928955 octetsJ'ai une réponse différente après avoir relu les règles du défi, mais je vais laisser la tentative précédente ci-dessous car elle est différente et toujours amusante à regarder.
Explication
Cela génère un tableau à n dimensions de chaînes indexées à 0.
Réponse précédente (89 octets)
Mon premier golf! Cela peut probablement être réduit davantage, mais je pensais publier ce que j'avais.
Explication
Sorties x à la fin pour donner la solution
Semblable à l'autre post MATLAB, la sortie est un tableau à n dimensions, sauf qu'il utilise des nombres pour afficher les coordonnées. Cela fonctionne pour n'importe quelle valeur, bien que parce que les boucles sont mauvaises dans MATLAB, cela commence à ralentir considérablement autour de n = 8.
Edit: -2 octets grâce à Luis Mendo. Le dernier point-virgule a également été supprimé pour imprimer la sortie.
la source
length
parnnz
pour économiser quelques octets. En outre, selon les règles PPCG, le code doit produire une sortie réelle, généralement en l'affichant dans STDOUT (il ne suffit pas d'avoir la sortie stockée dans une variable), ou il doit s'agir d'une fonction qui renvoie la sortieRouille ,
201176167166154 octetsEssayez-le en ligne!
Le type de sortie est un type somme avec deux variantes car la langue est strictement typée. Il peut s'agir soit d'
L
un type de liste contenant ce type de somme, soit d'S
un type de résultat (une chaîne). Le résultat peut ressembler à ceci.Aussi, reformaté en utilisant
rustfmt
:la source
R , 102 octets
Essayez-le en ligne!
which
indexation des tableauxla source
which
est ce que je cherchais, merci! Enregistré 9 octetsJava 10, 144 octets
La solution est la méthode
f
. Il produit une représentation sous forme de chaîne du tableau.Essayez-le en ligne
Non golfé
Remerciements
la source
Object[]
parvar
. De plus, je pense que ceelse
bloc est inutile, comme vous l'avezreturn
dans leif
bloc.05AB1E , 7 octets
Essayez-le en ligne!
Explication
la source
JavaScript (Node.js) ,
626058 octetsEssayez-le en ligne! La sortie est indexée 0. Edit: 2 octets enregistrés grâce à @JoKing et 2 octets supplémentaires grâce à @Arnauld.
la source
MATLAB,
116108104 octetsJ'ai l'impression qu'il doit y avoir un moyen plus court de le faire, étant donné l'affinité de MATLAB pour les matrices multidimensionnelles ... Merci à Luis pour les 4 octets de quelques raccourcis
Explication
La sortie est un tableau de cellules à n dimensions, où chaque élément est un tableau des valeurs de coordonnées. Fonctionne pour tout
n
sans ambiguïté en raison de la sortie du tableau numérique, tant qu'unn^(n+1)
tableau d'éléments peut être stocké dans la RAM!la source
Fusain , 26 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Entrée
n
.Générez tous les
nⁿ
n
nombres à chiffres dans la basen
.Divisez-les
n
fois en unn
tableau -dimensional où chaque dimension est de taillen
.Imprimez le tableau. Le format de sortie par défaut est chaque élément sur sa propre ligne, puis chaque bloc de
n
lignes se termine par une ligne vierge, puis chaque bloc den
blocs den
lignes se termine par une deuxième ligne vierge, et ainsi de suite jusqu'àn-1
des lignes vides au niveau supérieur .la source
Gelée , 7 octets
Essayez-le en ligne!
la source