Dada una cadena ASCII imprimible, divídala en una lista de cadenas no vacías con una nueva subcadena que comienza cada vez que aparece un carácter, que no se ha visto previamente en el mismo caso.
Ejemplos
"mississippi" → ["m","i","ssissi","ppi"]
"P P & C G" → ["P"," P ","& ","C ","G"]
"AAA" → ["AAA"]
"Adam" → ["A","d","a","m"]
"" → []
Anécdota : El resultado tendrá entre 0 y 95 elementos. La subcadena 95a necesariamente continuará hasta el final porque en ese punto, todos los caracteres ASCII imprimibles han comenzado una subcadena, por lo que cada carácter adicional habrá ocurrido antes y, por lo tanto, no puede causar que comience una nueva subcadena.

"y'parece una buena idea.""→[""]ser aceptable?[""]no ser válido. Suspiro.Respuestas:
Jalea , 4 bytes
Pruébalo en línea!
Explicación
La representación interna de las cadenas, que muestra el enlace TIO, es ligeramente diferente.
fuente
Retina , 9 bytes
Pruébalo en línea!
Explicación
Haga coincidir cada carácter (
.), descarte las coincidencias repetidas (q), descarte la primera coincidencia (1,) e inserte un salto de línea delante de cada coincidencia¶$&.fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
fuente
¸«puede estarªen la nueva versión de 05AB1E.C,
756563 bytes¡Gracias a @Digital Trauma por guardar 10 bytes y gracias a @gastropner y @ l4m2 por guardar un byte cada uno!
Imprime una nueva línea líder.
Pruébalo en línea!
Sin una nueva línea principal (71 bytes):
Pruébalo en línea!
fuente
{0}=>{}?Perl 6 ,
58 5240 bytesIntentalo
Intentalo
Pruébelo
(la entrada es una lista de caracteres y la salida es una lista de listas de caracteres)
Expandido:
La salida de
classifyesY
.sortsolo lo convierte en:».valuequita las llavesfuente
HashMapvs. aLinkedHashMapen Java, donde el orden se basa en la memoria vs. el orden de inserción?J , 7 bytes
Pruébalo en línea!
Explicación
¡La oportunidad de Tam tam para brillar!
fuente
APL (Dyalog Unicode) , SBCS de 8 bytes
Pruébalo en línea!
fuente
05AB1E , 8 bytes
Pruébalo en línea!
Siempre generará 1 nueva línea anterior, que es constante y no indica una división, la alternativa de 10 bytes que no genera una nueva línea anterior es
Ùvyy¶ì.;}¦, puede intentarlo aquí . Según Adam, una nueva línea anterior o posterior es aceptable.Después de cada iteración obtenemos:
Cual es:
fuente
ÙSD¶ì.;. No estoy seguro de por qué no pensamos en eso antes: PHaskell , 39 bytes
Pruébalo en línea!
Inserta un símbolo de nueva línea antes de cada carácter que aparece por primera vez, lo que resulta en una cadena separada por una nueva línea, con una nueva línea inicial. Anteponer
lines.para producir una lista.Haskell , 55 bytes
Pruébalo en línea!
Toma el prefijo repetidamente el primer carácter más los caracteres no únicos que lo siguen.
fuente
lines.tail.linespara eliminar la cadena vacía adicional ahora que lo pienso.APL (Dyalog) , 9 bytes
¡Gracias, Erik the Outgolfer por guardar 1 byte!
Pruébalo en línea!
Explicación:
⍳⍨: Para cada personaje, obtenga el índice de su primera aparición. p.ejmississippi -> 1 2 3 3 2 3 3 2 9 9 2⍳∘≢: El rango de 1 a la longitud de la entrada.∊: Afiliación. p.ej1 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⊢⊂⍨: Particionar la cadena de entrada con nuevas particiones que comienzan en1s en el vector de arribafuente
fgy monádico sef∘gcomportan igual)∊lugar de=?Japt , 11 bytes
¡Pruébelo en línea!
Explicación
Esto fue inspirado por la magia pulpo Urna 's solución 05AB1E .
fuente
iRUbY!JavaScript (ES6), 37 bytes
Se guardaron 7 bytes: se permitió explícitamente una nueva línea principal (¡Gracias @Shaggy!)
Toma la entrada como una matriz de caracteres. Emite una cadena separada por una nueva línea.
Casos de prueba
Mostrar fragmento de código
fuente
brainfuck, 66 bytes
Formateado:
Pruébalo en línea
La nueva línea inicial en la salida (que solo se imprime si la entrada no está vacía) se puede eliminar a un costo de 5 bytes reemplazando el cuerpo
xdel bucle principal (más externo) con.>,[x].fuente
Jalea , 6 bytes
Pruébalo en línea!
fuente
K4 , 19 bytes
Solución:
Ejemplos:
Explicación:
8 bytes es solo para manejar
""...fuente
Python 2 ,
8174 bytesPruébalo en línea!
fuente
setno mantengas el orden, a prueba de contrarrestar ->s='c'*6+'a'*100+'b'Python 2 , 47 bytes
Pruébalo en línea!
Emite una cadena separada por una nueva línea. Apenas supera la versión del programa:
Python 2 , 48 bytes
Pruébalo en línea!
fuente
Perl, 30 bytes
Incluye
+1parapDar entrada sin seguir la nueva línea en STDIN. La salida también es sin línea nueva:
Si no se preocupan por las nuevas líneas iniciales y finales de este
25(+3por-pya que el código contiene') también trabaja:fuente
${$&}++. No es tan robusto, pero ¿podría ser suficiente para este desafío? Además, ha habido un consenso sobre el meta queperl -pno necesita un byte adicional, solo necesita tener el encabezado, enPerl with `-p`lugar de solo Perl. Estoy tratando de recordar hacerlo yo mismo ...1es válida, en cuyo casoves necesaria. Con respecto al conteo, principalmente sigo codegolf.meta.stackexchange.com/a/7539/51507, que para mí es la meta publicación más consistente sobre contar perl.&~v0para agarrar el primer personaje. Gracias por unirse a este sitio y compartir su larga experiencia."lugar de'with-e, y luego puede contar-epcomo +1 en lugar de +3. (Probado)JavaScript,
615452 bytesToma la entrada como una matriz de caracteres.
Intentalo
fuente
R ,
9487 bytesPruébalo en línea!
Devuelve una lista (posiblemente vacía) de subcadenas.
¡Gracias a Michael M por guardar 7 bytes!
fuente
function(s,n=nchar(s),g=substring)g(s,d<-which(!duplicated(g(s,1:n,1:n))),c(d[-1]-1,n))sería más corto - y por supuesto un poco más feo ...substringlugar desubstr?if(n)allí porquesubstringarroja un error para la entrada de cadena vacía.substrdevuelve un vector de longitud igual a su primera entrada, mientras quesubstringdevuelve uno de longitud igual a la mayor de sus entradas.Stax , 8 bytes
Ejecutar y depurar en línea
La representación ascii del mismo programa es esta.
Para cada carácter, se divide cuando el índice del carácter actual es la posición actual.
fuente
> <> ,
22 1714 bytes-1 byte gracias a Emigna
Pruébalo en línea!
Imprime una nueva línea inicial y final.
Realiza un seguimiento de las letras que ya han aparecido
pemitiendo una copia del carácter en ese punto correspondiente en la segunda fila e imprimiendo una nueva línea si el valor obtenido desde esa posición no era 1. Finaliza un error cuando intenta imprimir-1fuente
g/p! 16 bytesHaskell, 62 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 68 bytes
Toma la entrada como una lista de caracteres.
Casos de prueba:
Mostrar fragmento de código
fuente
[""]era aceptable para el último caso de prueba. Pero no lo es . :-(PHP, 317 bytes
Pruébalo en línea!
fuente
Rojo , 79 bytes
Pruébalo en línea!
Sin golf:
fuente
SNOBOL4 (CSNOBOL4) ,
1159177 bytesPruébalo en línea!
Imprime las subcadenas separadas por nuevas líneas.
Explicación:
line
S(forSPLIT) en realidad no se divide, sino que extrae el primer carácter deNy lo guarda (.) enY. En unaFenfermedad, salta aEND. La coincidencia solo debe fallar cuandoNes la cadena vacía. Por lo tanto, cuando la entrada está vacía, salta directamenteENDy no genera nada.S = S YconcatenaYenS.SPAN(S)codiciosamente hace coincidir una serie de caracteresSy los envía (.) aOUTPUT, estableciendo (.)Na losREMcaracteres principales deN(si hay alguno). Luego vuelve a saltarS.fuente
PowerShell, 73 bytes
Uso
fuente
Ruby ,
656258 bytesPruébalo en línea!
Una lambda que acepta una cadena y devuelve una serie de cadenas.
Enfoque: para cada índice, agregue el carácter en ese índice en
sla matriz de resultados o en la última cadena de la matriz de resultados.String#indexdevuelve el índice de la primera instancia del argumento.-2 bytes: Inicialice
acomo un argumento splat en lugar de en su propia línea. ¡Gracias, Value Ink !-1 bytes: Uso
c=s[i]...cen lugar des[i]...s[i]. ¡Gracias, Value Ink !-4 bytes: usar en
.timeslugar de.mapfuente
Java 8,
193169155151 bytes-14 bytes gracias a @raznagul (por algo obvio que de alguna manera me extrañé ...)
-3 bytes gracias a @OOBalance (de nuevo por algo obvio que de alguna manera me extrañé ..: S)
Explicación:
Pruébalo en línea.
fuente
if(l<1). Siles así,0el bucle no debería ejecutarse de todos modos como0<0esfalse.i=0dos veces. Puede guardar 3 bytes soltando el segundo:for(;i<l;i++)