El desafío es muy simple. Dada una entrada entera n
, salida de la n x n
matriz de identidad. La matriz de identidad es una que se 1
extiende desde la parte superior izquierda hasta la parte inferior derecha. Escribirás un programa o una función que devolverá o generará la matriz de identidad que construiste. Su salida puede ser una matriz 2D o números separados por espacios / pestañas y líneas nuevas.
Ejemplo de entrada y salida
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.
Este es el código de golf , por lo que gana el código más corto en bytes.
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
fuente
fuente
Respuestas:
MATL, 2 bytes
Una traducción de mi respuesta Octave.
Pruébalo en línea.
Una versión de 4 bytes sin elementos integrados (gracias a Luis Mendo):
fuente
:t!=
TI-BASIC, 2 bytes
Dato curioso: la forma más corta de obtener una lista
{N,N}
esdim(identity(N
.Aquí está el camino más corto sin el incorporado, en 8 bytes:
randM(
crea una matriz aleatoria con entradas de todos los enteros entre -9 y 9 inclusive (eso suena extrañamente específico porque lo es). Luego llevamos esta matriz a la potencia 0.fuente
{N,N}
, umm,{N,N}
?dim(
yidentity(
son de un byte porque TI-BASIC está tokenizado.Julia,
93 bytesEsta es solo una función incorporada que acepta un número entero
n
y devuelve unnxn Array{Float64,2}
(es decir, una matriz 2D). Llámalo comoeye(n)
.Tenga en cuenta que los envíos de este formulario son aceptables según esta política .
fuente
APL, 5 bytes
Este es un tren de funciones monádicas que acepta un número entero a la derecha y devuelve la matriz de identidad.
Pruébalo aquí
fuente
Octava,
104 bytesDevuelve una función anónima que toma un número
n
y devuelve la matriz de identidad.fuente
@eye
es suficiente.eye
produce la matriz de identidad en muchos / algunos lenguajes numéricamente orientados.@
?@
es el "operador de manejador de funciones", funciona como aylambda
también como una referencia a una función particular, por ejemplo,@(x)x.^2
es la función de cuadratura y@sqrt
es una referencia a la función de raíz cuadrada. Puedes leer más sobre eso aquíR, 4 bytes
Cuando se le da una matriz,
diag
devuelve la diagonal de la matriz. Sin embargo, cuando se le da un número enteron
,diag(n)
devuelve la matriz de identidad.Pruébalo en línea
fuente
Python 2, 42 bytes
Una función anónima, produce resultados como
[(1, 0, 0), (0, 1, 0), (0, 0, 1)]
,Primero, crea la lista
([1]+[0]*n)*n
, que paran=3
pareceUsando el truco zip / iter
zip(*[iter(_)]*n
para hacer grupos den
donacionesTenga en cuenta que
1
cada vez viene un índice, que da la matriz de identidad. Pero, hay una fila extra de cero, que se elimina con[:n]
.fuente
Jalea, 4 bytes
No utiliza un incorporado. Pruébalo en línea!
Cómo funciona
fuente
=þ
tiene dos bytes y se burla de las respuestas más largas.J, 4 bytes
Esta es una función que toma un número entero y devuelve la matriz.
fuente
=i.
(=i.) 10
=>0 0 0 0 0 0 0 0 0 0
Haskell,
4337 bytesBastante sencillo, aunque creo que uno puede hacerlo mejor (sin un lenguaje que ya tenga esta función incorporada, como muchos lo han hecho).
Editar: cayó algunos bytes gracias a Ørjan Johansen
fuente
fromEnum
assum[1|x==y]
.fromEnum (y==x)
0^abs(x-y)
.0^(x-y)^2
en otra respuesta, incluso más corta.Pyth, 7 bytes
Pruébalo en línea: demostración
Creando una matriz de ceros y reemplazando los elementos diagonales con unos.
fuente
Q
JavaScript ES6,
686252 bytesAhorró 10 bytes gracias a un buen truco de @Neil
Intentando un enfoque diferente al de @ Cᴏɴᴏʀ O'Bʀɪᴇɴ. Posiblemente podría mejorarse.
fuente
x=>[...Array(x)].map((_,y,x)=>x.map((_,z)=>+(y==z)))
para un ahorro de 10 bytes.x=>[...Array(x)].map((_,y,x)=>x.map(_=>+!y--))
Retina , 25
Crédito a @randomra y @Martin por golf extra.
Pruébalo en línea.
Tenga en cuenta que esto toma la entrada como unario. Si esto no es aceptable, entonces la entrada decimal se puede dar de la siguiente manera:
Retina, 34
Pruébalo en línea.
fuente
$*0
para reemplazar un número n con n0
s.Haskell, 54 bytes
f
devuelve la matriz de identidad para la entrada n. Lejos de ser óptimo.fuente
map
llamada.Lua,
77 7565 bytesBueno, no estoy seguro de si lua es el mejor lenguaje para esto con la concatenación de dos períodos ... Pero bueno, hay una oportunidad. Veré si hay alguna mejora que hacer.
EDITAR:
Descubrí algo por accidente que encuentro bastante extraño, pero funciona.
En Lua, todos saben que tienes la capacidad de asignar funciones a variables. Esta es una de las características más útiles de CodeGolf.
Esto significa en lugar de:
Puedes hacerlo:
Pero espera, Lua permite cierta cantidad de POO. Por lo tanto, incluso podría hacer:
Eso también funcionará y cortará personajes.
Ahora aquí viene la parte extraña. Ni siquiera necesita asignar una cadena en ningún punto. Simplemente haciendo:
Trabajará.
Para que pueda ver la diferencia visualmente, eche un vistazo a los resultados de golf de esto:
Usando string.sub (88 caracteres)
Asignación de string.sub a una variable (65 caracteres)
Asignación de string.sub usando un enfoque OOP (64 caracteres)
Asignación de string.sub usando un enfoque nulo? (60 caracteres)
Si alguien sabe por qué esto funciona, estaría interesado.
fuente
Pitón 3, 48
Guardado 1 byte gracias a sp3000.
Me encantan los desafíos que puedo resolver en una sola línea. Bastante simple, construya una línea de 1 y 0 igual a la longitud del int pasado. Salidas como una matriz 2d. Si envuelve la parte después de: in
'\n'.join()
, la imprimirá bastante.fuente
x-i-1 -> x+~i
C,
59 o 5956 o 56Dos versiones de idéntica longitud.
3 bytes guardados debido a una sugerencia de anatolyg:
(n+1)
->~n
Itera
i
den*n-1
a cero. Imprime un 1 si i% (n + 1) es cero, de lo contrario 0. Luego imprime una nueva línea sii%n
= 0 de lo contrario un espacio.fuente
n+1
es demasiado aburrido Use en su~n
lugar!i;
?i;
solo declara la variablei
. En C siempre tiene que declarar una variable antes de usarla, indicando el tipo para que el compilador sepa cuánta memoria asignar. Con el compilador GCC, si no especifica un tipo, se supone que esint
.Mata, 4 bytes
Salida
Mata es el lenguaje de programación matricial disponible dentro del paquete estadístico Stata. I (n) crea una matriz de identidad de tamaño n * n
fuente
I
y los otros 3 bytes simplemente están llamando a la función ¡Eso haría que tu respuesta sea una de las más bajas en este desafío! :-)K6 , 1 byte
=
es exactamente estoPruébalo en línea!
fuente
Pyth, 8 bytes
Probarlo aquí .
fuente
qRRQQ
que parece funcionar, excepto que obtienesTrue
y enFalse
lugar de1
y0
, sin embargo, para solucionar este afaik requiere el uso de tres bytes,sMM
lo que no ayuda ...Python 3.5 con NumPy -
574930 bytesNumPy.identity toma un número entero, n, y devuelve una matriz de identidad por n. Esta respuesta está permitida a través de esta política .
fuente
import numpy\nnumpy.identity
es una respuesta legítima .import numpy\nnumpy.identity()
30 bytes?from numpy import identity
. 26 bytes.from numpy import identidy\nidentity
(en cuyo caso sería más corto de usar en*
lugar del específico incorporado)Mathematica, 35 Bytes
sin usar IdentityMatrix
fuente
Javascript, 40
fuente
Japt,
141210 bytes¡Pruébalo en línea! Nota: esta versión tiene algunos bytes adicionales para imprimir la salida.
fuente
Brain-Flak ,
206170162 bytesPruébalo en línea!
fuente
K, 7 bytes
Tome el producto cruzado de igualdad de dos vectores que contienen [0, n).
En acción:
fuente
Java, 60 bytes
Crea una matriz 2D y reemplaza elementos donde la fila y la columna son iguales
1
.fuente
CJam, 7 bytes
Este es un bloque de código que saca un número entero de la pila y empuja una matriz 2D a cambio.
Pruébalo en línea!
fuente
Mathematica, 14 bytes
Caso de prueba
fuente
Perl,
3933 bytesGracias a Ton Hospel por guardar 6 bytes.
Corriendo con el
-E
perlrun:fuente
/$/,say map$`==$_|0,@%for@%=1..<>
o incluso mejor,//,say map$'==$_|0,@%for@%=1..<>
pero así ya no se puede poner entre comillas simplesprint
lugar de decir, porque-E
solo es gratis en la línea de comando.