El código en este sitio se está agotando rápidamente. Necesitamos invertir en cadenas renovables. Por lo tanto, debe escribir un programa que tome una cadena y la convierta en un molino de viento.
El reto
Tomemos una simple cadena de molino de viento como ejemplo. Toma la cuerda abc
. El pivote es el carácter central, en este caso b
. Como la cadena tiene 3 caracteres de longitud, cada salida tendrá exactamente tres líneas de alto y tres caracteres de ancho. Aquí está su salida en el paso 1. (Tenga en cuenta el espacio en blanco)
a B C
Para obtener el siguiente paso, gire cada personaje alrededor del pivote en el sentido de las agujas del reloj. Aquí está el paso 2:
un si C
Aquí están los pasos 3-8:
un si C
un si C
cba
C si un
C si un
C si un
Y en el noveno paso, se completa el círculo hasta la cadena original:
a B C
Tenga en cuenta que b
permanecieron en el mismo lugar todo el tiempo. Esto se debe a que b
es el carácter pivote. Debe escribir un programa o función que tome una cadena como entrada e imprima repetidamente esta secuencia hasta que se cierre el programa.
Aclaraciones
Todas las cadenas de entrada tendrán un número impar de caracteres. (Para que cada molino de viento tenga un pivote)
Para mantener el desafío simple, todas las cadenas solo contendrán caracteres del alfabeto en mayúsculas y minúsculas.
La salida debe ser
len(input_string)
caracteres anchos y altos.No importa en qué paso de la secuencia comience, siempre y cuando continúe girando y dando vueltas para siempre.
Más prueba IO:
Como la publicación ya es bastante larga, aquí hay un enlace a la salida de "windmill":
Nota al margen:
Como se supone que es un molino de viento, sería increíble si incluye algún código repetitivo para animarlo con un pequeño retraso de tiempo o una entrada del usuario entre cada paso. Sin embargo, dado que algunos idiomas no tienen tiempo incorporado, esto no es obligatorio. La parte competitiva de su envío puede imprimir la secuencia lo más rápido posible.
Respuestas:
MATL ,
353321 bytesLo siguiente animará el molino de viento ( 26 bytes )
Demo en línea
En esta versión, el
Xx
especifica para borrar la pantalla y1Y.
es una pausa de 1 segundo.Explicación
La idea básica es que queremos crear dos versiones de la entrada. Una versión "ortogonal"
Y una versión "diagonal"
Empujamos estas dos versiones a la pila. Cada vez a través del bucle, cambiamos el orden de la pila y giramos el superior en el sentido de las agujas del reloj.
fuente
JavaScript (ES6), 291 bytes
fuente
05AB1E ,
8853 bytesCódigo:
Pruébalo en línea! . Asegúrese de presionar el botón de matar justo después de ejecutarlo, ya que entra en un bucle infinito.
fuente
Rubí,
122119 bytesVersión sin golf con suspensión, en programa de prueba
La rotación no es muy convincente a la altura total de la consola. Pero si reduce la altura a la longitud de la cadena de entrada, la rotación es mucho más convincente.
fuente
MATL ,
4744 bytesPruébalo en línea!(pero mátalo inmediatamente, bucle infinito)
Con pausa de 1 segundo: 56 bytes
Pruébalo en línea! (de nuevo, bucle infinito)
fuente
Python 3 , 193 bytes
Sin golf
Recursivo, 177 bytes
(choque después de unos segundos)
Sin golf
Otra solución, 268 bytes.
Sin golf
fuente
Pyth, 48 bytes
Pruébalo en línea! (Nota: esta es una versión que no se repite para siempre, ya que bloquearía el intérprete).
Traducido descaradamente de la solución Python 3 por @ByHH .
Cómo funciona:
fuente