Tarefa
Dada uma lista de números inteiros L e outro número inteiro s , o objetivo é calcular as somas em colunas de todas as fatias de comprimento s (potencialmente sobrepostas) de L , enquanto pertencem a suas posições em relação a L (veja abaixo).
Definições
As fatias de comprimento s (sobrepostas) da lista L são todas as subsequências contíguas (sem quebra) de L que são de comprimento s .
A fim de se referem as posições das fatias s em relação ao L , você pode imaginar a construção de uma "escada", onde cada fatia é i tem um deslocamento de i posiciona desde o início.
Especificações
- s é um número inteiro maior do que 1 e estritamente menor que o comprimento de L .
- L sempre conterá pelo menos três elementos.
- Você pode competir em qualquer linguagem de programação e pode receber e fornecer saída por qualquer método padrão , observando que essas brechas são proibidas por padrão. Isso é código-golfe , então a submissão mais curta (em bytes) para todos os idiomas vence.
Exemplos e casos de teste
Aqui está um exemplo trabalhado:
[1, 2, 3, 4, 5, 6, 7, 8, 9], 3
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
-------------------------------- (+) | column-wise summation
[1, 4, 9, 12, 15, 18, 21, 16, 9]
E mais alguns casos de teste:
[1, 3, 12, 100, 23], 4 -> [1, 6, 24, 200, 23]
[3, -6, -9, 19, 2, 0], 2 -> [3, -12, -18, 38, 4, 0]
[5, 6, 7, 8, 2, -4, 7], 3 -> [5, 12, 21, 24, 6, -8, 7]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 3 -> [1, 4, 9, 12, 15, 18, 21, 16, 9]
[1, 1, 1, 1, 1, 1, 1], 6 -> [1, 2, 2, 2, 2, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
code-golf
array-manipulation
subsequence
Mr. Xcoder
fonte
fonte
s
é maior queL/2
. Talvez adicione mais alguns casos de teste onde é esse o caso[1, 1, 1, 1, 1, 1, 1], 6 ->
[1, 2, 2, 2, 2, 2, 1] `ou[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
?Respostas:
J ,
11, 98 bytes-1 byte graças a milhas!
Como funciona?
O argumento da esquerda é s, o da direita - L
]\
- divide L em sublistas com comprimento s/.
- extrai as diagonais oblíquas (anti-diagonais)+/
- adiciona-os[:
- faz um garfo a partir dos verbos acimaAqui está um exemplo de sessão J para o primeiro caso de teste:
Experimente online!
fonte
/.
, em oposição à diagonal principal da esquerda para a direita.,/\
por]\
Haskell ,
5956 bytesExperimente online!
Define uma função
(#)
que recebe uma listas
ee um númeron
como argumentos.Isso se baseia na observação de que, por
s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
en = 3
é o mesmo que
Para gerar essa lista inicialmente crescente, depois constante e finalmente decrescente, podemos começar com
qual produz
[1, 2, 3, 4, 5, 4, 3, 2, 1]
. Adicionarn
como restrição adicional àminimum
expressão produz a[1, 2, 3, 3, 3, 3, 3, 2, 1]
resposta correta da lista paran = 3
, embora paran = 6
(ou em geral qualquern > lengths s/2
) a restrição adicionallength s + 1 - n
seja necessária:ou mais curto:
Para a multiplicação por pares,
[1..length s]
é compactado com zíper es
, comozip
trunca a lista mais longa para o comprimento da menor, a lista infinita[1..]
pode ser usada:fonte
JavaScript (ES6),
656258 bytesGuardado 4 bytes graças a @Shaggy
Recebe entrada na sintaxe de currying
(a)(n)
.Casos de teste
Mostrar snippet de código
fonte
a=>n=>a.map((v,i)=>v*Math.min(++i,n,a.length+1-(n>i?n:i)))
para 58 bytes?Java 8, 83 bytes
Esse primeiro caso de teste (e os dois últimos que adicionei) me ferrou várias vezes, mas finalmente funciona agora ..: D
Modifica a matriz de entrada em vez de retornar uma nova.
Explicação:
Experimente online.
fonte
05AB1E , 12 bytes
Experimente online!
fonte
MATL , 8 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
Considere entradas
[1, 3, 12, 100, 23]
e4
.fonte
APL (Dyalog Unicode) ,
1914 bytes SBCS-5 graças a ngn.
Função de infixo tácito anônimo, tomando s como argumento à esquerda e L como argumento à direita. Assume
⎕IO
( I ndex O rigin)0
como é o padrão em muitos sistemas.Experimente online!
Explicação com exemplo de caso
[1,3,12,100,23]
(
…)
Aplique a seguinte função tácita anônima:,/
janelas sobrepostas desse tamanho;[[1,3,12],[3,12,100],[12,100,23]]
(
…)\
Cumulativamente aplique este tácito a seguinte função tácita anônima:⊢
o argumento certo (mais)0,
com um zero à esquerdaA redução cumulativa significa que inserimos a função em todos os "espaços" entre termos sucessivos, trabalhando da direita para a esquerda. Para cada "espaço", a função descartará o argumento esquerdo, mas acrescentará um zero adicional. Efetivamente, isso anexa quantos zeros a cada termo houver "espaços" à esquerda; portanto, o primeiro termo obtém zero espaços, o segundo obtém um e o terceiro obtém dois:
[[1,3,12],[0,3,12,100],[0,0,12,100,23]]
↑
subir a classificação combinando as listas em uma única matriz, preenchendo com zeros; soma┌ ┐
│1 3 12 0 0│
│0 3 12 100 0│
│0 0 12 100 23│
└ ┘
∘
então+⌿
verticalmente;[1,6,36,200,23]
fonte
⊢,⍨¨0⍴⍨¨⍳∘≢
->{0,⍵}\
+⌿∘↑((0,⊢)\,/)
mais elegante.2{(⊃⌽⍺),⊃⍵}/⊢
->2{⊃¨(⌽⍺)⍵}/⊢
Gelatina , 6 bytes
Experimente online!
Como funciona
fonte
Japt , 13 bytes
Demorou muito tempo para que isso funcionasse quando
s
>L/2
!Tente
Explicação
fonte
s > L/2
! ” Eu tinha exatamente o mesmo. Os outros casos de teste são fáceis, mas o primeiro (e os dois que adicionei no final) foram irritantes! .. +1 de mim!Wolfram Language (Mathematica) , 42 bytes
Experimente online!
fonte
Julia , 41 bytes
Experimente online!
\
operador.a[L=end]
é uma alternativa mais curta paraL=length(a)
.fonte
Japonês ,
1312 bytes-1 byte graças a @ETHproductions
Experimente online!
fonte
R ,
5251 bytesExperimente online!
Isso é equivalente à resposta de Laikoni .
seq(l)
produz os índices1...length(l)
desdelength(l)>1
(caso contrário, produziria1...l[1]
). Salve-o comox
, salve seu reverso comoy
e pegue o primeiro elemento dey
(length(l)
Salvei ) para portar perfeitamente a resposta de Laikoni e salvar um byte!Resposta original, 52 bytes
Experimente online!
A saída está
l
elemento a elemento multiplicado pelo mínimo des
, o índice baseia-1 do elementox
,length(l)-x+1
elength(L)-s+1
.Isso também é equivalente à resposta de Laikoni, usando em
L-x
vez derev(x)
ser mais curto.fonte
APL + WIN, 25 bytes
Solicita a entrada da tela de L seguida por s
Explicação:
fonte
K (oK) , 30 bytes
Solução:
Experimente online!
Exemplo:
Explicação:
Não pense que posso competir com J neste caso. Gere uma lista de zeros a serem anexados e anexados à lista da janela deslizante e, em seguida, resuma:
A repartição é a seguinte ... embora isso ainda pareça desajeitado.
fonte
Casca , 4 bytes
Experimente online!
Usa a ideia de resposta J Galen Ivanov .
Explicação
fonte
C (gcc) , 100 bytes
Experimente online!
fonte
Python 2 ,
6866 bytes-2 bytes graças a Laikoni
Experimente online!
fonte
max(i,n-1)
em vez de[i,n-1][n>i]
.Perl 5 , 63 bytes
Experimente online!
fonte
C (gcc) ,
838179 bytesExistem basicamente três "fases" na manipulação da lista: aceleração, sustentação e esfriamento. À medida que avançamos na lista, aumentaremos nosso fator até atingirmos o máximo. Se uma lista completa de fatias puder caber na lista, esse máximo será o mesmo que o comprimento das fatias. Caso contrário, será o mesmo que o número de fatias que se encaixam. No outro extremo, diminuiremos o fator novamente, chegando a 1 no último elemento.
O comprimento das fases de aceleração e resfriamento que marcam esse platô é um a menos que o fator máximo.
Os loops não-golfados antes de combiná-los, esperamos que sejam mais claros (R = duração da fase de aceleração):
Três loops são demais, portanto, decidir o fator com base em r nos dá um loop (usando s para R para economizar alguns bytes):
Experimente online!
fonte
Perl,
4544 bytesInclui +4 para
-ai
Observe também que este código fornece 2 avisos de perl na inicialização. Você pode suprimi-las ao custo de um toque adicionando aX
opçãoForneça o comprimento da máscara após a
-i
opção e a matriz em uma linha em STDIN:Apenas o código:
fonte
Ruby , 62 bytes
Experimente online!
Essencialmente, uma porta da resposta javascript de Arnauld , exceto que a necessidade de
with_index
é muito mais dolorosa.No tempo que levou para eu decidir realmente enviar isso, eu joguei essa versão de 70 bytes, que é mais próxima do algoritmo de Dennis .
fonte
Clojure, 72 bytes
fonte
Pyt , 106 bytes
Pega L na primeira linha como uma matriz e leva s na segunda linha
Explicação:
Experimente online!
fonte
Python + numpy, 64 bytes
Chame isso com l como a lista e N como o comprimento.
fonte