Acortar (o no) el texto utilizando la codificación de longitud de ejecución
Entrada:
heeeello woooorld
Salida:
1h4e2l1o 1w4o1r1l1d
- Leer líneas de stdin.
- Imprimir en stdout.
- Stderr es, por supuesto, descartado.
- Suponga que hay casos de prueba ocultos (sin incrustación de la salida)
- Entrada / Salida como ASCII
- Cualquier idioma es aceptado
w4orld
lugar de1w4o1r1l1d
(necesitaría escapar de los números, por ejemplo, `f111 -> f3 \ 1´). Pero entonces sería casi un duplicado de esto: codegolf.stackexchange.com/questions/677422
es un punto de referencia trivial.11
es imposible.22
debe terminar allí o ser seguido por otro punto fijo que no comience por2
.333nnn
es un patrón imposible, ya que nunca encontrarás el mismo personaje en índices impares consecutivos.4444
y hasta fallan por la misma razón.Respuestas:
Perl:
46→ 36 o 27 caracteresperl -pe's|((.)\2*)|@x=split//,$1;@x.$x[0]|eg'
Todos saludan a @ardnew por tener la idea de usar el
tr///c
operador para contar el número de caracteres en la cadena coincidente en lugar de dividir:Degolfed:
Uso:
o vía STDIN
huellas dactilares
fuente
p
opción.s|((.)\2*)|$1=~y///c.$2|eg
, que suma a 27 caracteres en total (utilizando las mismas reglas de recuento de caracteres como @Gareth)-p
) al eliminar los elementos externos: ¡ Pruébelo en línea!Stax , 7 bytes
Ejecutar y depurarlo st staxlang.xyz!
Desempaquetado (8 bytes) y explicación:
5 bytes, funciona solo en una sola línea:
¡Ejecútelo y depúrelo en staxlang.xyz!
Quizás no sea legal. Este programa imprime cada par en una línea propia. Un poco vago.
Si ese formato de salida es ilegal, le doy 6 bytes :
¡Ejecútelo y depúrelo en staxlang.xyz!
El creador recursivo del lenguaje señala que uncons-right (
N
) puede acortar esto a seis bytes sin empaquetar, ya que maneja elE
y el]
solo. Sin embargo, los programas tan cortos a menudo no se acortan cuando se empaquetan, y este es un ejemplo. Todavía seis bytes:|RFNpp
Editar: Tuve que actualizar mi respuesta principal; este formulario es lo que usé.fuente
|RFNpp
puede proporcionar la salida especificada en 6 bytes sin empaquetar, pero desafortunadamente no empaca.J,
3531 caracteresUso:
fuente
[:,(#,&":{.)/.~
por 15: ¡ Pruébelo en línea!Brachylog , 11 bytes
Pruébalo en línea!
(Si la salida realmente tiene que estar en stdout, agregue un byte
w
al final).fuente
K (oK) , 28 bytes
Pruébalo en línea!
En dispositivos móviles, explicación a seguir ...
fuente
Python 3 iterativo,
1159997 bytesPruébalo en línea!
Python 3 recursivo,
136130129 bytesPruébalo en línea!
El enfoque iterativo parece bastante exitoso, mientras que la versión recursiva tiene mucho margen de mejora.
fuente
while
bucle en su código solo está allí para demostrar la entrada. Sin él, su código sigue siendo válido. En ese caso, el bucle no necesita ser parte del código y puede reducir el primer ejemplo a 85 bytes de esta manera: ¡ Pruébelo en línea!05AB1E , 9 bytes
Pruébalo en línea.
O alternativamente:
Pruébalo en línea.
Explicación:
fuente
Wolfram Language (Mathematica) , 98 bytes
Pruébalo en línea!
Un formato de E / S más flexible reduce esta solución a 54 bytes :
Pruébalo en línea!
fuente
Bash: 104 caracteres
Ejecución de muestra:
fuente
Zsh, 117
Ejecútelo así:
De golf
fuente
[[
construcción es un comando en sí mismo (como[
) y debe separarse de otros comandos. En cuanto a usar[
over[[
, requiere que se citen los argumentos, por lo"
que deben agregarse cuatro .APL (24)
fuente
Burlesco (17B)
Versiones anteriores / alternativas y más largas:
fuente
rs , 19 caracteres
Esto realmente no cuenta porque creé rs mucho después de que esto fue publicado ... ¡pero fue divertido de todos modos!
Pruébalo aquí!
fuente
Retina , 12 bytes
Pruébalo en línea.
Explicación:
Obtenga una parte de 1 o más del mismo personaje, capturando al personaje en el grupo de captura 1.
Reemplácelo con la longitud de la coincidencia total, concatenada con el personaje del grupo de captura 1:
fuente
Ruby , 42 bytes
Pruébalo en línea!
fuente
Python 3 , 84 bytes
Pruébalo en línea!
Explicación
Comprueba si el primer y el segundo carácter de la cadena son iguales. Si lo están, aumente el contador en 1. Si no lo están, imprima el contador y el primer elemento y restablezca el contador a 1. En ambos casos, la función se llama de forma recursiva con el primer carácter eliminado.
Provoca un error cuando se alcanza el final de la cadena.
Sin restricciones de E / S, pero con un recuento mínimo de bytes:
Python 3.8 (prelanzamiento) , 70 bytes
Pruébalo en línea!
Python 3 equivalente (77 bytes)
Explicación
Elimina todos los caracteres repetidos del inicio de la cadena. Luego devuelve una cadena que contiene (1.) la diferencia en longitudes entre la cadena original y la cadena despojada; (2.) el primer carácter de la cadena original; (3.) el resultado de la función recursiva aplicada a la cadena despojada. La recursión termina cuando se encuentra una cadena vacía.
fuente
[Scala (shell)], 150 bytes
Pruébalo en línea!
Aquí el Lambda puro se des-golf (103 bytes):
fuente
Julia 1.1 ,
948481 bytesPruébalo en línea!
fuente
'\n'
enreadline()
lugar de imprimir la última tupla manualmenteCJam , 2 bytes
e`
es una función de codificación de longitud de ejecución. La salida implícita de CJam ignora los corchetes de la matriz, por lo que se convierte[[1 'h] [2 'e]]
en"1h2e"
Pruébalo en línea!
fuente
Zsh, 70 bytes
Pruébalo en línea!
Esta es una versión mucho más golfista de la respuesta zsh anterior ( enlace tio ). Probablemente podría jugar más golf usando string => conversión de matriz en lugar de iteración.
fuente