Dada una cadena cuadrada, produce toda la salida para la cadena en cada etapa de despliegue.
La cuerda debe desplegarse en sentido horario un cuarto de vuelta a la vez.
Ejemplos
Entrada :
A
Salida :
A
Nota : También aceptaré la entrada duplicada para este caso de prueba en particular solo si esto ayuda a reducir el recuento de bytes.
Entrada :
DC
AB
Salida :
DC
AB
D
ABC
ABCD
Entrada :
GFE
HID
ABC
Salida :
GFE
HID
ABC
HG
IF
ABCDE
IH
ABCDEFG
I
ABCDEFGH
ABCDEFGHI
Entrada :
JIHG
KPOF
LMNE
ABCD
Salida :
JIHG
KPOF
LMNE
ABCD
LKJ
MPI
NOH
ABCDEFG
NML
OPK
ABCDEFGHIJ
ON
PM
ABCDEFGHIJKL
PO
ABCDEFGHIJKLMN
P
ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
Reglas
Este es el código de golf, por lo que gana el código más corto en bytes.
- Se puede usar cualquier formato razonable para E / S, suponiendo que sea coherente.
- Se deben usar espacios para rellenar las líneas superiores de la salida.
- Debe poder manejar la entrada de todos los caracteres imprimibles (incluido el espacio:
\x20
-\x7e
):
! "# $% & '() * +, -. / 0123456789:;? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefghijklmnopqrstuvwxyz {|} ~
- Se permite el espacio en blanco inicial / final.
- Puede suponer que la cadena siempre será un cuadrado.
- Todas las lagunas estándar están prohibidas.
Inspiración: escriba un programa cuadrado que genere la cantidad de veces que se ha "desenrollado" .
["A","A"]
para"A"
, como mi programa hace (en lugar de["A"]
)? Me parece razonable ya que son solo las posiciones inicial y final, y solo intentas desplegarlo una vez.Respuestas:
SOGL V0.12 ,
2120191817 bytesPruébalo aquí! (
→
agregado porque esto espera entrada en la pila)Explicación:
fuente
Python 2 ,
209 207 205 203 202 201 200196 bytes-4 bytes gracias a @Quelklef !
Pruébalo en línea!
Python 2 ,
219 217 215 213 212 211207 bytesPruébalo en línea!
El primero sale como una lista de cadenas, el segundo sale como ASCII-art.
fuente
[::-1][1:]
puede ser[-2::-1]
, como en la respuesta de Lynn.Carbón ,
4235 bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: se guardaron 7 bytes principalmente al cambiar de matrices de caracteres a cadenas. Explicación:
Lea el cuadrado de entrada como una matriz de cadenas en la variable
q
.Mientras que la última cadena de la matriz no está vacía, quítela.
Imprime el resto de la matriz.
Gire el resto de la matriz al recorrer cada carácter de la última cadena y unir el
l
carácter th de cada cadena restante en la matriz invertida.Agregue la última cadena eliminada anteriormente
u
, que contiene el valor desplegado, e imprímala.Imprima el resultado y luego limpie el lienzo listo para la próxima iteración.
Tenga en cuenta que esta versión genera el despliegue final en una línea separada, si esto no es deseable, entonces para 38 bytes:
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
←E⁺⟦⪫υω⟧⮌θ⮌κ
invierte la matriz actual, antepone la línea desplegada, luego invierte los caracteres en cada línea, luego imprime todo al revés, produciendo así el resultado deseado.fuente
Rotate
y losTrim
comandos dejan el cursor ...Haskell ,
127120 bytesPruébalo en línea!
De entrada es una lista de líneas, por ejemplo,
["DC","AB"]
para el segundo caso de prueba, la salida es una lista de listas de líneas:[["DC","AB"],[" D","ABC"],["ABCD"]]
. ÚselomapM (putStrLn . unlines)
para imprimir el resultado.Editar: ahorré 7 bytes al notar que cuanto más corto
transpose
encontré, mientras que un intento es útil porque se puede modificar para revertir cada transposición directamente.fuente
05AB1E , 18 bytes
Pruébalo en línea!
Explicación
fuente
J, 62 bytes
Pruébalo en línea!
Estoy seguro de que se puede jugar mucho al golf. Esto imprime espacios en blanco adicionales, pero solo por la forma en que J formatea las matrices contenidas dentro de la matriz de salida para que tengan la misma forma.
Creo que una vez que entre y comente exactamente lo que estoy haciendo, podría tener una mejor idea de cómo jugar golf (habiendo hecho eso ahora, realmente no sé ...). Para fines de golf, vale la pena señalar que
Explicación
Al desviar esto, dividiré la función principal en tres.
Trabajaremos con el segundo caso de prueba.
unfurl_reversed
Esto le da a uno la cuerda desplegada una vez, pero a la inversa. Todo esto se está haciendo en reversa y en un orden específico para que la forma en que J rellena automáticamente las cadenas con espacios para que coincidan con la forma de la matriz en la que están dará el espacio correcto.
|:@}:
es la transposición de la reducción de la entrada|.@{:
es el reverso de la cola de la entradaCreo que puedes ver lo que queremos hacer: queremos agregar el reverso de la cola a la última parte de la transposición de la cortina (eso es un bocado, pero básicamente se adjunta
CBA
al final deED
). Esto nos dará un paso de despliegue, invertido.(}:@],{:@],[)
hace exactamente esoSe añade
CBA
aED
, a continuación, se une a que con el resto de la matriz. Nuestra salida por lo tanto eswhitespace_filter
Básicamente, esto prueba para ver si alguna fila es completamente espacios, y la elimina si es así. No hace nada para la primera iteración del caso de prueba.
Esto es necesario (al menos hasta que encuentre una alternativa) ya que de lo contrario eventualmente desplegaremos espacios en blanco en nuestra cadena de salida.
desplegar
Unfurl básicamente pone las otras funciones juntas y casos especiales de entradas de un solo carácter.
Cuando al poder del verbo (
^:
) se le da el cuadro vacío (a:
), aplica una función en una entrada hasta que converge y recopila los resultados en una matriz.(1 < #)
comprueba que las filas son siempre mayores que 1 (para entradas de fila de caso especial 1).|."1
invierte cada fila, por lo que invierte los resultados dewhitespace_filter @: unfurl
.fuente
Python 2 ,
143132 bytesPruébalo en línea!
En cada iteración,
b
es la "cabeza" de la cadena (primeras n − 1 filas), girada 90 grados: sia
es,[" NML", " OPK", "ABCDEFGHIJ"]
entoncesb
es["ON", "PM", "KL"]
.Para desplegar una cadena una vez, agregamos la línea final de
b
aa[-1]
(dar"ABCDEFGHIJKL"
) y luego recalculamosa[:-1]
agregando espacios al resto de las cadenasb
.Terminamos intentando saltar desde
b
cuando está vacío.Python 2 , 132 bytes
Pruébalo en línea!
La misma idea, escrita de manera diferente. Terminamos intentando
a.pop(-2)
cuandoa
solo tiene un elemento.fuente
Perl 5 , 155 bytes
Pruébalo en línea!
Guardado algunos bytes sin modificar realmente la lógica. El siguiente flujo sigue siendo básicamente correcto.
# Perl 5 , 163 bytesPruébalo en línea!
¿Cómo?
fuente