Esta es una pregunta de código de golf.
Dados los enteros syn, la tarea es generar todas las matrices de longitud n que toman valores de -s a s. El único giro es que debe generarlos en el siguiente orden.
- La matriz de ceros de longitud n.
- Todas las matrices de longitud n con elementos de -1 a 1, excluyendo cualquier matriz que haya generado anteriormente.
- Todas las matrices de longitud n con elementos de -2 a 2, excluyendo cualquier matriz que haya generado anteriormente.
- Y así sucesivamente hasta llegar a todas las matrices de longitud n con elementos de -s a s, excluyendo cualquier matriz que haya generado anteriormente.
Debe generar una matriz por línea. Pueden ser espacios o comas separados.
Aquí hay un código de Python que no cumple con los requisitos que genera las matrices / listas / tuplas en el orden correcto.
import itertools
s = 3
n = 2
oldsofar = set()
newsofar = set()
for i in xrange(s):
for k in itertools.product(range(-i,i+1), repeat = n):
newsofar.add(k)
print newsofar - oldsofar
oldsofar = newsofar.copy()
print "***"
Gloria extra (y un voto positivo de mi parte) para las respuestas que no realizan restas establecidas o equivalentes.
code-golf
array-manipulation
Martin Ender
fuente
fuente
Respuestas:
Jalea, 9 bytes
No se utilizó ninguna resta de lista en la realización de esta publicación. Pruébalo en línea!
Cómo funciona
fuente
MATL , 18 bytes
La primera entrada es
s
, la segunda esn
Esto funciona en la versión actual (15.0.0) del lenguaje.
Pruébalo en línea!
Explicación
fuente
Haskell,
6160 bytesEjemplo de uso:
2#2
->[[0,0],[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1],[-2,-2],[-2,-1],[-2,0],[-2,1],[-2,2],[-1,-2],[-1,2],[0,-2],[0,2],[1,-2],[1,2],[2,-2],[2,-1],[2,0],[2,1],[2,2]]
.Cómo funciona:
Editar: @xnor a cabo en punta que
mapM id
essequence
.fuente
mapM id
es más corto quesequence
.Mathematica, 83 bytes
Para usar, ingrese un script e ingrese
n
luegos
en líneas separadas. Imprime cada matriz como una lista delimitada por comas entre corchetes (por ejemplo,{-1, 0, 1}
). Funciona tomando cada lista de longitudn
con números entre[-cur..cur]
, e imprimiendo los que incluyen-cur
ocur
. Luego repite esto para todoscur
adentro[0..s]
. (¡Esta publicación contiene 19 caracteres!)fuente
JavaScript (SpiderMonkey 30+), 134 bytes
Utiliza el enfoque cartesiano de poder y clasificación, que pensé por separado, pero estaba recompilando SpiderMonkey en ese momento, así que no pude responder esto antes de @Dennis.
fuente