Introdução
Vamos observar esta matriz: [3, 2, 4, 1, 1, 5, 1, 2]
.
Cada elemento exibe o comprimento da substring que deve ser resumida. Vamos dar uma olhada no primeiro elemento da matriz acima:
[3, 2, 4, 1, 1, 5, 1, 2]
^
O elemento no primeiro índice é 3 , portanto, agora usamos uma substring de comprimento três com o mesmo índice que a posição inicial:
[3, 2, 4]
Quando resumido, isso resulta em 9 ; portanto, o primeiro elemento do conjunto de somas de substring é 9
.
Fazemos isso para todos os elementos da matriz:
3 -> [3, 2, 4]
2 -> [2, 4]
4 -> [4, 1, 1, 5]
1 -> [1]
1 -> [1]
5 -> [5, 1, 2]
1 -> [1]
2 -> [2]
Você pode ver que o número 5 é um caso estranho. Esse número excede o comprimento da matriz:
[3, 2, 4, 1, 1, 5, 1, 2]
^ ^ ^ ^ ^
Ignoraremos tudo o que exceder a matriz, portanto, apenas usamos [5, 1, 2]
.
O último passo é resumir tudo:
[3, 2, 4] -> 9
[2, 4] -> 6
[4, 1, 1, 5] -> 11
[1] -> 1
[1] -> 1
[5, 1, 2] -> 8
[1] -> 1
[2] -> 2
E essa é a matriz que precisa ser gerada:
[9, 6, 11, 1, 1, 8, 1, 2]
A tarefa
Dada uma matriz não vazia com números inteiros positivos (diferentes de zero), produza o conjunto de soma de substring . Isso é código-golfe , então a submissão com o menor número de bytes vence!
Casos de teste
[1, 2, 3, 4, 5] -> [1, 5, 12, 9, 5]
[3, 3, 3, 3, 3, 3, 3, 3] -> [9, 9, 9, 9, 9, 9, 6, 3]
[5, 1, 2, 4, 1] -> [13, 1, 6, 5, 1]
[1] -> [1]
Respostas:
Gelatina , 6 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Python, 40 bytes
Teste em Ideone .
fonte
Excel, 21 bytes
=SUM(OFFSET(A1,,,A1))
Abra uma nova planilha, coloque os valores de teste na coluna A. Digite a fórmula em B1 e clique duas vezes no identificador da célula para percorrer o intervalo.
fonte
Python 3, 47 bytes
Implementação bastante direta. O comportamento padrão do Python para fatias que ultrapassam o final da lista foi muito conveniente aqui.
fonte
Haskell,
34, 33 bytesUm byte salvo por nimi.
fonte
JavaScript ES6, 50 bytes
Bastante auto-explicativo. Ele
map
está sobre cada elemento da matriz, obtendo o valorslice
dessei
ndex através do índice maise
o valor desse elemento ereduce
adicionando.fonte
J, 11 bytes
Uso
Explicação
fonte
JavaScript (ES6), 45
reduce
espancado novamente!fonte
f=
, assim como nesta resposta .f=
que já não é contado nos 45 bytesRetina , 38 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Entrada e saída são listas separadas por vírgula.
Experimente online! (A primeira linha ativa um conjunto de testes separado por avanço de linha.)
fonte
Mathematica
6055 bytespor exemplo
Obrigado @MartinEnder por cortar 5 bytes :)
fonte
#+Tr@Take[x=Rest@x,UpTo[#-1]]&/@(x=#)&
Ainda não tenho certeza de que é o ideal, mas economiza 17 bytes.05AB1E,
118 bytesExplicação
Experimente online
fonte
Pitão , 8 bytes
Suíte de teste.
Tradução da resposta de El em Python .
fonte
Erlang, 69 bytes
As funções de ordem superior de Erlang para listas não recebem o índice do elemento atual. Isso usa o dicionário do processo para definir o índice do elemento atual.
fonte
Pyke,
127 bytesExperimente aqui!
fonte
VBA, 160 bytes
fonte
Pitão, 6 bytes
Suíte de teste
Esta é uma solução diferente de qualquer outra até agora. Ele faz um loop na entrada, fatiando uma soma dos valores iniciais, removendo o primeiro elemento da entrada armazenada e repetindo.
Explicação:
fonte
Julia, 39 bytes
Experimente online!
fonte
F #,
8482 bytesfonte
JavaScript (ES6) - 79 bytes
Uma solução recursiva que não usa nenhum dos métodos Array:
Teste:
fonte
C #, 89 bytes
bem direto
idéias de melhoria apreciadas
fonte
Braquilog , 27 bytes
Experimente online! ou verifique todos os casos de teste .
Explicação
fonte
Dyalog APL, 15 bytes
ou
fonte
Programa PHP, 72 bytes
ligue com
php-cgi -f <filename> 'a[]=3&a[]=2&a[]=4...
+11 como uma função:
+9 sem builtins:
($ c mantém os valores originais, $ a conta para cada índice, $ r obtém as somas)
-3 como programa:
fonte
q (37 bytes)
Exemplo:
fonte
Matrizes , 25 bytes
Bem, finalmente, um desafio para o qual não preciso de novos recursos!
Correr com:
python matricks.py substring.txt [[<input>]] 0
Explicação:
fonte
Javascript (usando Biblioteca Externa) (66 bytes)
Link para lib: https://github.com/mvegh1/Enumerable
Explicação do código: _.From está carregando a matriz de entrada na biblioteca, que é basicamente o LINQ para js. Cada item da matriz é mapeado de acordo com o seguinte predicado: Pegue a entrada e corte-a no índice do item atual e pegue esse índice mais o valor do item atual. Em seguida, resuma essa subsequência. Converta o resultado em uma matriz JS nativa e retorne-o
fonte
var
das variáveis, você não precisa disso no golfe. Você também pode alterar.forEach
para.map
qual custa menos bytes.Clojure, 63 bytes
Usa a correspondência de padrões para decompor o argumento de entrada no primeiro e no restante dos argumentos.
fonte
MATL ,
171413 bytesExplicação
Experimente online! Ou verifique todos os casos de teste (código modificado para lidar com várias entradas).
fonte
C #, 94 bytes
Onde a é um int [] que representa a entrada a ser resolvida.
fonte