Dada uma sequência ASCII imprimível, divida-a em uma lista de seqüências não vazias com uma nova sub-sequência iniciando sempre que um caractere, que não foi visto anteriormente no mesmo caso, ocorre.
Exemplos
"mississippi" → ["m","i","ssissi","ppi"]
"P P & C G" → ["P"," P ","& ","C ","G"]
"AAA" → ["AAA"]
"Adam" → ["A","d","a","m"]
"" → []
Anedota : O resultado terá entre 0 e 95 elementos. A 95 ª sub-corda vai necessariamente continuar até o fim, porque nesse ponto, todos os caracteres ASCII imprimíveis começaram uma sub-string, então cada personagem adicional terá ocorrido antes e, portanto, não pode causar uma nova sub-string para começar.
"
e'
parece ser uma boa ideia.""
→[""]
ser aceitável?[""]
ser inválida. Suspiro.Respostas:
Gelatina , 4 bytes
Experimente online!
Explicação
A representação interna das seqüências de caracteres, que o link TIO exibe, é um pouco diferente.
fonte
Retina , 9 bytes
Experimente online!
Explicação
Combine cada caractere (
.
), descarte as correspondências repetidas (q
), descarte a primeira correspondência (1,
) e insira um avanço de linha na frente de cada correspondência¶$&
.fonte
05AB1E , 11 bytes
Experimente online!
Explicação
fonte
¸«
pode estarª
na nova versão do 05AB1E.C,
756563 bytesAgradecemos ao @Digital Trauma por salvar 10 bytes e obrigado a @gastropner e @ l4m2 por salvar um byte cada!
Imprime uma nova linha principal.
Experimente online!
Sem uma nova linha principal (71 bytes):
Experimente online!
fonte
{0}
=>{}
?Perl 6 ,
58 5240 bytesTente
Tente
Experimente
(entrada é uma lista de caracteres e saída é uma lista de listas de caracteres)
Expandido:
A saída de
classify
éE
.sort
apenas transforma em:».value
remove as chavesfonte
HashMap
vs. aLinkedHashMap
em Java, onde o pedido é baseado na memória versus no pedido de inserção?J , 7 bytes
Experimente online!
Explicação
A chance da peneira de Nub brilhar!
fonte
APL (Dyalog Unicode) , 8 bytes SBCS
Experimente online!
fonte
05AB1E , 8 bytes
Experimente online!
Sempre produzirá 1 nova linha anterior, que é constante e não indica uma divisão, a alternativa de 10 bytes que não gera uma nova linha anterior é
Ùvyy¶ì.;}¦
, você pode tentar isso aqui . Segundo Adam, uma nova linha anterior ou posterior é aceitável.Após cada iteração, obtemos:
Qual é:
fonte
ÙSD¶ì.;
. Não sei por que não pensamos nisso antes: PHaskell , 39 bytes
Experimente online!
Insere um símbolo de nova linha antes de cada caractere que aparece pela primeira vez, resultando em uma sequência separada por nova linha, com uma nova linha inicial. Anexar
lines.
para produzir uma lista.Haskell , 55 bytes
Experimente online!
Pega o prefixo repetidamente no primeiro caractere mais os caracteres não exclusivos que o seguem.
fonte
lines
,.tail.lines
para remover a string extra vazia agora que penso nisso.APL (Dyalog) , 9 bytes
Obrigado, Erik, o Outgolfer, por economizar 1 byte!
Experimente online!
Explicação:
⍳⍨
: Para cada caractere, obtenha o índice de sua primeira ocorrência. por exemplomississippi -> 1 2 3 3 2 3 3 2 9 9 2
⍳∘≢
: O intervalo de 1 ao comprimento da entrada.∊
: Assinatura. por exemplo1 2 3 4 5 6 7 8 9 10 11∊1 2 3 3 2 3 3 2 9 9 2 -> 1 1 1 0 0 0 0 0 1 0 0
⊢⊂⍨
: Particione a sequência de entrada com novas partições começando em1
s no vetor acimafonte
fg
e monadicf∘g
se comportam da mesma)∊
invés de=
?Japonês , 11 bytes
Teste online!
Explicação
Isto foi inspirado por Magia Octopus Urna 's solução 05AB1E .
fonte
iRUbY
!JavaScript (ES6), 37 bytes
Economizou 7 bytes: uma nova linha principal foi explicitamente permitida (Obrigado @Shaggy!)
Recebe a entrada como uma matriz de caracteres. Gera uma sequência separada por nova linha.
Casos de teste
Mostrar snippet de código
fonte
brainfuck, 66 bytes
Formatado:
Experimente online
A nova linha principal na saída (que é impressa apenas se a entrada não estiver vazia) pode ser removida ao custo de 5 bytes, substituindo o corpo
x
do loop principal (mais externo) por.>,[x]
.fonte
Gelatina , 6 bytes
Experimente online!
fonte
K4 , 19 bytes
Solução:
Exemplos:
Explicação:
8 bytes é apenas para lidar com
""
...fonte
Python 2 ,
8174 bytesExperimente online!
fonte
set
não mantenha ordem, contra-prova ->s='c'*6+'a'*100+'b'
Python 2 , 47 bytes
Experimente online!
Gera uma sequência separada por nova linha. Mal bate a versão do programa:
Python 2 , 48 bytes
Experimente online!
fonte
Perl, 30 bytes
Inclui
+1
parap
Dê entrada sem rastrear nova linha no STDIN. A saída também é sem nova linha à direita:
Se você não se preocupam esquerda e à direita newlines este
25
(+3
para-p
porque o código contém'
) também funciona:fonte
${$&}++
. Não é tão robusto, mas pode ser suficiente para este desafio? Além disso, houve um consenso sobre a meta queperl -p
não precisa de um byte adicional, você só precisa ter o cabeçalho, ePerl with `-p`
não apenas o Perl. Estou tentando lembrar-se de fazer isso sozinha ...1
é válido; nesse caso,v
é necessário. Em relação à contagem, sigo principalmente codegolf.meta.stackexchange.com/a/7539/51507, que para mim é o meta post mais consistente sobre a contagem de perl.&~v0
para pegar o primeiro caractere. Obrigado por ingressar neste site e compartilhar sua longa experiência."
vez de'
com-e
, e pode contar-ep
como +1 em vez de +3. (Testado.)JavaScript,
615452 bytesRecebe a entrada como uma matriz de caracteres.
Tente
fonte
R ,
9487 bytesExperimente online!
Retorna uma lista (possivelmente vazia) de substrings.
Agradecimentos a Michael M por economizar 7 bytes!
fonte
function(s,n=nchar(s),g=substring)g(s,d<-which(!duplicated(g(s,1:n,1:n))),c(d[-1]-1,n))
seria mais curto - e, claro, um pouco mais feio ...substring
invés desubstr
?if(n)
lá porquesubstring
gera um erro para a entrada de seqüência de caracteres vazia.substr
retorna um vetor de comprimento igual à sua primeira entrada, enquantosubstring
retorna um de comprimento igual à maior de suas entradas.Stax , 8 bytes
Executar e depurar online
A representação ascii do mesmo programa é essa.
Para cada caractere, ele é dividido quando o índice do caractere atual é a posição atual.
fonte
> <> ,
22 1714 bytes-1 byte graças a Emigna
Experimente online!
Imprime uma nova linha inicial e final.
Ele rastreia quais letras já apareceram,
p
citando uma cópia do caractere no local correspondente na segunda linha e imprimindo uma nova linha se o valor buscado nessa posição não for 1. Termina com um erro ao tentar imprimir-1
fonte
g/p
! 16 bytesHaskell, 62 bytes
Experimente online!
fonte
JavaScript (ES6), 68 bytes
Recebe a entrada como uma lista de caracteres.
Casos de teste:
Mostrar snippet de código
fonte
[""]
era aceitável para o último caso de teste. Mas não é . :-(PHP, 317 bytes
Experimente online!
fonte
Vermelho , 79 bytes
Experimente online!
Ungolfed:
fonte
SNOBOL4 (CSNOBOL4) ,
1159177 bytesExperimente online!
Imprime as substrings separadas por novas linhas.
Explicação:
A linha
S
(forSPLIT
) não é dividida, mas extrai o primeiro caractere deN
e salva (.
) emY
. NaF
doença, ele pula paraEND
. A correspondência só deve falhar quandoN
é a string vazia. Assim, quando a entrada está vazia, ela salta diretamente paraEND
e não produz nada.S = S Y
concatenaY
emS
.SPAN(S)
corresponde avidamente a uma série de caracteresS
e a envia (.
) paraOUTPUT
, definindo (.
)N
para osREM
caracteres finais deN
(se houver algum). Então ele volta paraS
.fonte
PowerShell, 73 bytes
Uso
fonte
Ruby ,
656258 bytesExperimente online!
Um lambda aceitando uma string e retornando uma matriz de strings.
Abordagem: para cada índice, acrescente o caractere nesse índice
s
à matriz de resultados ou à última sequência da matriz de resultados.String#index
retorna o índice da primeira instância do argumento.-2 bytes: inicialize
a
como um argumento de splat em vez de em sua própria linha. Obrigado, Value Ink !-1 byte: Use
c=s[i]
...c
em vez des[i]
...s[i]
. Obrigado, Value Ink !-4 bytes: use em
.times
vez de.map
fonte
Java 8,
193169155151 bytes-14 bytes graças a @raznagul (por algo óbvio, de alguma forma, senti falta de mim ..)
-3 bytes graças a @OOBalance (novamente por algo óbvio, de alguma forma, senti falta de mim mesmo ..: S)
Explicação:
Experimente online.
fonte
if(l<1)
. Ifl
is,0
o loop não deve ser executado como0<0
estáfalse
.i=0
duas vezes. Você pode salvar 3 bytes largando o segundo:for(;i<l;i++)