Eu tenho um desafio simples para você neste momento. Dada uma matriz de números inteiros positivos A (ou o equivalente no seu idioma), substitua cada entrada A i pela soma dos próximos elementos A i de A , voltando desde o início, se não houver itens suficientes.
Como de costume, você pode competir em qualquer linguagem de programação e receber entradas e fornecer saídas por qualquer método padrão e em qualquer formato razoável, observando que essas brechas são proibidas por padrão. Opcionalmente, você também pode usar o tamanho de A como entrada. Isso é código-golfe , então a submissão mais curta (em bytes) para todos os idiomas vence.
Exemplos / Casos de Teste
Dado [1,3,4,5]
, seu código deve gerar [3,10,13,14]
, porque 1
é substituído por 3
, 3
é substituído por 4+5+1=10
(observe como ele foi recuperado desde o início), 4
por 5+1+3+4=13
e 5
por 1+3+4+5+1=14
.
Dado [3,2,1,9]
, seu programa deve produzir [12,10,9,33]
, porque substituímos 3
por 2+1+9=12
, 2
com 1+9=10
, 1
com 9
e 9
com 3+2+1+9+3+2+1+9+3=33
(observe como nos recuperamos desde o início mais de uma vez).
Mais alguns casos de teste para você escolher:
[4,3,2,1] -> [10,7,5,4]
[3,2,1,9] -> [12,10,9,33]
[1,3,4,5] -> [3,10,13,14]
[4,4,3,2,2] -> [11,11,8,6,8]
[3,5,3,2,1] -> [10,14,6,4,3]
[3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3]
[7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30]
[28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34]
[1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] -> [2,7,13,14,12,8,5,3,2,7,9,7,4,2,1]
fonte
+
no final). Além disso, talvez você me ninja da próxima vez. :)Python , 55 bytes
Experimente online!
fonte
~
operador não é um pouco bit a bit, é efetivamente uma abreviação para-1-v
, assim-~v
como uma abreviação para a-(-1-v)
qual é justa1+v
(mas evita parênteses como(1+v)*a
). Em segundo lugar, no Python, pode-se multiplicar uma lista por um número inteiro para repeti-la (por exemplo,['a','b']*3
é['a','b','a','b','a','b']
). A-~v*a
poderia ser substituído pora+v*a
para o mesmo número de bytes. Por fim, o[i:i+v]
é uma indexação fatia, mantendo elementosi
parai+v-1
(0 indexada) somente.J, 33 bytes
destroçado
explicação
Experimente online!
fonte
C (gcc) ,
8685 bytesExperimente online!
fonte
for(k=i=0;i++<y[l];)k+=y[(l+i)%c];
C(y,c,l,i,k)
.Haskell,
504744 bytesExperimente online!
fonte
05AB1E ,
87 bytesExperimente online!
Explicação
fonte
K4 / K (oK) ,
2019 bytesSolução:
Experimente online!
Exemplos:
Explicação:
Remodelar a entrada, soltar primeiro, pegar x comprimento de cada um, resumir.
fonte
Geléia , 7 bytes
Experimente online!
fonte
Anexo , 26 bytes
Experimente online!
Explicação
Este é um fork de duas funções:
{Sum=>_[(_2+1:_)%#_]}
Iota
O que isso significa é que o dente direito
Iota
é aplicado ao argumentox
e passado como o segundo argumento ao dente central (a primeira função). Então isso se torna, para entradax
:Substituindo aqueles em para
_
e_2
:Iota[x]
retorna uma matriz dos índices dex
. É equivalente a0...#x
.#x
é uma maneira curta de dizer o tamanho dex
, ouSize[x]
. Essencialmente, esta função está mapeando aSum
função sobre a segunda expressão:O
x[...]
bit externo significa que...
irá gerar uma série de índices para serem selecionadosx
. A parte mais importante da geração dos índices é esta:Essa expressão usa um pouco de vetorização. Para visualizar isso, vamos supor que a entrada seja
x := [1, 3, 4, 5]
. Então, essa expressão é equivalente a:Esta é uma lista de índices que representam os próximos
N
elementos dos índices nox
mod#x
. Para torná-los seguros para recuperação, usamos este mod de matriz#x
:Isso nos fornece os índices adequados, que são obtidos a partir de
x
e cada matriz é somada, fornecendo os resultados adequados.Outras tentativas
36 bytes:
{Sum@_&Get=>((_2+1.._2+_)%#_)}#Iota
- Esquecix[...]
completamente a vetorização, de forma que:30 bytes:
{Sum=>_[(_2+1.._2+_)%#_]}#Iota
- mas então percebi que o_2+
intervalo interno poderia ser fatorado, o que significa que poderíamos salvar parênteses usando em:
vez de..
, fornecendo a versão atual.fonte
R ,
8964 bytesExperimente online!
Idéia principal para gerar um vetor de índice de ciclismo com tempo suficiente que você pode usar para obter os elementos necessários a partir do vetor de entrada.
Versão original:
Experimente online!
fonte
R ,
6258 bytesExperimente online!
Uma alternativa para a outra solução R . Nos comentários, JayCe fez uma menção sobre o
cumsum
que provocou algo em meu cérebro a usardiffinv
e reciclar matrizes em vez derep
.Explicação:
Dada a matriz de entrada
a
, deixeM=max(a)
el=length(a)
.Observe que esse
M+l
é o índice máximo possível que precisamos acessar e queM+l<=M*l+1
, desde seM,l>1
,M+l<=M*l
(com igualdade somente quandoM=l=2
) e sel==1
ouM==1
, entãoM+l==M*l+1
.A título de exemplo, vamos
a=c(4,3,2,1)
. EntãoM=l=4
.Construímos a
M*l+1 x l
matriz em R pormatrix(a,max(a)*l+1,l)
. Como R reciclaa
na ordem principal da coluna, terminamos com uma matriz repetindo os elementos da seguintea
forma:Cada coluna é os sucessores cíclicos de cada elemento de
a
, coma
na primeira linha; isso se deve à maneira como R recicla seus argumentos em uma matriz.A seguir, pegamos a "derivada" inversa com
diffinv
, essencialmente, a soma cumulativa de cada coluna com uma adicional0
como primeira linha, gerando a matrizNa primeira coluna, a entrada
6=4+2
é igual a14=4 + (3+2+1+4)
, que é a soma cíclica do sucessor (CSS) mais uma inicial4
. Da mesma forma, na segunda coluna, a entrada5=3+2
é igual a10=3 + (4+1+2)
e assim por diante.Portanto, na coluna
i
, aa[i]+2
entrada nd é igual aCSS(i)+a[i]
. Portanto, pegamos linhas indexadas pora+2
, produzindo uma matriz quadrada:As entradas ao longo da diagonal são iguais às somas cíclicas do sucessor mais
a
, portanto extraímos a diagonal e subtraímosa
, retornando o resultado como as somas cíclicas do sucessor.fonte
Map
, e originalmente isso era como 68 bytes antes de eu descobrir que eu poderia usarl
como entrada!Pitão,
1311 bytesEconomizou 2 bytes graças ao Sr. Xcoder.
Experimente aqui
Explicação
fonte
Carvão , 12 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
JavaScript ES6, 65 bytes
Solução simples. Ungolfed:
A
map()
função do JavaScript é perfeita para o trabalho, executa o retorno de chamada fornecido em cada elemento e o substitui pelo resultado do retorno de chamada. O retorno de chamada recebe dois parâmetros, o primeirox
é o valor e o segundoy
é o índice. Ao usar o móduloi % a.length
, podemos facilmente fazer um loop sobre o array, várias vezes, se necessário.Snippet de teste
(Coloque a entrada como notação JSON)
Mostrar snippet de código
fonte
Java 8, 87 bytes
Um lambda vazio ao curry tomando uma
int[]
lista eint
comprimento.Experimente Online . Observe que eu fiz sombra
System.out
neste programa para obter resultados para uma impressão mais bonita.fonte
Julia 0.6 ,
635553 bytesExperimente online!
Solução mais antiga:
Julia 0.6 , 65 bytes
Experimente online!
Outra solução. Não é ótimo por bytecount, mas eu gosto e provavelmente é mais eficiente que os outros dois, especialmente se a entrada tiver grandes números.
Julia 0.6 , 69 bytes
Experimente online!
fonte
Tela , 10 bytes
Experimente aqui!
Explicação:
fonte
QBasic 1.1 , 115 bytes
A primeira entrada é o comprimento L , e as entradas subsequentes L são os elementos em ordem. As saídas L representam a matriz resultante, com os elementos na ordem em que são apresentados.
fonte
Japonês, 7 bytes
Experimente aqui
fonte
APL + WIN, 37 bytes
Solicita entrada:
Experimente online! Cortesia de Dyalog Classic
Explicação:
fonte
Ruby , 38 bytes
Experimente online!
fonte
JavaScript, 65 bytes 3̶0̶0̶ ̶b̶y̶t̶e̶s̶
golfed
destroçado
Experimente online!
(versão ungolfed acima) Eu sou novo nessa coisa de codegolf!
*Atualizada! graças aos links úteis fornecidos nos comentários, consegui reduzir o tamanho para 65 bytes!
fonte
n
), que não permitimos. Bem-vindo ao PPCG, embora :)Perl 5 com
-M5.010
, 42 bytesExperimente online!
fonte
JavaScript, 46 bytes
Experimente online
fonte
Cjam, 23 bytes
Experimente online!
fonte
Pip
-rn
, 14 bytesToma números de entrada em linhas sucessivas de stdin; fornece números de saída em linhas sucessivas de stdout. Experimente online!
Explicação
Ou, usando um exemplo trabalhado:
fonte
APL (Dyalog Classic) , 12 bytes
Experimente online!
usa
⎕io←1
fonte
Perl 6 ,
5032 bytesExperimente online!
Eu sou novo no golfe em Perl 6, então tenho certeza que isso pode ser mais curto.Não é mais novo, e de volta ao golfe isso!fonte