Le défi est très simple. Avec une entrée entière n
, sortez la n x n
matrice d'identité. La matrice d'identité est une matrice qui 1
s'étend du haut à gauche au bas à droite. Vous allez écrire un programme ou une fonction qui renverra ou sortira la matrice d’identité que vous avez construite. Votre sortie peut être un tableau 2D ou des nombres séparés par des espaces / tabulations et des nouvelles lignes.
Exemple d'entrée et de sortie
1: [[1]]
2: [[1, 0], [0, 1]]
3: [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
4: [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
5: [[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
1
===
1
2
===
1 0
0 1
3
===
1 0 0
0 1 0
0 0 1
etc.
C'est le code-golf , donc le code le plus court en octets gagne.
code-golf
math
matrix
linear-algebra
binary-matrix
code-challenge
polyglot
code-golf
restricted-source
programming-puzzle
expression-building
apl
code-challenge
image-processing
compression
code-golf
puzzle-solver
code-golf
grid
code-golf
number
number-theory
code-golf
array-manipulation
sorting
code-golf
string
balanced-string
code-golf
puzzle-solver
code-golf
string
decision-problem
code-golf
path-finding
puzzle-solver
graph-theory
code-golf
string
encode
networking
code-golf
code-golf
string
chemistry
code-golf
date
code-golf
decision-problem
graph-theory
code-golf
ascii-art
graph-theory
code-golf
string
Seadrus
la source
la source
Réponses:
MATL, 2 octets
Une traduction de ma réponse Octave.
Essayez-le en ligne.
Une version de 4 octets sans construit (grâce à Luis Mendo):
la source
:t!=
TI-BASIC, 2 octets
Anecdote: Le moyen le plus rapide d’obtenir une liste
{N,N}
estdim(identity(N
.Voici le chemin le plus court sans l'integrin, en 8 octets:
randM(
crée une matrice aléatoire avec des entrées comprenant tous les nombres entiers compris entre -9 et 9 inclus (cela peut paraître étrange parce que c'est le cas). Nous prenons ensuite cette matrice à la puissance 0.la source
{N,N}
, humm,{N,N}
?dim(
etidentity(
sont chacun un octet car TI-BASIC est segmenté.Julia,
93 octetsCeci est juste une fonction intégrée qui accepte un entier
n
et renvoie unnxn Array{Float64,2}
(c'est-à-dire un tableau 2D). Appelez ça commeeye(n)
.Notez que les soumissions de ce formulaire sont acceptables selon cette politique .
la source
APL, 5 octets
Il s'agit d'un train de fonctions monadique qui accepte un entier à droite et renvoie la matrice d'identité.
Essayez ici
la source
Octave,
104 octetsRenvoie une fonction anonyme qui prend un nombre
n
et renvoie la matrice d'identité.la source
@eye
est suffisant.eye
produit la matrice d’identité dans un grand nombre / certains langages orientés numériquement.@
fait?@
est l'opérateur de descripteur de fonction, il fonctionne comme unelambda
référence et également comme une référence à une fonction particulière. Ainsi, par exemple,@(x)x.^2
la fonction@sqrt
carrée est une référence à la fonction racine carrée. Vous pouvez en lire plus à ce sujet iciR, 4 octets
Quand une matrice est donnée,
diag
retourne la diagonale de la matrice. Cependant, lorsqu'un entier est attribuén
,diag(n)
retourne la matrice d'identité.Essayez-le en ligne
la source
Python 2, 42 octets
Une fonction anonyme produit une sortie telle que
[(1, 0, 0), (0, 1, 0), (0, 0, 1)]
,Tout d'abord, crée la liste
([1]+[0]*n)*n
, quin=3
ressemble àUtilisation de l’ astuce zip / iter
zip(*[iter(_)]*n
pour créer des groupes den
cadeauxNotez que le
1
vient un index plus tard à chaque fois, donnant la matrice d'identité. Mais, il y a une ligne tout à zéro supplémentaire, qui est supprimée avec[:n]
.la source
Gelée, 4 octets
N'utilise pas d'intégré. Essayez-le en ligne!
Comment ça marche
la source
=þ
deux octets sont utilisés et se moque des réponses les plus longues.J, 4 octets
C'est une fonction qui prend un entier et retourne la matrice.
la source
=i.
(=i.) 10
=>0 0 0 0 0 0 0 0 0 0
Haskell,
4337 octetsC'est assez simple, même si je pense que l'on peut faire mieux (sans un langage qui intègre déjà cette fonction, comme beaucoup l'ont fait).
Edit: laissé tomber quelques octets grâce à Ørjan Johansen
la source
fromEnum
commesum[1|x==y]
.fromEnum (y==x)
0^abs(x-y)
.0^(x-y)^2
dans une autre réponse, même plus courte.Pyth, 7 octets
Essayez-le en ligne: démonstration
Créer une matrice de zéros et remplacer les éléments diagonaux par des uns.
la source
Q
JavaScript ES6,
686252 octets10 octets sauvés grâce à une astuce de @Neil
Essayer une approche différente de celle de @ Cᴏɴᴏʀ O'Bʀɪᴇɴ. Pourrait éventuellement être amélioré.
la source
x=>[...Array(x)].map((_,y,x)=>x.map((_,z)=>+(y==z)))
pour une économie de 10 octets.x=>[...Array(x)].map((_,y,x)=>x.map(_=>+!y--))
Rétine , 25
Crédit à @randomra et @Martin pour le golf supplémentaire.
Essayez-le en ligne.
Notez que cela prend une entrée unaire. Si cela n’est pas acceptable, l’entrée décimale peut être donnée comme suit:
Rétine, 34 ans
Essayez-le en ligne.
la source
$*0
pour remplacer un nombre n par n0
s.Haskell, 54 octets
f
renvoie la matrice d'identité pour l'entrée n. Loin d'être optimal.la source
map
appel.Lua,
77 7565 octetsEh bien, je ne suis pas sûr que Lua soit la meilleure langue pour cela avec la concaténation en deux périodes ... Mais bon, on a une chance. Je verrai s'il y a des améliorations à apporter.
MODIFIER:
J'ai trouvé quelque chose par hasard que je trouve assez étrange, mais ça marche.
En Lua, tout le monde sait que vous avez la possibilité d’attribuer des fonctions à des variables. C'est l'une des fonctionnalités les plus utiles de CodeGolf.
Cela signifie au lieu de:
Tu peux le faire:
Mais attendez, Lua permet une certaine quantité de POO. Donc, vous pourriez même potentiellement faire:
Cela fonctionnera aussi bien et coupe les caractères.
Maintenant, voici la partie étrange. Vous n'avez même pas besoin d'attribuer une chaîne à un moment donné. Faire simplement:
Marchera.
Pour que vous puissiez voir visuellement la différence, jetez un coup d’œil aux résultats obtenus:
Utilisation de string.sub (88 caractères)
Affectation de string.sub à une variable (65 caractères)
Affectation de string.sub en utilisant une approche POO (64 caractères)
Assigner string.sub en utilisant une approche .. nil? (60 caractères)
Si quelqu'un sait pourquoi cela fonctionne, je serais intéressé.
la source
Python 3, 48
Sauvegardé 1 octet grâce à sp3000.
J'adore les défis que je peux résoudre en une ligne. Assez simple, construisez une ligne à partir de 1 et 0 égale à la longueur de l'int transmis. Sortie en tant que tableau 2d. Si vous emballez la partie après le: in
'\n'.join()
, ça va bien l’imprimer.la source
x-i-1 -> x+~i
C,
59 ou 5956 ou 56Deux versions de longueur identique.
3 octets sauvés grâce à une suggestion de anatolyg:
(n+1)
->~n
Itère
i
den*n-1
zéro. Imprime un 1 si i% (n + 1) est égal à zéro, sinon 0. Imprime une nouvelle ligne sii%n
= 0 sinon un espace.la source
n+1
est trop terne. Utilisez à la~n
place!i;
fait?i;
déclare simplement la variablei
. En C, vous devez toujours déclarer une variable avant de l’utiliser, en indiquant le type afin que le compilateur sache combien de mémoire allouer. Avec le compilateur GCC, si vous ne spécifiez pas un type, il est supposé êtreint
.Mata, 4 octets
Sortie
Mata est le langage de programmation matriciel disponible dans le progiciel statistique Stata. I (n) crée une matrice d'identité de taille n * n
la source
I
et les 3 autres octets appellent simplement la fonction. Cela ferait de votre réponse l’une des plus faibles de ce défi! :-)K6 , 1 octet
=
est-ce exactement celaEssayez-le en ligne!
la source
Pyth, 8 octets
Essayez ici .
la source
qRRQQ
ce qui semble fonctionner sauf si vous obtenezTrue
etFalse
au lieu de,1
et0
cependant, résoudre ce problème autant que vous le souhaitez nécessite l’utilisation de trois octets,sMM
ce qui n’aide en rien ...Python 3.5 avec NumPy -
574930 octetsNumPy.identity prend un entier, n, et retourne une matrice d'identité par n. Cette réponse est autorisée via cette politique .
la source
import numpy\nnumpy.identity
c'est une réponse légitime .import numpy\nnumpy.identity()
30 octets?from numpy import identity
. 26 octets.from numpy import identidy\nidentity
(dans ce cas, il serait plus court d'utiliser*
au lieu de la commande intégrée spécifique)Mathematica, 35 octets
sans utiliser IdentityMatrix
la source
Javascript, 40
la source
Japt,
141210 octetsTestez-le en ligne! Remarque: cette version dispose de quelques octets supplémentaires pour imprimer en jolie sortie.
la source
Brain-Flak ,
206170162 octetsEssayez-le en ligne!
la source
K, 7 octets
Prenons le produit croisé d'égalité de deux vecteurs contenant [0, n).
En action:
la source
Java, 60 octets
Crée un tableau 2D et remplace les éléments où rangée et colonne sont égaux
1
.la source
CJam, 7 octets
Il s'agit d'un bloc de code qui extrait un entier de la pile et pousse un tableau 2D en retour.
Essayez-le en ligne!
la source
Mathematica, 14 octets
Cas de test
la source
Perl,
3933 octetsMerci à Ton Hospel d' avoir sauvé 6 octets
Courir avec le
-E
perlrun:la source
/$/,say map$`==$_|0,@%for@%=1..<>
ou même mieux,//,say map$'==$_|0,@%for@%=1..<>
mais comme ça, vous ne pouvez plus le citer entre guillemetsprint
au lieu de dire, car elle-E
n’est libre que sur la ligne de commande.