Dados dos números positivos N >= 2
y N <= 100
crear una matriz que sigue las siguientes reglas:
- El primer número comienza en la posición
[0,0]
- El segundo número comienza en la posición
[0,1]
- El tercer número va debajo del primer número (posición
[1,0]
) - Los siguientes números van en dirección de "corte"
- Rango de números utilizados es
[1, N1 * N2]
. Entonces, los números van desde el inicio 1 hasta el resultado de la multiplicación de ambas entradas.
Entrada
- Dos números
N >= 2
yN <= 100
. El primer número es la cantidad de filas, el segundo número es la cantidad de columnas.
Salida
- Matriz. (Se puede generar como una matriz multidimensional o una cadena con saltos de línea)
Ejemplo:
3 and 5
Salida de números dados :
1 2 4 7 10
3 5 8 11 13
6 9 12 14 15
Números dados 2 and 2
1 2
3 4
Números dados 5 and 5
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
El código más corto en bytes gana.
Respuestas:
Jalea ,
65 bytesPruébalo en línea!
Cómo funciona
fuente
<atom><atom>¥þ
pero no puedo encontrar la combinación correcta.oþ++þ
está cerca pero no llega allí[1, 2, 3, 4, 5, 6]
.Ụ
clasifica esta matriz, utilizando la clave que se asigna1
a[1, 1]
,2
a[1, 2]
,3
a[2, 1]
, etc. Esencialmente, esto encuentra el índice de cada par de la matriz ordenada por sumas en la matriz ordenado-lexicográficamentePython 3 , 91 bytes
Pruébalo en línea!
fuente
R ,
1016054 bytesPruébalo en línea!
Gracias a @nwellnhof por la sugerencia de
rank
Ports Dennis 'Jelly responde .
Respuesta anterior, 101 bytes:
Pruébalo en línea!
split
está haciendo la mayor parte del trabajo aquí; posiblemente haya un algoritmo de golfista pero esto definitivamente funciona.Explicación:
Pruébalo en línea! - puede usar una envoltura
print
alrededor de cualquiera de los lados derechos de las tareas<-
para ver los resultados intermedios sin cambiar el resultado final, ya queprint
devuelve su entrada.fuente
rank(x,1,"f")
es 2 bytes más corto queorder(order(x))
.rank(x,,"l")
lo eliminarát
.Java 10,
121120109105 bytes-11 bytes gracias a @ OlivierGrégoire .
-4 bytes gracias a @ceilingcat .
Pruébalo en línea.
Explicación:
fuente
x,y
/width,height
J , 15 bytes
-4 bytes más para esta solución por millas. ¡Gracias!
Pruébalo en línea!
J ,
2219 bytes-3 bytes gracias a FrownyFrog!
Pruébalo en línea!
Una implementación de la fantástica solución Jelly de Dennis en J.
Explicación:
Verbo diádico, toma argumento izquierdo y derecho (mfn)
+/&i.
crea listas 0..m-1 y 0..n-1 y crea una tabla de suma para ellos:[:>:@/:@/:@,
aplana la tabla y califica la lista dos veces y agrega 1:,$
vuelve a dar forma a la lista en la tabla mxn:fuente
-@],\
→,$
para −3 bytes.$1(+/:@;)</.@i.
con entrada como una matriz[r, c]
/.
pero no pude lograr tu resultado :)APL + WIN, 38 o 22 bytes
Solicita la columna de entrada de enteros y luego la fila:
o:
basado en la doble aplicación de Dennis de subir de grado. Te perdiste eso :(
fuente
Wolfram Language (Mathematica) ,
7367 bytesCuente elementos en las filas de arriba:
Min[j+k,#2]~Sum~{k,i-1}
Cuente elementos en la fila actual y debajo:
Max[j-k+i-1,0]~Sum~{k,i,#}
Poner en una tabla y agregar 1. Voila:
Actualización: me di cuenta de que hay una forma más corta de contar todas las posiciones por delante de una posición normalmente especificada en la matriz con solo una suma en dos dimensiones:
Pruébalo en línea!
Pruébalo en línea!
fuente
APL (Dyalog Unicode) ,
1412 bytesPruébalo en línea!
-2 gracias a ngn , debido a su uso inteligente de
↑⍳
.Basado en la solución Jelly de 5 bytes de Dennis.
fuente
∘.+⌿⍳¨⍵
->+/↑⍳⍵
⍳
combinado con↑
.05AB1E , 23 bytes
Pruébalo en línea!
fuente
Python 3 , 164 bytes
Pruébalo en línea!
Definitivamente esta no es la solución más corta, pero pensé que era divertida.
fuente
from numpy import*
y soltar ambosn.
es un poco más corto. Además, puede soltar el espacio en) for
. Y cambiar a Python 2 le permite cambiarreturn a
aprint a
(en Python 3 sería el mismo número de bytesprint(a)
).import*
. Nunca superaré la respuesta de Dennis, así que me quedaré con Python 3.Python 2 , 93 bytes
Pruébalo en línea!
Versión semi-sin golf:
fuente
Japt ,
2524 bytesApenas elegante, pero hace el trabajo. Trabajar con datos 2D en Japt es complicado.
Agregué la
-Q
bandera en TIO para una visualización más fácil de los resultados, no afecta la solución.Mordió un byte gracias a Oliver .
Pruébalo en línea!
fuente
×
eso, puedes reemplazarlo*V
conN×
.JavaScript (Node.js) , 103 bytes
Pruébalo en línea!
fuente
TI-Basic, 76 bytes
Solicita la entrada del usuario y devuelve la matriz en
Ans
y la imprime.TI-Basic es un lenguaje tokenizado ; Todos los tokens utilizados aquí son un byte,
[A]
que no sea 2 bytes.Nota: TI-Basic (al menos en TI-84 Plus CE) solo admite matrices de hasta 99x99, y este programa también.
Explicación:
fuente
Perl 6 ,
6159 bytesPruébalo en línea!
Otro puerto de la solución Jelly de Dennis.
fuente
Java (JDK 10) ,
142131 bytesPruébalo en línea!
Explicación:
Muchas gracias a Kevin Cruijssen porque no sabía cómo ejecutar mi código en tio .
Se le roban algunos códigos como el encabezado y el pie de página. -> Su respuesta
fuente
PHP, 115 bytes
un enfoque bastante vago; Probablemente no sea lo más corto posible.
función anónima, toma ancho y alto como parámetros, devuelve matriz 2d
pruébalo en línea
fuente
JavaScript (Node.js) ,
108105101100 bytesPruébalo en línea!
fuente
Adjunto , 45 bytes
Pruébalo en línea!
Lambda anónima, donde se cambian los parámetros. Esto se puede arreglar para +1 byte, anteponiendo
~
al programa. El conjunto de pruebas ya hace esto.Explicación
Este enfoque es similar a la respuesta J y la respuesta Jelly .
La primera idea es generar una tabla de valores:
Esto genera una tabla de suma usando rangos de ambos parámetros de entrada. Para la entrada
[5, 3]
, esto da:Luego, aplanamos esto con
Flat!
:Usando el enfoque en la respuesta J, podemos calificar la matriz (es decir, devolver índices de valores ordenados) dos veces, con
Grade//2
:Entonces, necesitamos cortar los valores correctamente, como en la respuesta de Jelly. Podemos cortar todos los
_
elementos para hacer esto:Entonces, solo necesitamos compensar la indexación 0 de Attache con
+1
:Y así tenemos el resultado.
fuente
Python 3 , 259 bytes
Así que hice esto de una manera extraña. Noté que había dos patrones en la forma en que se forma la matriz.
El primero es cómo el patrón de las filas superiores tiene la diferencia entre cada término que aumenta de 1 -> h donde h es la altura y l es la longitud. Así que construyo la fila superior en función de ese patrón
Para una matriz de dim (3,4) dando un
max RoC = 3
Veremos la fila superior del formularioSupongamos, en cambio, que el dim (3,9) que da un
max RoC = 3
a veremos una fila superior deEl segundo patrón es cómo cambian las filas entre sí. Si consideramos la matriz:
y restamos cada fila de la fila de abajo (ignorando la fila adicional) obtenemos
Al ver esta matriz, podemos notar que esta matriz es la secuencia
2 3 4 5 5 4 3 2
donde por cada fila hay 5 términos de este patrón desplazados por 1 para cada fila. Ver abajo para visual.Entonces, para obtener la matriz final, tomamos nuestra primera fila que creamos y sacamos esa fila agregada con los 5 términos necesarios de este patrón.
Este patrón siempre tendrá las características de principio
2-> max value
y finmax value -> 2
dondemax value = min(h+1, l)
el número máximo de veces que aparecerá el valor máximo esappearances of max = h + l -2*c -2
dondec = min(h+1, l) - 2
Entonces, en general, mi método de crear nuevas filas se ve como
Código relevante a continuación. No terminó siendo corto pero todavía me gusta el método.
Pruébalo en línea!
fuente
Japt, 20 bytes
Intentalo
fuente