Esta é uma questão de código-golfe.
Dados inteiros s e n, a tarefa é gerar todas as matrizes de comprimento n que levam valores de -s a s. O único problema é que você deve produzi-los na seguinte ordem.
- A matriz com todos os zeros de comprimento n.
- Todas as matrizes de comprimento n com elementos de -1 a 1, excluindo qualquer matriz que você tenha gerado anteriormente.
- Todas as matrizes de comprimento n com elementos de -2 a 2, excluindo qualquer matriz que você tenha gerado anteriormente.
- E assim por diante até chegar a todas as matrizes de comprimento n com elementos de -s a s, excluindo qualquer matriz que você tenha gerado anteriormente.
Você deve gerar uma matriz por linha. Eles podem ser separados por espaço ou vírgula.
Aqui está um código python não compatível que gera as matrizes / listas / tuplas na ordem correta.
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 "***"
Glória extra (e um voto positivo de mim) por respostas que não executam nenhuma subtração definida ou equivalente.
code-golf
array-manipulation
Martin Ender
fonte
fonte
Respostas:
Geléia, 9 bytes
Nenhuma subtração de lista foi usada na criação deste post. Experimente online!
Como funciona
fonte
MATL , 18 bytes
A primeira entrada é
s
, a segunda én
Isso funciona na versão atual (15.0.0) do idioma.
Experimente online!
Explicação
fonte
Haskell,
6160 bytesExemplo 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]]
.Como funciona:
Edit: @xnor apontou que
mapM id
ésequence
.fonte
mapM id
é mais curto quesequence
.Mathematica, 83 bytes
Para usar, coloque em um roteiro e de entrada
n
, em seguida,s
em linhas separadas. Imprime cada matriz como uma lista entre colchetes e delimitada por vírgulas (por exemplo,{-1, 0, 1}
). Ele funciona tomando todas as listas de tamanhosn
com números entre ee[-cur..cur]
imprimindo aqueles que incluem um-cur
ou outrocur
. Em seguida, ele repete este para todoscur
em[0..s]
. (Este post contém 19 `caracteres!)fonte
JavaScript (SpiderMonkey 30+), 134 bytes
Usa a abordagem cartesiana de poder e classificação, que pensei separadamente, mas estava recompilando o SpiderMonkey na época, então não consegui responder antes do @Dennis.
fonte