Dado un número n
, genera una lista ordenada de índices basados en 1 que caen en cualquiera de las diagonales de una n*n
matriz cuadrada.
Ejemplo:
Para una entrada de 3
:
El cuadrado será:
1 2 3
4 5 6
7 8 9
Ahora seleccionamos todos los índices representados por \
, /
oX
( #
o se rechazan las posiciones no diagonales)
\ # /
# X #
/ # \
El resultado será:
[1,3,5,7,9]
Casos de prueba:
1=>[1]
2=>[1,2,3,4]
3=>[1,3,5,7,9]
4=>[1,4,6,7,10,11,13,16]
5=>[1,5,7,9,13,17,19,21,25]
No habrá respuesta aceptada. Quiero saber el código más corto para cada idioma.
Respuestas:
Octava , 28 bytes
Función anónima que ingresa un número y genera un vector de columna de números.
Pruébalo en línea!
fuente
JavaScript (ES6), 48 bytes
Emite una lista de enteros separados por guiones como una cadena.
Formateado y comentado
Casos de prueba
Mostrar fragmento de código
fuente
&
para guardar un byte?4%3
y4%5
no tienen 1 bit en común, pero ambos no son cero.n=5
y descubrí que no funcionaría.k%~-n&&k%-~n
Deberia trabajar. buen truco con el separador!R ,
38353438 bytes3 bytes guardados cuando recordé la existencia de la
which
función ..., 1 byte guardado gracias a @Rift+4 bytes para el argumento
ec=T
cuando se llama como un programa completo porsource()
Pruébalo en línea!
Explicación:
fuente
d=diag(n<-scan());which(d|d[n:1,])
source
), esto no imprime nada. Tienes que llamarcat
. Ver esta publicación en meta .Jalea , 8 bytes
Pruébalo en línea!
Utiliza el algoritmo de Luis Mendo en su respuesta MATL.
fuente
ŒD
.ŒD
hace algo completamente diferente de X de un tamaño específico.Octava ,
4137 bytesPor cierto, esto también funciona en MATLAB. Sin funcionalidad furtiva de Octave específica :)
Pruébalo en línea!
Explicación:
En lugar de crear una matriz cuadrada y encontrar las dos diagonales, pensé que preferiría calcular las diagonales directamente. ¡Esto fue 17 bytes más corto! =)
Esto es lo que parece, sin
unique
:Sí, probablemente debería haber cambiado el orden de las diagonales para hacerlo más amigable con los humanos.
fuente
MATL , 6 bytes
Pruébalo en línea!
Explicación
El mismo enfoque que mi respuesta Octave.
Considere la entrada
3
como un ejemplo.La indexación lineal es la columna mayor , basada en 1. Para obtener más información, consulte el fragmento de longitud 12 aquí .
fuente
t
es duplicado, no se transpone. Además, he agregado un ejemplo resueltoPython 2 ,
5453 bytesPruébalo en línea!
fuente
Octava,
6854 bytes¡Gracias a @Stewie Griffin por guardar 14 bytes!
Pruébalo en línea!
MATLAB, 68 bytes
Explicación:
fuente
Mathematica, 42 bytes
Pruébalo en línea!
@KellyLowder lo jugó hasta ..
Mathematica, 37 bytes
y @alephalpha tiró la mesa!
Mathematica, 34 bytes
fuente
##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&
es 5 bytes más cortoUnion@@Range[{1,#},#^2,{#+1,#-1}]&
Protón , 41 bytes
Pruébalo en línea!
fuente
MATL , 14 bytes
Pruébalo en línea!
fuente
C (gcc) ,
6558 bytes-7 bytes gracias a Titus!
Pruébalo en línea!
fuente
i%-~n&&i%~-n||printf("%d ",i+1)
(-7 bytes)C # (.NET Core) ,
9783 bytesPruébalo en línea!
El cambio aquí se basa en el cambio entre números para encontrar. Los dos turnos que comienzan en 0 son
n-1
yn+1
, por lo tanton=5
, si , los números paran-1
sería0,4,8,12,16,20
y paran+1
sería0,6,12,18,24
. Combinando estos y dando 1-indexación (en lugar de 0-indexación) da1,5,7,9,13,17,19,21,25
. El desplazamiento desden
se logra utilizando la negación bit a bit (operación de complemento bit a bit), donde~-n==n-1
y-~n==n+1
.Versión antigua
Pruébalo en línea!
Este enfoque utiliza los índices de columna y fila para determinar si los números están en las diagonales.
i/n
da el índice de la fila yi%n
da el índice de la columna.Devolviendo solo la matriz de números
Si se considera que construir solo la matriz de números cuenta para el costo de bytes, entonces se podría hacer lo siguiente, según la sugerencia de Dennis.Verweij (
using System.Linq;
agrega 18 bytes adicionales):C # (.NET Core) , 66 + 18 = 84 bytes
Pruébalo en línea!
fuente
&
. El extra&
está ahí solo para romper la comparación si la primera entrada es falsa MSDNusing System;
? (¿Asumo que envolverlo en unnamespace System.Linq
no es válido?)Javascript,
7363 bytesversión antigua
Guardado 10 bytes gracias a @Shaggy
Primera vez jugando al golf! Espero no haberlo estropeado demasiado.
Mostrar fragmento de código
fuente
filter
función:!(--x%(n+1)&&x%(n-1))
y creando su matriz de esta manera:[...Array(n*n+1).keys()]
[1...n*n]
rango conArray(n*n).fill().map((x,i)=>i+1)
" -[...Array(n*n)].map((_,y)=>y+1)
es una forma más corta de hacerlo, para referencia futura.n=>[...Array(n*n+1).keys()].filter(x=>!(--x%-~n&&x%~-n))
Pyth ,
2018 bytes( Aquí está la versión inicial ).
Banco de pruebas.
Pyth , 18 bytes
Banco de pruebas.
fuente
Perl 5 , 56 + 1 (-n) = 57 bytes
Pruébalo en línea!
fuente
perl -e
. La línea de comando para este ejemplo seríaperl -ne
. Esa es una diferencia de +1.Java (OpenJDK 8) , 71 bytes
Pruébalo en línea!
La respuesta del puerto de scottinet .
fuente
Japt , 16 bytes
Parece que no puede hacerlo mejor que esto, pero estoy seguro de que es posible. Tuve que sacrificar 2 bytes por el requisito innecesario de que usáramos 1 indexación.
Pruébalo
fuente
Octava, 32 bytes
Pruébalo en línea!
fuente
PHP,
5654 + 1 bytes+1 byte para
-R
banderaimprime números precedidos por guiones. Ejecutar como tubería
-nR
o probarlo en línea .requiere PHP 5.6 o posterior para el
**
operador.Agregue un byte para PHP anterior: Reemplace
;$z**.5<$n=$argn
con$z=$argn;$z<$n*$n
.fuente
Ruby, 45 bytes
Funciona internamente como cero indexado. comprueba si
i
módulon+1
on-1
es 0, si es así imprimei+1
.fuente