Étant donné un entier positif n
, N
sortez la "matrice" d'identité -dimensionnelle, qui est le N^N
tableau 1
où toutes les composantes des indices sont égales et 0
autrement. N^N
signifie N par N par N par N ...
1 -> [1]
2 -> [[1,0],[0,1]]
3 -> [[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,1]]]
4 -> [[[[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,1,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,1,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]]]]
Par exemple, si a
est l' 4
identité de dimension « matrice », alors les seules entrées avec 1
seraient a[0][0][0][0]
, a[1][1][1][1]
, a[2][2][2][2]
et a[3][3][3][3]
.
C'est du code-golf . La réponse la plus courte en octets gagne. Des échappatoires standard s'appliquent.
code-golf
math
array-manipulation
integer
generation
Leaky Nun
la source
la source
Réponses:
Octave, 29 octets
Essayez-le en ligne!
la source
Gelée , 8 octets
Essayez-le en ligne!
Ooh, on dirait que je rejoue @Dennis dans sa propre langue :-)
Il s'agit d'une fonction à 1 argument (car le format de sortie par défaut de Jelly pour les listes imbriquées est un peu ambigu, ce qui signifie qu'il ne répond sans doute pas aux spécifications en tant que programme complet).
Explication
Pour comprendre cela, il est utile de regarder les étapes intermédiaires. Pour une entrée de 3, nous obtenons les étapes intermédiaires suivantes:
[1,2,3]
(entrée, transformée implicitement par leþ
)[[1,0,0],[0,2,0],[0,0,3]]
(faire un tableau avec[1,2,3]
, comparer pour obtenir l'égalité[[1,0,0],[0,1,0],[0,0,1]]
, puis multiplier par l'une des valeurs que nous avons comparées)[[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,2,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,3]]]
(encore la même idée)[[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,1]]]
(remplacez chaque élément par son signe en utilisantṠ
)Notez que l'entrée commence unidimensionnelle signifie que nous devons boucler (entrée-1) fois pour ajouter (entrée-1) des dimensions, produisant une liste d'entrée-dimensionnelle.
Fun fait: ce programme contient cinq Quicks dans une rangée,
¥þ’¡`
. (Un rapide est un modificateur d'un "lien", ou intégré, utilisé pour modifier son comportement ou le combiner avec un autre lien.)la source
Mathematica, 30 octets
la source
Table
est un ajout récent. Les mathématiques ont encore besoin d'une liste de singleton là: tio.run/##y00sychMLv7/P83WsagosTLaKT8/…Array[Boole@*Equal,#~Table~{#}]&
pour travailler sur les mathématiques. Les versions plus anciennes de Mathematica ne prennent pas en charge un entier comme deuxième argumentTable
, et je suppose que les mathématiques sont basées sur cela.APL (Dyalog) , 10 octets
Essayez-le en ligne!
1=
[est] 1 égal à≢
le nombre∘
de∪
éléments uniques¨
Dans chacun de⍳
les indices dans un tableau avec les dimensions de⍴⍨
l'auto-remodelage ( N exemplaires de N ) de⎕
l'entrée ( N ) [?]la source
Gelée , 9 octets
Essayez-le en ligne!
Comment ça marche
La réalisation directe de la tâche semble difficile (je n'ai pas trouvé de moyen), mais la construction de tableaux de mêmes nombres et de tableaux de même forme est assez facile.
ð
rend la chaîne dyadique, et l'entrée entière n sert à la fois d'argument gauche et droit pour la chaîne. Il est possible d'utiliser une chaîne monadique à la place, mais les règles d'analyse pour les chaînes dyadiques économisent ici trois octets (deux après avoir accoutumé pourð
).L' atome de puissance cartésien
ṗ
, avec un argument gauche et droit égal à n , construit le tableau de tous les vecteurs de longueur n qui sont constitués d'éléments de [1, ..., n] , triés lexicographiquement.Lorsque n = 3 , cela donne
L' égale chaque lien rapide
E€
teste l' des éléments de tous les vecteurs construits.Lorsque n = 3 , nous obtenons
qui sont les éléments de la matrice d'identité tridimensionnelle, dans un réseau plat.
Le lien rapide dyadique
+þ’¡
est appelé avec l'argument gauche et l'argument droit n . Le rapide¡
appelle l'atome de décrémentation’
, ce qui donne n-1 , puis appelle n-1 le lien rapide de la table d' ajout .+þ
Initialement, les arguments de
+þ
sont tous les deux n . Après chaque appel, l'argument de droite est remplacé par celui de gauche et celui de gauche est remplacé par la valeur de retour de l'appel.Le tableau appelle rapidement l' atome d' ajout
+
pour chaque élément de son argument de gauche et chaque élément de son argument de droite, construisant une table / matrice de la valeur de retour. Les arguments entiers initiaux n sont promus dans les plages [1, ... n] .Lorsque n = 3 , après la promotion mais avant la première itération, les deux arguments sont
L'ajout de chaque entier de ce tableau à chaque entier de ce tableau donne
Dans l'invocation suivante, nous ajoutons chacun de ces tableaux aux entiers de [1, 2, 3] . L'addition vectorise (l'ajout d'un entier à un tableau l'ajoute à chaque élément), donc on obtient
Ce tableau a la même forme que la matrice d'identité tridimensionnelle, mais pas les éléments corrects.
Enfin, l' atome de moule
ṁ
supprime les entrées entières du résultat à droite et les remplace dans l'ordre par les éléments du résultat à gauche.la source
Python , 70 octets
Essayez-le en ligne!
Une solution récursive. En considérant la matrice comme une liste de matrices une dimension plus petite, elle parcourt cette liste pour descendre dans l'arbre. Il se souvient des indices sélectionnés
l
, et lorsque lesn
indices ont été sélectionnés, nous attribuons un1
ou0
selon qu'ils sont tous identiques.Python 2 , 73 octets
Essayez-le en ligne!
Une amélioration par rapport à la méthode totalement humaine consistant à créer une matrice de zéros puis à les affecter à la diagonale.
Python 2 , 88 octets
Essayez-le en ligne!
Quelques absurdités avec
eval
, génération d'une liste imbriquée et substitution de format de chaîne. La chaîne à évaluer ressemble à:la source
Python 2 + NumPy ,
807270 octetsMaintenant à égalité avec la meilleure réponse Python!
Essayez-le en ligne
Enregistré 8 octets grâce à Andras Deak, et 2 par officialaimm
la source
a[[range(n)]*n]=1
au lieu de votre exécutable.fill_diagonal(a,1)
à cet effet, mais c'est un octet de plus)i
, qui devrait économiser 2 octets.Python 2 ,
999390 octetsMerci à Rod pour
certainsaide encore plus qui a obtenu ce travail et aussi rasé 6 octets off! -3 octets grâce à xnor.Essayez-le en ligne!
la source
def/return
est jamais mieux queinput/print
(dans le meilleur scénario , il est égal), vous pouvez également déposer l'()
en('[%d]'%i)
réduisant à 93 octets'[%d]'%i
se trouve être le représentant de chaîne de[i]
.JavaScript (ES6), 67 octets
Explication:
i
permet de savoir si la cellule est sur la diagonale principale ou non. Initialement, il n'est pas défini, donc lors du premier appel récursif, nous passons toujours la première dimension, tandis que lors des appels récursifs suivants, nous ne la transmettons que si l'indice de dimension actuel est égal à toutes les dimensions précédentes, sinon nous passons un indexn
qui indique que tout les cellules récursives doivent être nulles.la source
Brainfuck , 61 octets
Non golfé
Les chiffres après les crochets indiquent la cellule sur laquelle se trouve la tête.
Essayez-le en ligne!
L'entrée est un nombre binaire. La sortie est une matrice stockée dans l'ordre des lignes principales.
la source
R ,
6449 octets-15 octets grâce à Jarko Dubbeldam
Lit à partir de stdin et renvoie un tableau, imprimant sous forme de matrices.
seq
génère une séquence régulièrement espacée de1
àn^n
avec la longueurl=n
, ce qui fait très bien l'affaire pour indexer où vont les 1.Essayez-le en ligne!
ancienne version:
Lit à
n
partir de stdin; renvoie un tableau, imprimant les résultats sous forme de matrices. J'ai lutté avec cela pendant un certain temps jusqu'à ce que je lise les documents pour[
, qui indiquent qu'une matrice peut être utilisée pour indexer un tableau, où chaque ligne de la matrice représente l'ensemble des indices. Soigné!Essayez-le en ligne!
la source
array(0, rep(n,n)
fonctionne, vous n'avez donc pas à fairerep
. Vous pouvez ensuite également passer àn
traversarray(0, rep(n<-scan(),n))
.x[seq(1,n^n,l=n)]=1
est 1 octet plus court.J ,
1615 octetsEssayez-le en ligne!
la source
Python 3 + numpy,
8177 octetsJe ne suis pas entièrement sûr que ce qui précède convient à toutes les directives: il renvoie un ndarray avec les propriétés données. Je sais que les fonctions anonymes sont généralement bien, mais un shell interactif s'imprimera
Si le fluff du tableau rend ce qui précède invalide, je dois ajouter un
print()
pour quelque chose comme 7 octets supplémentaires.Essayez-le en ligne!
la source
Pyth, 14 octets
Suite de tests
Explication:,
^U
qui est implicitement^UQQ
, où seQ
trouve l'entrée, calcule toutes les listes d'éléments Q possibles de la plage0 ... n-1
.ms!t{d
mappe ceux dont tous les éléments sont égaux à 1 et les autres à 0. Cela donne la sortie aplatieucGQtQ
exécute les opérations suivantes, Q - 1 fois: Coupez l'entrée dans des listes de taille Q.la source
C # (.NET Core) , 166 octets
Essayez-le en ligne!
Au début, je pensais que cela ne pouvait pas être fait avec une expression lambda en C # ... ^ __ ^ U
la source
Lisp commun,
147133octetsEssayez-le en ligne!
Le lisp super-long habituel. Réduction de 12 octets grâce à @ceilingcat!
Explication:
la source
SOGL V0.12 , 22 octets
Essayez-le ici!
Laisse la sortie sur la pile , visible dans la console. Si les nombres dans la sortie étaient autorisés à être des chaînes, alors le
r
pourrait être supprimé.Tout comme un test amusant de la façon dont SOGL fait dans les défis, il n'a pas été fait pour: p
la source
Clojure, 92 octets
Bien que l' assoc-in fonctionne également avec des vecteurs, pas seulement avec des cartes de hachage.
la source