Escribir un programa que pasa a través de una cadena de caracteres no está en blanco (se puede suponer que son los dígitos 0
a 9
, pero nada en la forma en que se van a procesar depende de esto) y añade los espacios de acuerdo a las siguientes reglas.
- Deje que el token actual sea la cadena vacía, y los tokens emitidos previamente sean un conjunto vacío.
- Iterar a través de los caracteres de la cadena. Para cada personaje, primero agregue el personaje al token actual. Luego, si el token actual aún no está en el conjunto de tokens emitidos previamente, agregue el token actual a ese conjunto y deje que el nuevo token actual sea la cadena vacía.
- Si cuando llega al final de la cadena, el token actual está vacío, muestre los tokens emitidos previamente en orden de emisión, separados por un carácter de espacio. De lo contrario, envíe la cadena original literalmente.
Entrada
La entrada al STDIN debe ser una secuencia de dígitos.
Salida
El programa debe imprimir el resultado como se especifica en el paso 3.
Muestras
Entradas de muestra
2015
10101010
4815162342
101010101010
3455121372425
123456789101112131415
314159265358979323846264338327950288419716939937
Resultados de muestra
2 0 1 5
10101010
4 8 1 5 16 2 3 42
1 0 10 101 01 010
3 4 5 51 2 1 37 24 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 95 0 28 841 971 69 39 937
Este es el código de golf, por lo que se aplican las reglas estándar de CG. El programa más corto en bytes gana.
(Solicite cualquier aclaración en los comentarios. Todavía soy nuevo en esto. ¡Gracias!)
4815162342
Veo lo que hiciste allí, Brotha .1 0 10
, la siguiente iteración encontrará1
(ya utilizada), luego avanzará una para encontrar10
(ya utilizada), luego avanzará una para buscar101
, que es nueva y se 'agregará'. Luego agregaría un espacio y llegaría a uno nuevo0
, que ya se ha utilizado, pero está aquí al final de la cadena. Por lo tanto, la salida sería1 0 10 101 0
, que no es válida (0
se repite), y el script solo debe generar la cadena de entrada. Solo podría hacer1010
si101
ya se hubiera utilizado.If a unique number cannot be formed at the end of the string, then the input should be printed verbatim
10101010 no se puede dividir, por lo que se imprime tal cual.1
, lo que sería una repetición. Entonces, en cambio, te mueves hacia la derecha en el espacio 5, y luego te mueves hacia la derecha nuevamente en el paso 4, ingresas el paso 5 nuevamente y creas101
.Respuestas:
Pyth, 22 bytes
Liderar el espacio es importante.
fuente
Retina ,
6861 bytes<empty>
Es una línea vacía. Tenga en cuenta el espacio final en la línea 3. Puede ejecutar el código anterior desde un solo archivo con la-s
bandera.Explicación
Este primer paso implementa las reglas 1 a 6. Es una sustitución de expresiones regulares que se aplica repetidamente hasta que la cadena deja de cambiar (para eso
+
está). En cada paso agregamos un solo espacio en la cadena de izquierda a derecha (siguiendo las reglas del desafío). La expresión regular coincide con la cadena de dígitos más corta que no ha aparecido en la parte ya procesada de la cadena. Nos aseguramos de que estamos viendo un prefijo de la cadena restante con el límite de la palabra\b
y comprobando que podemos llegar al final de la cadena sin pasar espacios con(\w+)$
. Este último también garantiza que solo realicemos un reemplazo por paso.Esto coincide con cualquier espacio (que se encuentra al final de la expresión regular), siempre que el último segmento de la cadena sea el mismo que cualquier otro segmento de la cadena y los reemplace con la cadena vacía. Es decir, deshacemos el primer paso si resultó en un segmento final no válido, implementando la regla 7.
fuente
Pyth
2423 bytesPruébalo aquí .
Gracias a @FryAmTheEggman por guardar un byte: o)
fuente
Python 3, 92 bytes
Básicamente, una versión muy desarrollada de la solución de @ Willem.
fuente
[" ".join(o),i][n>""]
bool(n)
pero no pensé en eson>""
.Python 3,
10099 bytesfuente
else "
.Brachylog , 91 bytes
Esto me hizo darme cuenta de que hay muchas cosas sobre la sintaxis que necesito cambiar ...
Explicación
fuente
CJam, 26 bytes
Pruébalo aquí.
Explicación
fuente
JavaScript (ES6), 109
Mi formato de salida no es exactamente el mismo de las muestras de salida en la consulta (hay un espacio inicial). No lo veo como un defecto, ya que el formato de salida no está especificado (solo el programa debería imprimir el número después del número ... )
Pruebe a ejecutar el fragmento a continuación en un navegador compatible con EcmaScript 6. Desarrollado con Firefox, probado y ejecutándose en el último Chrome.
fuente
GNU sed,
83777371 bytes(Anote un extra porque requerimos
-r
bandera)El bucle interno prueba una secuencia repetida y agrega caracteres según sea necesario hasta que aparezca un número único después del separador
_
. El bucle externo se mueve a lo_
largo.Versión ampliada y anotada:
fuente
t
en uno./((\b[^ ]+).*\b\2)_/{
se puede reescribir como/(\b[^ ]+).*\b\1_/{
, no hay razón para 2 grupos de captura.\1
!Ruby, 57 + 1 = 58 bytes
Utiliza el indicador de línea de comando
-p
(opl
si su entrada tiene una nueva línea final). Explota varios rasgos de los diccionarios Ruby Hash: puede mutar de forma segura la cadena que utilizó para definir una clave sin que cambie la clave (que no funciona para otros tipos mutables),.keys
devuelve las claves en el orden en que se insertaron y el[]||=
operador proporciona una forma concisa de ramificar si una clave dada ya está allí.fuente
Haskell, 105 bytes
f
lo hace.fuente
PHP - 148 bytes
¡Genial desafío, mucha diversión!
fuente