Escreva um programa ou função que, dado um número inteiro n
, construa uma matriz com n
dimensões de n
comprimento, em que cada elemento seja um identificador de suas próprias coordenadas. Ou seja, começando com uma matriz, preencha-a com n
matrizes, onde cada uma delas contém n
mais matrizes, até uma profundidade de n-1
. Os elementos das matrizes mais profundas são as coordenadas que descrevem onde estão na matriz completa.
Alguns exemplos, caso minha explicação seja confusa.
n = 1
["1"]
n = 2
[
["11", "12"],
["21", "22"]
]
n = 3
[
[
["111","112","113"],
["121","122","123"],
["131","132","133"]
],
[
["211","212","213"],
["221","222","223"],
["231","232","233"]
],
[
["311","312","313"],
["321","322","323"],
["331","332","333"]
]
]
Aqui, "321" significa que é o 1º elemento do 2º elemento da 3ª matriz.
Regras:
- As coordenadas e a dimensão (
n
) podem ser 0 ou 1 indexadas - Você pode assumir que
n
é um dígito, abaixo de 10 para ambas as opções de indexação, para evitar resultados ambíguos - IO é flexível.
- Em particular, as coordenadas podem ser matrizes, seqüências de caracteres etc., desde que sejam claras. "321" => [3,2,1]
- A saída pode ser números inteiros na base 10 com ou sem zeros à esquerda.
- As coordenadas podem estar na ordem inversa, se desejar, desde que seja consistente. "321" => "123"
- A saída não precisa necessariamente ser uma estrutura de matriz no seu idioma. Desde que haja marcadores distintos e claros para o início de uma matriz, o fim de uma matriz e para a separação de elementos.
- A saída para
n=1
pode ser apenas 1 - Se sua saída for atípica, certifique-se de explicar o formato.
- Isso é código-golfe, e a solução mais curta em cada idioma vence!
data L a = L [L a] | E a
.Int -> [String]
ouInt -> [[String]]
e assim por diante, dependendo do que a entrada éRespostas:
Dyalog APL ,
53 bytes-2 bytes graças ao FrownyFrog
Experimente online!
⍳
fornece todos os índices com o formato de uma matriz. por exemplo 2 3 .⍴
reformula o argumento da direita para ser o tamanho do argumento da esquerda.⍨
faz com que ambos sejam o argumento certo.fonte
Python 3 , 56 bytes
Experimente online!
O Sr. Xcoder economizou 2 bytes mudando para o Python 3 por descompactar as estrelas.
fonte
f=lambda n,*l:len(l)//n*l or[f(n,*l,k)for k in range(n)]
funciona por 56 bytes.Wolfram Language (Mathematica) ,
3222 bytes-10 bytes graças a @alephalpha
Experimente online!
fonte
J , 18 bytes
Experimente online!
Solução iterativa, nenhum produto cartesiano embutido. É assim que o pico J se parece.
fonte
Geléia ,
87 bytesExperimente online!
Explicação
Use o argumento 2 como exemplo.
Se
¡
não variou, o argumento correto sobre iterações para díades seria de 4 bytes:ṗs³¡
fonte
1
é válida?J, 13 bytes
Experimente online!
Interessante é muito mais tempo do que a resposta da APL (embora possa ser minha incapacidade de ver uma tradução melhor)
explicação
fonte
#.inv
é muito inteligente, +1.MATLAB,
928955 bytesTenho uma resposta diferente depois de reler as regras do desafio, mas deixarei a tentativa anterior abaixo, pois é diferente e ainda divertido de se olhar.
Explicação
Isso gera uma matriz n-dimensional de cadeias que são 0 indexadas.
Resposta anterior (89 bytes)
Meu primeiro golfe! Provavelmente isso pode ser reduzido mais, mas pensei em publicar o que tenho.
Explicação
Saídas x no final para dar solução
Semelhante ao outro post do MATLAB, a saída é uma matriz n-dimensional, exceto que usa números para exibir as coordenadas. Funciona com qualquer valor, embora, como os loops sejam ruins no MATLAB, ele comece a desacelerar significativamente em torno de n = 8.
Edit: -2 bytes graças a Luis Mendo. Também foi removido ponto-e-vírgula final para imprimir a saída.
fonte
length
pornnz
para salvar alguns bytes. Além disso, de acordo com as regras do PPCG, o código precisa produzir alguma saída real, normalmente exibindo-o em STDOUT (não é suficiente ter a saída armazenada em uma variável) ou deve ser uma função que retorna a saídaFerrugem ,
201176167166154 bytesExperimente online!
O tipo de saída é um tipo de soma com duas variantes, pois o idioma é estritamente digitado. Pode ser
L
um tipo de lista que contém esse tipo de soma ouS
um tipo de resultado (uma sequência). O resultado pode ser assim.Além disso, reformatado usando
rustfmt
:fonte
R , 102 bytes
Experimente online!
which
indexação de arrayfonte
which
é o que eu estava procurando, obrigado! Guardados 9 bytesJava 10, 144 bytes
A solução é método
f
. Produz uma representação de seqüência de caracteres da matriz.Experimente Online
Ungolfed
Agradecimentos
fonte
Object[]
porvar
. Além disso, acho que esseelse
bloco é desnecessário, como você temreturn
noif
bloco.05AB1E , 7 bytes
Experimente online!
Explicação
fonte
JavaScript (Node.js) ,
626058 bytesExperimente online! A saída é indexada em 0. Editar: salvou 2 bytes graças a @JoKing e mais 2 bytes graças a @Arnauld.
fonte
MATLAB,
116108104 bytesEu sinto que deve haver uma maneira mais curta de fazer isso, dada a afinidade do MATLAB em relação a matrizes multidimensionais ... Obrigado a Luis pelos 4 bytes de algumas letras curtas
Explicação
A saída é uma matriz de células n-dimensional, em que cada elemento é uma matriz dos valores de coordenadas. Funciona para qualquer um que
n
não tenha ambiguidade por causa da saída da matriz numérica, desde que uman^(n+1)
matriz de elemento possa ser armazenada na RAM!fonte
Carvão , 26 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Entrada
n
.Gere todos os
nⁿ
n
números de dígitos na basen
.Divida-os
n
em uman
matriz dimensional onde cada dimensão é do tamanhon
.Imprima a matriz. O formato de saída padrão é cada elemento em sua própria linha; depois, cada bloco de
n
linhas é finalizado por uma linha em branco; em seguida, cada bloco den
blocos den
linhas é finalizado por uma segunda linha em branco, e assim por diante, atén-1
as linhas em branco no nível superior. .fonte
Geléia , 7 bytes
Experimente online!
fonte