Los grupos son una estructura muy utilizada en matemáticas y tienen aplicaciones en informática. Este desafío de código se trata del menor número de caracteres para crear una tabla de grupo para el grupo aditivo Z n .
Cómo se construye la tabla: para Z n , los elementos son {0, 1, 2, ..., n-1}. La tabla tendrá n filas yn columnas. Para la entrada i-ésima de la tabla, el valor es i + j mod n. Por ejemplo, en Z 3 , la entrada 1-2 (segunda fila, tercera columna si cuenta la fila / columna inicial como 1) es (1 + 2)% 3 = 0 (ver salida de muestra).
Entrada: un entero positivo, n
Salida: una tabla que es una presentación textual de Z n , construida como se describió anteriormente y mostrada como se muestra a continuación en las salidas de muestra. Los espacios son opcionales
Entrada de muestra: 3
Salida de muestra:
0 1 2
1 2 0
2 0 1
Entrada de muestra: 5
Salida de muestra:
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
3 4 0 1 2
4 0 1 2 3
Respuestas:
APL (10)
(Suponiendo
⎕IO=0
. Funciona en ngn / apl por defecto, otras APL tienden a necesitar una⎕IO←0
primera).Explicación:
⍳⍵
: los números [0..⍵)∘.+⍨
: crea una tabla de suma⍵|
: números en la tablamod
⍵fuente
⊢|⍳∘.+⍳
o los trenes no funcionaron en la versión de julio de 2014 de ngn?GolfScript (13 caracteres)
Por su comentario sobre la respuesta de Claudiu, entiendo que el espacio en blanco entre los elementos de una fila no es necesario. En ese entendimiento:
Demostración en línea
Disección:
Si es necesario un espacio en blanco, para 20 caracteres:
fuente
Python 2, 66 bytes
Rota la lista haciendo estallar y volviendo a agregar.
Python 3, 53 bytes
Utiliza el mismo método que @ mbomb007, pero abusa
print
como una función.fuente
*R,=
es una construcción extraña ... ¿Sirve solo para convertirrange
la salida de una tupla?*R
range
es un objeto iterable que se puede desempaquetar y volver a empacar, recolectando todo en élR
. Debería ser equivalente aR=list(range(n))
, siendo el primero más conciso.05AB1E ,
108 bytesPruébalo en línea!
Explicación
Respuesta anterior: 10 bytes
Pruébalo en línea!
Mi primer intento de jugar golf en 05AB1E.
Explicación de la respuesta anterior.
fuente
FݨN._ðý,
yݨsGDÀ})»
siéntase libre de hacer cualquier pregunta en el chat 05AB1E , y eche un vistazo a la página de consejos 05AB1E si aún no lo ha hecho. :)Gelatina , 4
Pruébalo en línea!
fuente
Pyth , 16
Imprime la tabla con espacios en blanco adecuados.
Explicación:
fuente
J, 20
Lectura de stdin y producción de una matriz 2D (que representa lo mismo que la muestra en la pregunta).
Si una función que toma una cuerda basta,
(|+/~@i.)@".
. Si una función que toma un número entero es suficiente,|+/~@i.
debería ser suficiente.Explicación:
f g
en J (para las funciones f, g) denota un "gancho", que es una función compuesta que ejecuta la entrada a través de g (una función unaria) y luego la entrada y el resultado de g a través de f (una función binaria). La respuesta es una bifurcación con componentes|
(módulo) y+/~@i.
. La última parte es "tabla de sumas compuesta con lista de índices hasta" (i.
es un poco comorange
en Python).fuente
|+/~@i.
, que debería ser aceptable según las reglas estándar aquí.Octava, 23
fuente
Pitón 2, 67
Pruébalos los dos aquí
Utilizo la división de listas para "rotar" los
n
tiempos de la lista , imprimiéndolo cada vez. (68 caracteres)Logré obtener un personaje más corto que el anterior con un truco extraño. (67 caracteres)
fuente
def f(n):*R,=range(n);[print(*R[i:]+R[:i])for i in R]
. No pensé que el splat realmente funcionaría sin parens.Matlab (28)
fuente
Código de máquina x86-64 (Linux),
8064 bytesEsperaba que esta solución fuera solo unos pocos bytes más corta para poder superar algunas de las otras presentaciones en esta publicación. Existe la posibilidad de que si uso algunas de las versiones de 32 o 16 bits de los registros, pueda eliminar algunos bytes.La conversión de muchos de los registros a las versiones de direccionamiento de 32 bits ahorró 16 bytes.Básicamente, esta función se llama desde un programa C / C ++ que pasó n a través de rdi, y un puntero a una asignación a través de rsi. El puntero que tiene rsi es en realidad 1 byte desde el final de la asignación, ya que la tabla está construida al revés. Esto facilita la conversión de un número entero en caracteres ASCII imprimibles (hecho tomando un número x mod 10 y convirtiendo el resultado a ASII).
Para ver el código del contenedor C ++ y los comentarios sobre el ensamblaje, consulte mi repositorio .
fuente
Pari / GP , 26 bytes
Pruébalo en línea!
fuente
matrix(m,n,X,Y,expr)
genera unamXn
matriz de expresiónexpr
, la variable de filaX
va de1
am
y la variable de columnaY
va de1
an
.MathGolf ,
108 bytesPruébalo en línea!
-2 bytes gracias a Jo King
Explicación
Usaré una entrada de ejemplo
3
para la explicaciónTambién podría hacerlo
r░y\(Åo╫
, lo que disminuye el número de bucles en 1 y omite el descarte después del bucle.fuente
q
para eliminar la duplicación?o
. Aunque lo mejor que pude entender de esa manera fue esto . También podría ser de 10 bytes, pero estoy en el móvil.C - 96
fuente
Golfscript, 20 caracteres
Un trabajo terriblemente perezoso.
Ejecútalo aquí . (La primera línea es simular stdin).
Explicacion :
Cuando finaliza el programa, la pila contiene cada una de las matrices con nuevas líneas entre ellas. El intérprete emite lo que queda en la pila, dando el resultado deseado.
fuente
CJam, 14 caracteres
Pruébalo aquí.
Explicación
La idea es repetir la cadena de
0
aN-1
, pero dividirla en bloques deN+1
. Este desajuste desplaza la fila a la izquierda cada vez. Por último, necesitamos deshacernos del personaje extraño y unir todo con nuevas líneas.Aquí está el código explotado, junto con el contenido de la pila para la entrada
3
.El resultado se imprime automáticamente al final del programa. (Tenga en cuenta que el contenido de la pila para el paso final es técnicamente una matriz mixta que contiene números y caracteres de nueva línea, no una cadena que contiene solo caracteres).
Alternativamente, 11 caracteres
Con la adición reciente
ew
(esto es más nuevo que el desafío: devuelve todas las subcadenas superpuestas de una longitud dada), uno podría hacer 11 bytes:Así es como funciona este:
fuente
l~_,\{_(+N\}*;
. Sin embargo, me pregunto si podemos hacerlo mejor con esto .ew
podría funcionar pero es más nuevo que el desafío.MATL , 6 bytes
Pruébalo en línea!
fuente
Excel VBA, 77 bytes
Función de ventana inmediata anónima VBE que toma entrada, como entero, n, del rango
[A1]
y salidas al rangoA2.Resize(n,n)
.fuente
Perl 6 , 23 bytes
Pruébalo en línea!
Bloque de código anónimo que toma un número e imprime la matriz en el formato dado con espacios. Si podemos devolver algo, entonces
.put
se puede eliminar.Explicación:
fuente
Carbón , 13 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Nota: espacio final. Explicación:
fuente
APL (NARS), 15 caracteres, 30 bytes
prueba:
aquí el idioma no necesita comentarios ...
fuente
Japt
-R
, 5 bytesIntentalo
Si el uso de una coma como separador no es válido, agregue un byte para ningún separador:
Intentalo
O 2 bytes para usar un espacio:
Intentalo
fuente
R , 37 bytes
Crea un vector de 0 a n-1, y agrega secuencialmente 1, luego 2 ... luego n, y modula la matriz por la longitud del vector, que es n.
Pruébalo en línea!
fuente
Adelante (gforth) , 53 bytes
Pruébalo en línea!
Explicación
Bucle anidado que genera una nueva línea cada n números
Explicación del código
fuente