Escriba el código más corto en el idioma que elija para realizar la decodificación de longitud de ejecución de la cadena dada.
La cadena se proporcionará como entrada en stdin en el formulario
CNCNCNCNCNCNCNCN
donde cada uno C
podría ser cualquier carácter ASCII imprimible y cada uno N
es un dígito 1
para 9
(inclusive).
Entrada de muestra:
:144,1'1
Salida correspondiente:
:4444,'
Lenguaje de programación Shakespeare , 406 bytes
Versión sin golf:
Estoy usando el compilador Python SPL de drsam94 , que tiene algunos errores (por lo que, por ejemplo, lo uso en
Open your mind
lugar deOpen thy mind
en la versión de golf).Para ejecutar este programa, use:
Cómo funciona
SPL es un lenguaje de programación esotérico diseñado para hacer que los programas se vean como obras de Shakespeare. Lo hace mediante el uso de caracteres como variables, y el procesamiento se realiza haciendo que los personajes se digan cosas entre sí.
Este es el título de la obra; es ignorado por el compilador.
Aquí estamos declarando las variables utilizadas en el resto del programa. Todo está entre
,
y.
el compilador lo ignora. En este caso, declaramos que seRomeo
usa para contener el carácter que se decodifica y que seJuliet
usa para mantener la longitud de ejecución del personaje.Aquí declaramos el primer y único acto en el programa. Los actos y las escenas son como etiquetas; se puede saltar a ellos en cualquier momento usando
let us return to scene II
o alguna variante de eso. Solo usamos un acto, porque es suficiente para nuestras necesidades. Una vez más, el compilador ignora cualquier cosa entre:
y.
.Aquí declaramos la primera escena. Las escenas están numeradas en números romanos: la primera es
Scene I
, la segundaScene II
, y así sucesivamente.Esta es una dirección escénica; en él, le decimos a las variables
Romeo
yJuliet
que entren en el "escenario". Solo dos variables pueden estar en el "escenario" a la vez; la etapa se usa para que el compilador pueda determinar qué variable está abordando qué cuando habla. Como solo tenemos dos variables, Romeo y Julieta permanecerán en el escenario durante todo el programa.Otra declaración de escena. Se saltará a la escena II para decodificar otra duración de ejecución.
Esta forma de declaración significa que Julieta comenzará a hablar. Todo hasta la próxima
Romeo:
declaración de dirección de escena o escena / acto será una línea pronunciada por Juliet, y por lo tanto "yo" se referirá a Juliet, "usted" / "you" a Romeo, etc.Este comando almacena el valor ordinal de un solo carácter de STDIN en
Romeo
.En SPL, los sustantivos se traducen a 1 o -1 dependiendo de si son positivos o negativos. En este caso, se
my mother
traduce en 1. Los adjetivos (positivos o negativos) multiplican su sustantivo por 2.Esta es una pregunta; en ella, Juliet pregunta si
my mother
(también conocido como 1) es "más alegre" que Romeo. Los comparativos se traducen aless than
(si son negativos, comoworse
) ogreater than
(si son positivos, comojollier
). Por lo tanto, esta pregunta se reduce aIs 1 greater than you?
.La razón por la que hacemos esta pregunta es para detectar el final de la entrada. Como el valor de
EOF
varía según la plataforma, pero generalmente es menor que 1, lo usamos para detectarlo.Si se evalúa la pregunta anterior
true
, saltamos a la escena IV, que es simplemente el final del programa. En resumen, si detectamos un EOF, finalizamos el programa.Ahora es la línea de Romeo: "yo" y "tú" se refieren a Romeo y Julieta, respectivamente.
Nuevamente, esta declaración coloca el valor ordinal de un solo carácter de STDIN en Julieta, que en este caso es la longitud de ejecución del carácter almacenado en
Romeo
.Este es demasiado largo para pasar con gran detalle, pero solo confía en mí en que se traduce
Juliet -= 48
. Hacemos esto porque Juliet tiene el valor ASCII de un número, yord('0') == 48
; al restar 48, traducimos del valor ASCII de un número al número mismo.Otra declaración de escena. Este es para el ciclo en el que imprimimos repetidamente el valor de carácter de
Romeo
,Juliet
veces.Esta declaración hace que Romeo imprima su valor como personaje; es decir, cualquier valor de carácter que se haya almacenado previamente en Romeo ahora se genera.
Un cerdo es un sustantivo negativo, por lo que se
a hog
traduce en -1; por lo tanto, esta declaración se evalúa comoJuliet -= 1
.Romeo aquí pregunta si Julieta está "tan podrida como", o igual a 0.
Si el valor de Juliet es 0, volveremos a la escena II para decodificar la longitud de la carrera de otro personaje.
De lo contrario, volvemos a la escena III para dar salida al personaje de Romeo nuevamente.
Esta declaración de escena final es solo un marcador para el final del programa. La
[Exeunt]
dirección del escenario es necesaria para que el compilador realmente genere la escena final.fuente
GolfScript, 10 caracteres
fuente
perl, 27 caracteres
fuente
print<>=~s/(.)(.)/$1x$2/ger
. También estoy bastante seguro de que te referías$1x$2
, y no al revés./r
se documenta en perlop y se agregó en v5.14.0-p
bandera le permite soltarprint
y<>
, por lo tanto, la respuesta será sencilla:s/(.)(.)/$1x$2/ge
-> 17 caracteres +1 para-p
-> 18 .R 67
fuente
rep
obligaría eltimes
argumento de caracteres a enteros automáticamente. Brillante.Pitón 3, 52
Python 3 me permite fusionar los enfoques de mis dos soluciones python2.
fuente
raw_input
coincide con Python 3input
. Así que la primera línea debe sers=input()
s=input() while s:a,b,*s=s;print(a*int(b),end='')
APL (22)
Explicación:
T←⍞
: almacenar entrada enT
T⊂⍨~⎕D∊⍨T
: divididoT
en aquellos caracteres que no son dígitos↑
:2
conviértalo en unaN/2
matriz -por-{⍺/⍨⍎⍵}/
: en cada fila de la matriz (/
), replica (/
) el primer carácter (⍺
) por el eval (⍎
) del segundo carácter (⍵
),/
: concatenar la salida de cada filafuente
Rubí, 30 bytes.
Código de 27 bytes + 3 bytes para ejecutarlo con la
-p
bandera:fuente
8086 asamblea,
10698 caracteresSi los números fueran antes de los caracteres en la secuencia de entrada, dos líneas (18 caracteres) podrían eliminarse de esto.
fuente
dq 21cdc38821cd08b4 d888ed30c188482c e8ebfce210cd14b4
con 53 caracteres? Sin embargo, no veo dónde maneja caracteres no mayúsculas o eof ...GNU SED, 122 + 2 (-r)
Debe ejecutarse con la
-r
bandera.Puede reducirse a 110 + 2 reemplazándola
\v
por la no imprimible0x0B
y\a
por0x07
fuente
\2.{9}
es una gran idea) ¡espléndido!C, 65 caracteres
Obtiene la entrada como parámetro.
fuente
error: first parameter of 'main' (argument count) must be of type 'int'
. ¿Hay un interruptor de línea de comando?Perl,
1918 caracteresLas reglas para contar los interruptores en la línea de comandos están aquí .
fuente
Adelante, 45 caracteres
Probado con adelante en OS X.
fuente
Python,
6362 caracteresfuente
iter
allí ... ¡Creo que lo usaré yo mismo!Windows PowerShell, 55 caracteres
Tengo la sensación de que esto se puede reducir aún más, específicamente con los lanzamientos de char a string e int, pero no tengo tiempo para seguir trabajando en ello en este momento.
fuente
C, 68 caracteres
La respuesta de @ ugoren en C es ligeramente más corta, pero esta respuesta cumple con el requisito de que "la cadena se proporcionará como entrada en stdin ".
fuente
main(c,n){ ... }
que se pasará 1 por defecto cuando se ejecute el programa.int
argumento, pero los compiladores que uso se quejan,error: second parameter of 'main' (argument array) must be of type 'char **'
por lo que no puedo salirse con la suyamain(c,n)
; Debo usarmain(int c,char **n)
. Podría ser una plataforma o una cosa de gcc.n;main(c)
pero nomain(n,c)
lo suficientemente bueno. :)Haskell,
5856 caracteresMi primer intento real de jugar al golf es algo, por lo que probablemente haya que mejorar aquí.
fuente
read[y]
salva dos personajesreplicate x y
con[1..x]>>[y]
. Por lo tanto, su segunda línea puede reemplazarsef(x:y:s)=(['1'..y]>>[x])++f s
, lo que la reduce a 53 bytes.Japt
-P
, 8 bytesEntrada como una matriz de caracteres, salida como una cadena.
Intentalo
fuente
ò crÏ°îX
si lo encuentras demasiado espeluznante!Malbolge Unshackled (variante de rotación de 20 trits), 4,494e6 bytes
El tamaño de esta respuesta excede el tamaño máximo de programa postable (eh), por lo que el código se encuentra en mi repositorio de GitHub .
¿Cómo ejecutar esto?
Esto podría ser una parte difícil, porque el ingenuo intérprete de Haskell tardará siglos en ejecutarlo. TIO tiene un intérprete decente Malbogle Unshackled, pero lamentablemente no podré usarlo (limitaciones).
La mejor que pude encontrar es la variante de ancho de rotación fija de 20 trits, que funciona muy bien, descomprimiendo 360 bytes por hora .
Para hacer que el intérprete sea un poco más rápido, eliminé todas las comprobaciones del intérprete Malbolge Unshackled de Matthias Lutter.
Mi versión modificada puede correr alrededor de un 6,3% más rápido.
¡Esta funcionando!
fuente
05AB1E ,
65 bytes-1 byte gracias a @Grimy .
Salidas como una lista de caracteres.
Pruébalo en línea.
Antigua respuesta de 6 bytes sin decodificación de longitud de ejecución integrada:
Pruébalo en línea.
Explicación:
fuente
2ι`ÅΓ
es de 5 bytes. Sería triste si el RLE incorporado no ganara un desafío RLE.Python,
787266 charfuente
GolfScript (10 caracteres)
fuente
J - 24
El objetivo de esta presentación es utilizar el adverbio infijo.
fuente
Befunge, 49 caracteres
fuente
K, 35
fuente
,/{(. y)#x}.'0N 2#
por 18 bytes .Pitón 2, 58
Esto está inspirado en la solución de Python de Darren Stone: ¡abuso de iteradores!
Esta es mi solución original (60 caracteres)
Un enfoque diferente es 3 caracteres más largo:
fuente
Java: 285 charas
fuente
Befunge-98, 22 caracteres
fuente
Espacio en blanco, 135
(Reemplace S, T, L con espacio, tabulación, caracteres de salto de línea).
Pruébelo en línea [aquí] .
Explicación:
fuente
Clojure (107)
Esto se siente excepcionalmente largo para ser Clojure, si alguien puede hacerlo mejor, publíquelo.
fuente