Dados dois números positivos N >= 2
e N <= 100
crie uma matriz que siga as seguintes regras:
- O primeiro número começa na posição
[0,0]
- O segundo número começa na posição
[0,1]
- O terceiro número fica abaixo do Primeiro Número (posição
[1,0]
) - Os números a seguir seguem na direção "barra"
- O intervalo de números usado é
[1, N1 * N2]
. Portanto, os números vão do início 1 ao resultado da multiplicação de ambas as entradas.
Entrada
- Dois números
N >= 2
eN <= 100
. Primeiro número é a quantidade de linhas, Segundo número, a quantidade de colunas.
Saída
- Matriz. (Pode ser gerado como um array multidimensional ou uma string com quebras de linha)
Exemplo:
Dados 3 and 5
fornecidos:
1 2 4 7 10
3 5 8 11 13
6 9 12 14 15
Números dados 2 and 2
1 2
3 4
Números dados 5 and 5
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
O código mais curto em bytes vence.
Respostas:
Gelatina ,
65 bytesExperimente online!
Como funciona
fonte
<atom><atom>¥þ
mas não consigo encontrar a combinação certa.oþ++þ
está perto, mas não chega lá[1, 2, 3, 4, 5, 6]
.Ụ
ordena essa matriz, utilizando a chave que mapas1
a[1, 1]
,2
a[1, 2]
,3
a[2, 1]
, etc. Essencialmente, isto encontra o índice de cada par a partir da matriz classificada-por-somas na classificados-lexicograficamente matrizPython 3 , 91 bytes
Experimente online!
fonte
R ,
1016054 bytesExperimente online!
Obrigado a @nwellnhof pela sugestão de
rank
Portos Dennis 'Jelly resposta .
Resposta antiga, 101 bytes:
Experimente online!
split
está fazendo a maior parte do trabalho aqui; possivelmente existe um algoritmo de golfe, mas isso definitivamente funciona.Explicação:
Experimente online! - você pode usar um
print
dos lados direito das atribuições<-
para ver os resultados intermediários sem alterar o resultado final, poisprint
retorna sua entrada.fonte
rank(x,1,"f")
é 2 bytes menor queorder(order(x))
.rank(x,,"l")
vai se livrar dot
bem.Java 10,
121120109105 bytes-11 bytes graças a @ OlivierGrégoire .
-4 bytes graças a @ceilingcat .
Experimente online.
Explicação:
fonte
x,y
/width,height
J , 15 bytes
-4 bytes a mais para esta solução por milhas. Obrigado!
Experimente online!
J ,
2219 bytes-3 bytes graças ao FrownyFrog!
Experimente online!
Uma implementação da fantástica solução Jelly de Dennis em J.
Explicação:
Verbo diádico, leva o argumento esquerdo e direito (mfn)
+/&i.
cria listas 0..m-1 e 0..n-1 e cria uma tabela de adição para elas:[:>:@/:@/:@,
nivela a tabela e classifica a lista duas vezes e adiciona 1 a ela:,$
remodela a lista novamente na tabela mxn:fonte
-@],\
→,$
para -3 bytes.$1(+/:@;)</.@i.
com entrada como uma matriz[r, c]
/.
, mas could't alcançar o resultado :)APL + WIN, 38 ou 22 bytes
Solicita a coluna de entrada inteira e a linha:
ou:
com base na dupla aplicação de Dennis de classificação. Perdeu que :(
fonte
Wolfram Language (Mathematica) ,
7367 bytesContar elementos nas linhas acima:
Min[j+k,#2]~Sum~{k,i-1}
Contar elementos na linha atual e abaixo:
Max[j-k+i-1,0]~Sum~{k,i,#}
Coloque em uma mesa e adicione 1. Voila:
Atualização: percebi que há uma maneira mais curta de contar todas as posições à frente de uma posição normalmente especificada na matriz com apenas uma soma em duas dimensões:
Experimente online!
Experimente online!
fonte
APL (Dyalog Unicode) ,
1412 bytesExperimente online!
-2 graças a ngn , devido ao seu uso inteligente de
↑⍳
.Baseado na solução de geléia de 5 bytes de Dennis.
fonte
∘.+⌿⍳¨⍵
->+/↑⍳⍵
⍳
combinado com↑
.05AB1E , 23 bytes
Experimente online!
fonte
Python 3 , 164 bytes
Experimente online!
Definitivamente, essa não é a solução mais curta, mas achei divertido.
fonte
from numpy import*
e largar os doisn.
é um pouco mais curto. Além disso, você pode deixar o espaço em) for
. E mudar para Python 2 permite que você mudereturn a
paraprint a
(no Python 3 seria a mesma contagem de bytesprint(a)
).import*
. Eu nunca vou bater resposta Dennis', então eu vou ficar com Python 3.Python 2 , 93 bytes
Experimente online!
Versão Semi-Ungolfed:
fonte
Japonês ,
2524 bytesDificilmente elegante, mas faz o trabalho. Trabalhar com dados 2D no Japt é complicado.
Eu adicionei a
-Q
flag no TIO para facilitar a visualização dos resultados, não afeta a solução.Mordeu um byte graças a Oliver .
Experimente online!
fonte
×
, você pode substituir*V
porN×
.JavaScript (Node.js) , 103 bytes
Experimente online!
fonte
TI-Basic, 76 bytes
Solicita a entrada do usuário e retorna a matriz
Ans
e a imprime.TI-Basic é uma linguagem tokenizada ; todos os tokens usados aqui são de um byte, exceto
[A]
2 bytes.Nota: O TI-Basic (pelo menos na TI-84 Plus CE) suporta apenas matrizes de até 99x99, assim como este programa.
Explicação:
fonte
Perl 6 ,
6159 bytesExperimente online!
Outro porto da solução de Dennis 'Jelly.
fonte
Java (JDK 10) ,
142131 bytesExperimente online!
Explicação:
Muito obrigado a Kevin Cruijssen porque não sabia como executar meu código no tio .
Alguns códigos como o cabeçalho e rodapé são roubados dele. -> Sua resposta
fonte
PHP, 115 bytes
uma abordagem bastante preguiçosa; provavelmente não é o mais curto possível.
função anônima, assume largura e altura como parâmetros, retorna matriz 2D
experimente online
fonte
JavaScript (Node.js) ,
108105101100 bytesExperimente online!
fonte
Anexo , 45 bytes
Experimente online!
Lambda anônimo, onde os parâmetros são alternados. Isso pode ser corrigido para +1 byte, acrescentando
~
ao programa. A suíte de testes já faz isso.Explicação
Essa abordagem é semelhante à resposta J e à resposta Jelly .
A primeira ideia é gerar uma tabela de valores:
Isso gera uma tabela de adição usando intervalos de ambos os parâmetros de entrada. Para entrada
[5, 3]
, isso fornece:Em seguida, aplainamos isso com
Flat!
:Usando a abordagem na resposta J, podemos classificar a matriz (ou seja, retornar índices de valores classificados) duas vezes, com
Grade//2
:Então, precisamos cortar os valores corretamente, como na resposta da geléia. Podemos cortar todos os
_
elementos para fazer isso:Então, basta compensar a indexação 0 do Attache com
+1
:E assim temos o resultado.
fonte
Python 3 , 259 bytes
Então eu fiz isso de uma maneira estranha. Percebi que havia dois padrões na forma como a matriz se forma.
O primeiro é como o padrão das linhas superiores tem a diferença entre cada termo, aumentando de 1 -> h, onde h é a altura e l é o comprimento. Então eu construo a linha superior com base nesse padrão
Para uma matriz de dim (3,4) dando a,
max RoC = 3
vamos ver a linha superior do formulárioSuponha, em vez disso, que o dim (3,9), dando um
max RoC = 3
, verá uma linha superior deO segundo padrão é como as linhas mudam uma da outra. Se considerarmos a matriz:
e subtrair cada linha da linha abaixo (ignorando a linha extra), obtemos
Ao ver essa matriz, podemos notar que essa matriz é a sequência em
2 3 4 5 5 4 3 2
que, para cada linha, 5 termos desse padrão são deslocados por 1 para cada linha. Veja abaixo o visual.Portanto, para obter a matriz final, pegamos nossa primeira linha que criamos e produzimos essa linha adicionada com os 5 termos necessários desse padrão.
Esse padrão sempre terá as características do início
2-> max value
e do fim,max value -> 2
ondemax value = min(h+1, l)
o número de vezes que o valor máximo aparecerá é oappearances of max = h + l -2*c -2
localc = min(h+1, l) - 2
Então, em todo o meu método de criação de novas linhas parece
Código relevante abaixo. Não acabou sendo curto, mas ainda gosto do método.
Experimente online!
fonte
Japonês, 20 bytes
Tente
fonte