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
classify
esY
.sort
solo lo convierte en:».value
quita las llavesfuente
HashMap
vs. aLinkedHashMap
en 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.lines
para 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 en1
s en el vector de arribafuente
fg
y monádico sef∘g
comportan 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
x
del 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
set
no 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
+1
parap
Dar 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
(+3
por-p
ya 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 -p
no necesita un byte adicional, solo necesita tener el encabezado, enPerl with `-p`
lugar de solo Perl. Estoy tratando de recordar hacerlo yo mismo ...1
es válida, en cuyo casov
es 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.&~v0
para agarrar el primer personaje. Gracias por unirse a este sitio y compartir su larga experiencia."
lugar de'
with-e
, y luego puede contar-ep
como +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 ...substring
lugar desubstr
?if(n)
allí porquesubstring
arroja un error para la entrada de cadena vacía.substr
devuelve un vector de longitud igual a su primera entrada, mientras quesubstring
devuelve 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
p
emitiendo 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-1
fuente
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 deN
y lo guarda (.
) enY
. En unaF
enfermedad, salta aEND
. La coincidencia solo debe fallar cuandoN
es la cadena vacía. Por lo tanto, cuando la entrada está vacía, salta directamenteEND
y no genera nada.S = S Y
concatenaY
enS
.SPAN(S)
codiciosamente hace coincidir una serie de caracteresS
y los envía (.
) aOUTPUT
, estableciendo (.
)N
a losREM
caracteres 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
s
la matriz de resultados o en la última cadena de la matriz de resultados.String#index
devuelve el índice de la primera instancia del argumento.-2 bytes: Inicialice
a
como un argumento splat en lugar de en su propia línea. ¡Gracias, Value Ink !-1 bytes: Uso
c=s[i]
...c
en lugar des[i]
...s[i]
. ¡Gracias, Value Ink !-4 bytes: usar en
.times
lugar de.map
fuente
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)
. Sil
es así,0
el bucle no debería ejecutarse de todos modos como0<0
esfalse
.i=0
dos veces. Puede guardar 3 bytes soltando el segundo:for(;i<l;i++)