Vamos definir f n (k) como a soma dos primeiros k termos dos números naturais [1, ∞) onde cada número é repetido n vezes.
k | 0 1 2 3 4 5 6 7 8 9
--------+-------------------------------------------------
f_1(k) | 0 1 3 6 10 15 21 28 36 45
deltas | +1 +2 +3 +4 +5 +6 +7 +8 +9
--------+-------------------------------------------------
f_2(k) | 0 1 2 4 6 9 12 16 20 25
deltas | +1 +1 +2 +2 +3 +3 +4 +4 +5
--------+-------------------------------------------------
f_3(k) | 0 1 2 3 5 7 9 12 15 18
deltas | +1 +1 +1 +2 +2 +2 +3 +3 +3
As anti-diagonais disso, como uma matriz quadrada, são semelhantes à sequência A134546 da OEIS .
Desafio
Escreva um programa / função que utilize dois números inteiros não negativos nek e produza f n (k) .
Especificações
- Aplicam- se as regras de E / S padrão .
- As brechas padrão são proibidas .
- Sua solução pode ser indexada em 0 ou 1 em n e / ou k, mas especifique qual.
- Esse desafio não é encontrar a abordagem mais curta em todos os idiomas, mas sim encontrar a abordagem mais curta em cada idioma .
- Seu código será pontuado em bytes , geralmente na codificação UTF-8, a menos que especificado de outra forma.
- Funções internas que computam essa sequência são permitidas, mas é recomendável incluir uma solução que não dependa de uma interna.
- Explicações, mesmo para idiomas "práticos", são incentivadas .
Casos de teste
Nesses casos de teste, n é indexado em 1 e k é indexado em 0.
n k fn(k)
1 2 3
2 11 36
11 14 17
14 21 28
21 24 27
24 31 38
31 0 0
Em alguns formatos melhores:
1 2
2 11
11 14
14 21
21 24
24 31
31 0
1, 2
2, 11
11, 14
14, 21
21, 24
24, 31
31, 0
Implementação de referência
Isso está escrito em Haskell .
f n k = sum $ take k $ replicate n =<< [1..]
f_n(0) = 0
parak
0-indexados?k
termos da lista de números naturais repetidos, não os primeirosn*k
.Respostas:
Ruby ,
32 2823 bytesExperimente online!
Explicação
Vamos visualizar a soma como a área de um triângulo, por exemplo, com n = 3 e k = 10:
Em seguida, somamos por coluna em vez de linha: a primeira coluna é
k
, entãok-n
,k-2n
e assim por diante.fonte
Python 2 ,
3428 bytesExperimente online!
Obrigado Martin Ender, Neil e Sr. Xcoder por ajudar.
fonte
k/n
qualquer maneira -k-(k/n)*n
é justok%n
. Veja minha resposta em lote.Casca , 4 bytes
Experimente online!
Explicação
Isso acaba sendo uma tradução direta da implementação de referência no desafio:
fonte
APL (Dyalog) ,
12108 bytesExperimente online!
n
à esquerda,k
(0 indexado) à direita.fonte
Mathematica, 40 bytes
Experimente online!
Experimente online!
Mathematica, 18 bytes
por Martin Ender
Experimente online!
Experimente online!
fonte
Tr@Range[#2,0,-#]&
oun~Sum~{n,#2,0,-#}&
usando o truque da resposta Ruby da GB.MATL ,
1211 bytesExperimente online!
k
é 0 indexado. Recebe a entrada na ordem inversa.Guardado 1 byte graças a @Giuseppe
fonte
Gelatina , 5 bytes
Mais um byte do que a solução Jelly do @ Mr.Xcoder, mas esta é a minha primeira submissão em Jelly e ainda estou confuso sobre como a testemunha de Jelly escolhe operandos, por isso ainda estou satisfeito. Observe que a ordem das entradas é
k
entãon
.Explicação
Experimente online!
fonte
Gelatina , 4 bytes
Indexado 1
Experimente online! ou veja uma suíte de testes .
fonte
Ḷ:S
também funcionaJavaScript (ES6),
2421 bytesRecebe entrada na sintaxe de currying
(n)(k)
. Retorna emfalse
vez de0
.Casos de teste
Mostrar snippet de código
Quão?
Isso é semelhante a resposta Ruby do @ GB .
O desafio descreve como construir a 'escada' da esquerda para a direita, enquanto essa função recursiva a constrói de baixo para cima. Com n = 2 e k = 11 :
fonte
Lote, 34 bytes
Uma fórmula de formulário fechado que eu encontrei. O primeiro argumento
n
é indexado em 1, o segundo argumentok
é indexado em 0.fonte
Python 2 , 29 bytes
Experimente online!
Graças a totallyhuman por -3 bytes!
Python 2 , 30 bytes
Experimente online!
fonte
Haskell , 28 bytes
Experimente online!
Uma abordagem que encontrei apenas mexendo com alguns parâmetros de faixa. Definitivamente, não é o mais curto, mas é muito legal como existem tantas abordagens diferentes.
fonte
C,
3834 bytesDefinição recursiva.
-4 bytes graças ao Steadybox .
Experimente online!
32 bytes por Mr. Xcoder , GB
Experimente online!
fonte
f(n,k){return k--?1+f(n,k)+k/n:0;}
Experimente online!R ,
373331 bytes-6 bytes graças a Giuseppe
Experimente online!
Nada chique.
Ele[0:k]
lida com o caso quando k = 0.fonte
rep.default
, poderá se livrar[0:k]
usando,rep(1:k,,k,n)
mas sua resposta será basicamente do rturnbull, mas com base R, e nãoR + pryr
{}
C ++, 53 bytes
Basta usar a fórmula.
n
é indexado em 1 ek
é indexado em 0.Experimente online!
fonte
~
operador.[](int n,int k){return-k/n*~(k/n)/2*n-k%n*~(k/n);};
J , 13 bytes
Como funciona:
O argumento da esquerda é n, o da direita é k.
i.
gera uma lista 0..k-11+
adiciona um a cada número da lista, resultando em 1,2, ..., k#
forma um gancho com o acima, portanto, n cópias de cada elemento da lista são copiadas.]{.
pegue o primeiro n deles1#.
encontre a soma por conversão base.Experimente online!
fonte
Retina ,
2926 bytesExperimente online! O link inclui casos de teste e cabeçalho para reformatá-los para sua entrada preferida (
k
primeiro indexado 0 ,n
segundo indexado 1 ). Fui inspirado pela resposta Ruby do @ GB. Explicação:Converta para unário.
Combine cada sequência de
n
dentrok
e substitua a partida por tudo após a partida. Isto ék-n
,k-2n
,k-3n
, masn
é também após o jogo, de modo a obterk
,k-n
,k-2n
etc. Isso também corresponden
, que é simplesmente eliminado (ele não é mais necessário).Soma os resultados e converta novamente em decimal.
fonte
Pitão , 5 bytes
Experimente aqui!
Resposta do porto de Ruby da GB. Uma porta do meu Jelly seria de 6 bytes:
+s/Rvz
fonte
Perl 6 , 39 bytes
Teste-o
n e k são ambos um baseado
Expandido:
fonte
Kotlin , 40 bytes
Experimente online!
fonte
Java (OpenJDK 8) , 23 bytes
Experimente online!
Porta do Python 2 da GB resposta .
fonte
05AB1E , 9 bytes
Experimente online!
Explicação
fonte
Python 2 , 44 bytes
Experimente online!
fonte
Python 2 , 38 bytes
Experimente online!
fonte
Clojure, 54 bytes
O segundo argumento
k
é indexado em 0, assim(f 14 20)
como 28.fonte
APL + WIN, 13 bytes
Solicita a entrada na tela para ne depois para k. Origem do índice = 1.
fonte
Brain-Flak , 78 bytes
Experimente online!
Estou certo de que isso pode ser feito melhor, mas é um começo.
fonte
Japonês ,
76 bytesOriginalmente inspirado na solução da GB e evoluído para uma porta!
Toma
k
como a primeira entrada en
como a segunda.Tente
Explicação
Entrada implícita de números inteiros
U=k
&V=n
. Gere uma matriz de números inteiros (õ
) de1
paraU
com uma etapaV
negada (n
) e reduza-a por adição (x
).fonte
R , 27 bytes
Função anônima que leva
k
en
nessa ordem. Cria uma lista de comprimentok
(terceiro argumento pararep
) que é composto1
pork
(primeiro argumento pararep
), repetindo cada elementon
vezes (quarto argumento pararep
). Depois pega a soma dessa lista.n
é indexado em 1 ek
é indexado em 0. Retorna um erro paran<1
.Experimente online!
fonte
Befunge, 27 bytes
Experimente Online
Leva k e n como entrada. Usa a resposta do GB como base matemática.
fonte