Dada una cadena, su tarea es contraerla en una estructura en zigzag como se describe a continuación.
Doblar en un zigzag
Tomaremos la cadena "Mississippi"
como ejemplo:
Primero, muestre el prefijo más largo que consta solo de caracteres únicos:
Mis
Cuando llegue al primer carácter duplicado C , ignórelo y genere el prefijo más largo que consta de caracteres únicos de la cadena restante (
issippi
) verticalmente, debajo de la primera aparición de C :Mis i s
Repita el proceso, alternando entre continuación horizontal y vertical. Pero ahora tenga cuidado (en el paso 1) para continuar generando horizontalmente desde la última aparición del carácter duplicado, que no es necesariamente el último, como en este caso:
Mis i sip ----- Mis i sip i
Reglas
- La cadena solo contendrá caracteres ASCII imprimibles, pero no contendrá ningún tipo de espacio en blanco.
- Puede competir en cualquier lenguaje de programación y puede recibir información y proporcionar resultados a través de cualquier método estándar y en cualquier formato razonable 1 , mientras toma nota de que estas lagunas están prohibidas por defecto. Este es el código de golf , por lo que gana el envío más corto (en bytes) para cada idioma .
- 1 Entrada: Cadena / Lista de caracteres / cualquier otra cosa que su idioma use para representar cadenas. Salida: cadena multilínea, lista de cadenas que representan líneas o lista de listas de caracteres / cadenas de longitud 1, pero, si es posible, incluya una versión impresa bonita de su código en su respuesta.
- En cuanto a espacios adicionales, la salida puede contener:
- Nuevas líneas iniciales / finales
- Espacios finales en cada línea / al final
- Un número constante de espacios iniciales en cada línea
- Usted debe comenzar a la salida horizontal, es posible que no empezar verticalmente.
Casos de prueba
Entradas:
"Perfecto" "Misisipí" "Rarezas" "Trivialidades" "Cthulhu" "PPCG" "pOpOpOpOpOpOp" "ABCCCE" "ABCCCECCEEEEC" "abcdcebffg" abca "AAAAAAAA"
Salidas correspondientes:
Perf C t
Mal yo sorbo yo
Sobredosis ies t
Triv un l ies t
Cthul tu
PAG C sol
correos OpO popular pag
A B C C mi
A B C CCE E CE
a B C D mi si fg
a B C
UN Automóvil club británico UN
b
, ya que solo debes considerar los duplicados en la cadena restante , es decir, después de "ramificar". Una vez que alcanza el segundoc
, genera el prefijo más largo de caracteres únicos de la cadena restante , que esebffg
(por lo tanto, generaebf
verticalmente y continúa horizontalmente después de eso), por lo que no tiene que preocuparse por los caracteres de la parte de la cadena que ya se emitió antes de cambiar de orientación. Si todavía no te queda claro, haré otro ejemplo paso a paso con este caso de prueba.ABCcde
"A" ≠ "a"
. La salida paraABCcde
seríaABCcde
AAAAAAAA
Respuestas:
Wolfram Language (Mathematica) , 143 bytes
Pruébalo en línea!
Contiene
0xF8FF
, que corresponde al\[Transpose]
operador.Uf, fue difícil convertir el resultado en una cuerda. Obtener cada rama no es tan difícil:
#//.{q___,a_,r___,a_,Longest@s___}:>{q,a,{r},{s}}&
fuente
Python 2 , 131 bytes
Pruébalo en línea!
-1 gracias a Lynn .
Imprime como una tupla de listas de cadenas de longitud 1. Salida bastante impresa .
fuente
Python 2 ,
184176175168 bytes-5 bytes gracias al Sr. Xcoder
Pruébalo en línea!
fuente
\
? Además, puede generar una lista de listas de cadenas de longitud 1, como lo hago en mi solución, según el OP.CJam , 81 bytes
Pruébalo en línea!
fuente