Esse desafio é inspirado nessa pergunta agora excluída.
Pegue um número inteiro positivo N como entrada e produza uma matriz com os números 1 .. N 2 que segue o padrão abaixo:
Preencha a primeira linha com 1 .. N, em seguida, preencha a última linha (número da linha N ) com (N + 1) .. 2N , preencha a segunda linha com (2N + 1) .. 3N e continue até preencher todas as linhas.
O formato de saída é flexível, portanto a lista de listas etc. é aceita.
N = 1
1
N = 2
1 2
3 4
N = 3
1 2 3
7 8 9
4 5 6
N = 4
1 2 3 4
9 10 11 12
13 14 15 16
5 6 7 8
N = 5
1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
6 7 8 9 10
Aplicam-se regras padrão. A resposta mais curta em bytes em cada idioma vence. As explicações são incentivadas como sempre.
code-golf
number
array-manipulation
matrix
Stewie Griffin
fonte
fonte
1 2 3 7 8 9 4 5 6
:) O formato de saída é flexível?Respostas:
05AB1E ,
138 bytesEconomizou 5 bytes graças a Rod
Experimente online!
Explicação
fonte
Ruby , 53 bytes
Explicação:
Coloque todos os números em uma única matriz primeiro e, em seguida, corte a matriz pulando uma linha para cada iteração. Após as primeiras iterações (n / 2 + n% 2), não há mais nada a ser ignorado e, em seguida, volte todas as linhas restantes.
Experimente online!
fonte
Python 2 , 75 bytes
Experimente online!
fonte
JavaScript, 68 bytes
Edite 3 bytes salvos, ativado por @ user71546
Primeira tentativa,seguindo a rota óbvia: conte de 1 e preencha o array de ambos os lados, do externo para o internoTeste
fonte
Haskell , 62 bytes
Experimente online! Saída é uma lista de listas, por exemplo,
(0#) 3
rendimentos[[1,2,3],[7,8,9],[4,5,6]]
.fonte
> <> ,
51 + 3 = 5447 bytesExperimente online!
A entrada é esperada no topo da pilha no início do programa usando o
-v
sinalizador. A saída consiste em números não alinhados, separados por espaços únicos, e cada linha é separada por uma única nova linha. Exemplo de saída paraN=5
:... seguido por uma única nova linha. O programa termina com um erro (
something smells fishy...
), mas está no STDERR e não no STDOUT.Explicação:
A primeira linha simplesmente armazena uma cópia do
N
no registro.A segunda linha constrói o deslocamento para cada linha de saída subtraindo 1 de
N
, multiplicando issoN
, girando-o para o fundo da pilha e depois revertendo a pilha inteira. Quando o número no topo da pilha chegar a 0, a pilha deverá ficar assim (o exemplo usaN=5
):A terceira linha descarta a duplicata
0
da parte superior da pilha.A quarta linha incrementa a parte superior da pilha e gera uma cópia dela. Isso é modificado
N
e usado para decidir se um espaço ou nova linha deve ser impressa e se a parte superior da pilha deve ser descartada - se o último número impresso forx
,x mod N == 0
indica que o fim dessa linha de saída foi atingido . A execução termina quando1+
é executada em uma pilha vazia, gerando o erro de finalização.Versão anterior
Isso checou explicitamente a existência de uma pilha vazia para finalizar a execução, e eu também estava incluindo 3 bytes para o
-v
uso do sinalizador.Experimente online!
fonte
Perl 5 ,
-p
5251 bytesExperimente online!
fonte
Java (OpenJDK 9) , 101 bytes
Experimente online!
Créditos
fonte
j++
: 102 bytesn-i/2-1
paran+~i/2
101 bytesn->{int i=n*n,x[]=new int[i],r;for(;i-->0;x[(r%2<1?r/2:n+~r/2)*n+i%n]=i+1)r=i/n;return x;}
JavaScript (ES6),
6968 bytesBem, foi derrotado antes que eu pudesse publicá-lo, mas aqui está mesmo assim.Edit: Salvo 1 byte graças a @KevinCruijssen.fonte
n+n-i-1
pode sern+n+~i
de -1 byte, então você está de igual para igual com a outra resposta JavaScript novamente. :)Gelatina , 10 bytes
Experimente online!
Como funciona
fonte
Stax , 10 bytes
Execute e depure on-line
A representação ascii correspondente do mesmo programa é de 12 caracteres.
Aqui está como isso funciona.
fonte
Gelatina ,
13...6 bytesObrigado JonathanAllan por -1 byte!
Experimente online!
Use um algoritmo idêntico à resposta 05AB1E.
fonte
R
uma vez ques
possui um intervalo implícito à esquerda.R ,
705947 bytesExperimente online!
Graças a Robin Ryder por um golfe de 4 bytes, que depois eu joguei mais.
Retorna uma matriz; constrói a
matrix
sequência, por exemplo[[1 2 3] [4 5 6] [7 8 9]]
, e reorganiza as linhas.fonte
rbind
.Python 2 ,
726863 bytes-4 bytes graças a Neil
Experimente online!
fonte
x
variável intermediária ?Oitava , 102 bytes
Experimente online!
fonte
until
comando. E eu não sabia sobrevec2mat
:( Infelizmente, o mesmo comprimento:A=B=vec2mat(1:(n=input(''))*n,n)
:(while j++<n
também tem exatamente o mesmo comprimento ... Você já tentou as várias opções ou são apenas coincidências?while
loop tem o mesmo comprimento, tentei nos dois sentidos. Muitas vezes,do ... until
é um byte menor quewhile ... end
, no entanto.C (gcc) , 110 bytes
Experimente online!
Preenche uma matriz alternando entre 2 índices para linhas: um índice começando na parte superior e outro começando na parte inferior. O índice da linha superior começa em 0 e é incrementado a cada 2 linhas; o índice da linha inferior começa em n-1 e é decrementado a cada 2 linhas.
Ungolfed:
fonte
Intervalo C ++ + V3 , 159 bytes
Ao vivo no Wandbox
Sem contar as duas novas linhas depois
using namespace range::view
; eles estão lá apenas para separar as importações do lambda.Fato extremamente interessante: esta solução não faz alocações de heap. Resolve o problema no
O(1)
espaço.Explicação:
iota(1, n*n+1)
->[1 ... n*n]
chunk(n)
: todos osn
elementos juntos, então[1 ... n] [n+1 ... 2*n] ...
r
r | stride(2)
: pegue todos os outros elementos:[1 ... n] [2*n+1...] ...
r | reverse | drop(n % 2)
: reverse, depois solte o[1 ... n]
termo sen
for ímpar (haverá um número ímpar de linhas e queremos imprimir o primeiro termo apenas uma vez). Parece que eu deveria ser capaz de fazerr | reverse | take
, mas isso não funciona por algum motivo.stride(2)
novamente, pegue todos os outros elementos. Desta vez, é o contrário.Mais legível e testável:
fonte
int n
, eu preciso delog(n)
bits para armazenar a entrada? Mas essa é a entrada de qualquer maneira, e estamos lidando com umint
wheresizeof(int) == 4
(na maioria dos sistemas), por isso é um número constante de bytes usados independentemente da entrada.Gelatina , 11 bytes
Experimente online!
fonte
CJam , 22 bytes
Experimente online!
fonte
C (gcc)
8078Vejo agora que esta solução está errada
Experimente online!
fonte
C (gcc) , 36 + 8 + 61 = 105 bytes
ajuntar com
-Dp=printf("%d ",i),i++%n;);puts("")
-Dq=i,n)
Experimente online!
fonte