Introdução
Neste exemplo, vamos pegar a string Hello, World!
e a matriz [3, 2, 3]
. Para encontrar a cadeia de substring, seguimos o seguinte processo:
O primeiro número da matriz é 3
, então obtemos a substring [0 - 3]
, que é Hel
. Depois disso, removemos os primeiros 3
caracteres da string inicial, o que nos deixa com lo, World!
.
O segundo número da matriz é 2
, portanto, obtemos a substring [0 - 2]
de nossa nova string, que nos fornece lo
. A string restante se torna , World!
.
O último número é a 3
, o que nos dá , W
. A cadeia de substring é composta por todos os substrings, o que nos fornece:
['Hel', 'lo', ', W']
Para um exemplo mais visual:
[3, 2, 3], 'Hello, World!'
3 -> Hel
2 -> lo
3 -> , W
A tarefa
Dada uma sequência não vazia e uma matriz não vazia consistindo apenas de números inteiros positivos ( > 0
), produza a cadeia de substring . Você pode supor que a soma de todos os números inteiros na matriz não exceda o comprimento da string.
Você também pode assumir que as seqüências nunca conterão novas linhas.
Casos de teste
Input: abcdefghijk, [2, 1, 3]
Output: ['ab', 'c', 'def']
Input: Code Golf, [4, 1]
Output: ['Code', ' ']
Input: Ayyy, [3]
Output: ['Ayy']
Input: lexicographically, [2, 2, 2, 7, 4]
Output: ['le', 'xi', 'co', 'graphic', 'ally']
Isso é código-golfe , então a submissão com o menor número de bytes vence!
Python 2, 42 bytes
Às vezes você faz da maneira chata.
fonte
Braquilog ,
2013 bytesExperimente online!
Isso é extremamente ineficiente e atinge o tempo limite do TIO para o último caso de teste.
Explicação
Uma versão um pouco mais eficiente, 15 bytes
fonte
Python 3, 45 bytes
Isso imprime uma substring por linha e termina com um erro quando a está esgotado.
Testá-lo em repl.it .
fonte
Python,
52, 46 bytesUma função lambda recursiva.
Agradecimentos a Dennis por eliminar 6 bytes!
fonte
Gelatina , 6 bytes
Experimente online!
fonte
Haskell, 34 bytes
Exemplo de uso:
"lexicographically" # [2,2,2,7,4]
->["le","xi","co","graphic","ally"]
Recursão simples.
Ou a chata solução de 29 bytes via built-in:
fonte
Ruby, 26 bytes
As cadeias são representadas como matrizes de caracteres.
fonte
PowerShell v2 +, 46 bytes
Pega a string
$a
e a matriz de entrada e$b
passa o loop$b
. Cada iteração faz uma fatia da matriz com$a
base em$i
(o padrão é$null
ou0
) e o número atual. Precisa fazer o-1
e$i++
porque as seqüências de caracteres no PowerShell são zero-indexadas.Exemplos
(A saída aqui é separada por espaço, porque esse é o método de stringificação padrão para matrizes)
fonte
Perl, 28 bytes
Inclui +1 para
-n
Execute com a sequência de entrada em STDIN seguida por cada número em uma linha separada:
Apenas o código:
A versão de 23 bytes sem
||"^"
também funciona, mas imprime novas linhas finais falsas"^"
pode ser substituído por$_
se a sequência não contiver metacaracteres regexfonte
MATL , 8 bytes
Experimente online!
Explicação
fonte
JavaScript (ES6),
393835 bytesEconomizou 3 bytes graças ao ETHproductions:
Exemplo:
Solução anterior:
38 bytes graças ao Huntro:
39 bytes:
fonte
.slice
salva alguns bytes:s=>a=>a.map(v=>s.slice(t,t+=v),t=0)
Lote, 74 bytes
Estou batendo C? Isso não pode estar certo! Leva a string em STDIN e a matriz como argumentos da linha de comando.
fonte
Java, 119 bytes
Golfe:
Modifiquei a resposta de Roman Gräf ( /codegolf//a/93992/59935 ), mas não tenho representante suficiente para comentar.
Alterei a implementação do loop e, em vez de definir a string de origem para outra substring em cada iteração, alterei os índices com os quais recebo a substring.
fonte
Pyke, 10 bytes
Experimente aqui!
fonte
sed (82 + 2 para -rn) 84
A primeira linha de entrada é a sequência. Em seguida, cada linha depois disso é do tamanho de uma substring em unário .
Exemplo:
fonte
CJam , 11 bytes
Experimente online!
Explicação
fonte
C, 81 bytes
Como a
write()
saída não é armazenada em buffer, qualquer compilador on-line terá dificuldade em produzir isso.test.c :
Saída sem tubulação:
fonte
PHP, 98 bytes
Uso:
Saída:
Provavelmente existe uma solução melhor com PHP.
fonte
PHP, 82 bytes
Pega a entrada como uma sequência e, em seguida, uma lista de números, a saída é separada por novas linhas. por exemplo
Se você é uma daquelas pessoas capazes de usar $ argv com -r, pode salvar os 6 bytes usados para a tag de abertura.
fonte
$argv[++$i]
. Por que não$argv[1]
e$argv[2]
?$argv[2]
porque precisamos iterar através dos argumentos suprimidos e é$argv[++$i]
a primeira vez para evitar a necessidade de um,$i=1
e, assim, economizando 2 bytes.PHP, 63 bytes
Saída como matriz 85 bytes
fonte
Pitão, 7 bytes
Coloca a entrada separada por nova linha, com a sequência sem escape e vindo após a matriz. Experimente Online!
Explicação:
fonte
Oitava / MATLAB, 31 bytes
Esta é uma função anônima com entradas
s
: string;a
: matriz numérica.Experimente em Ideone .
Explicação
Esta é uma porta da minha resposta MATL.
fonte
Java 142 bytes
Golfe:
fonte
Awk, 36 caracteres
Exemplo de execução:
Na vida real, eu usaria assim, apenas não faço ideia de como calcular sua pontuação:
fonte
Dyalog APL 16.0, 15 caracteres (não concorrente); 15,0, 17 bytes
Solução 16.0
O Dyalog APL 16.0 adiciona a partição do APL2 primitiva ,,
⊂
com o glifo⊆
.Solução 15.0:
TryAPL online!
fonte
GNU sed, 55 + 2 (sinalizadores de rn) = 57 bytes
Experimente online! (obrigado a @Dennis por adicionar o sed)
Explicação: A sequência de entrada deve estar na primeira linha e os números, em unário , em linhas separadas depois disso. Uma nova linha é lida implicitamente no início de um ciclo, executando o script a cada vez.
Execução de teste: usando um documento aqui com EOF como marcador final
Saída:
fonte
Vimscript,
7978 bytesnão muito bonito, tenho certeza que pode ser melhorado ...
Pega um buffer vim e depois chama
echom string(A([2,3]))
para ver a saídaNa verdade, pensei em trapacear e emitir a corda
["abc", "def"]
... Mas resisti: PExplicação: Exclua (coloca no registro padrão) cada item da matriz quantia caracteres e o adiciona à matriz
r
... Uma resposta chata de fato.fonte
Lisp comum,
7876 bytesSupondo que a função anônima seja permitida:
Uso
Saída
-2 bytes usando em
as
vez deand
e alterando a definição y para ajustar parênteses entre duas variáveis em(subseq ...)
fonte
Rebol, 38 bytes
fonte