Introducción
Alice es un lenguaje bidimensional de Martin Ender que tiene dos modos de ejecución diferentes, cardinal y ordinal . Cuando el puntero de instrucciones pasa a través de un espejo (ya sea /
o \
), cambia de un modo a otro.
En este desafío, nos centraremos en el modo ordinal , donde los comandos operan en cadenas y el puntero de instrucciones se mueve en diagonal, rebotando contra los bordes del código.
Los programas simples que operan solo en modo ordinal se pueden escribir en un estilo bastante compacto, como en el siguiente ejemplo:
/fbd/
@aec\
Aquí el IP se inicia en modo cardinal de la primera célula hacia el este, pasa por el primer espejo y comienza a moverse en diagonal y rebotando, la ejecución de comandos a
, b
y c
. A continuación, se encuentra con el espejo noreste, que hace que se vaya al sur hacia el otro espejo y luego empezar a rebotar hacia el oeste, encontrándose con los comandos d
, e
, f
, y, por último @
, que termina el programa.
Este tipo de estructura es bastante compacta, pero no es fácil de escribir y mantener (¡agregar un solo comando podría obligarnos a reordenar la mayor parte del código!), Por lo que me gustaría que me ayudara con el formateo.
La tarea
Dada una secuencia de comandos, donde cada comando es un único carácter ASCII imprimible, reordenarlos en dos líneas para que la primera mitad de la secuencia pueda leerse comenzando desde el primer carácter de la segunda línea y luego moviéndose siempre diagonalmente hacia la derecha, mientras que la segunda mitad se puede leer tomando los caracteres restantes de derecha a izquierda. No se preocupe por los espejos y el símbolo de terminación, los agregaré yo mismo.
Entonces, por ejemplo, dada la entrada abcdef
que debe generar
fbd
aec
En caso de que la entrada sea de longitud impar, debe agregar un solo espacio (que es un noop en Alice) en cualquier lugar, siempre que la secuencia de comandos encontrados permanezca igual. También puede optar por generar dos líneas que difieran en longitud por un carácter, en cuyo caso se considera que la más corta tiene un solo espacio al final.
Reglas
Este es el código de golf , la respuesta más corta, en bytes, gana.
- Puede ingresar / salir a través de cualquiera de los métodos de entrada / salida predeterminados
- La entrada consiste en una sola línea de caracteres ASCII imprimibles
- Se permite una nueva línea final en la salida
- Algunas salidas de su programa pueden no tener un comportamiento completamente correcto cuando se ejecutan como programas de Alice (por ejemplo, si el espacio de relleno se inserta dentro de un literal de cadena). No tiene que preocuparse por estas situaciones.
- Las lagunas estándar están prohibidas
Casos de prueba
--Input
abcdef
--Output
fbd
aec
--Input
123
--Output
2
13
OR
31
2
OR
3
12
OR
32
1
--Input
O
--Output
O
OR
O
--Input
"Hello, World!"o
--Output
oH!lloo
""edlr,W
--Input
i.szR.szno
--Output
o.zz.
inssR
--Input
" ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So
--Output
o *^i}'.*[;.h~r}}~"{.[^
"S .^~ y~a}~~.["{!~"}^^^
(Odd length, your solution may be different)
Jalea ,
2322 bytes-1 byte gracias a Leo (la parte inferior izquierda puede ser el relleno)
Un programa completo que imprime el resultado (el enlace monádico devuelve una lista de listas de listas de caracteres).
Pruébalo en línea! o ver un conjunto de pruebas .
¿Cómo?
fuente
JavaScript (ES6), 104 bytes
Funciona emulando la ruta de ejecución y completando los comandos a medida que avanza.
fuente
1&~i
logra el zig-zag vertical, mientras quei+i>l?l-i:i
logra el espejo a medio camino. Una vez que se han ingresado todos los comandos en las posiciones de ejecución deseadas, la matriz se recopila para producir el resultado deseado.