Introducción
Escriba un programa completo que gire un bloque rectangular de caracteres ASCII 90 grados en el sentido de las agujas del reloj. Cuando el programa en sí mismo gira 90 grados en el sentido de las agujas del reloj, gira un bloque de caracteres ASCII 90 en sentido antihorario.
Reglas
- Es posible que no use incorporados que roten o transpongan matrices. Por ejemplo, en MATLAB / Octave
rot90
y el operador de transposición'
no están permitidos. - Debe escribir un programa completo que use STDIN y STDOUT o el equivalente más cercano.
- Su programa debe ser rectangular y asumir que la entrada también es rectangular.
- La entrada y la salida son cadenas separadas por una nueva línea y no tendrán nuevas líneas finales.
Cuando se ejecuta con su código fuente como entrada, su programa debe girar 90 grados en el sentido de las agujas del reloj. La salida debe ser un segundo programa en el mismo idioma que gira su entrada 90 grados en sentido antihorario. Cuando el programa girado recibe su código fuente como entrada, debe generar el código fuente del programa original.
Nota: Ambos programas deben funcionar para cualquier entrada, no solo para su propio código fuente, por lo que no se permite una quine de un carácter.
Ejemplo
Digamos que el siguiente es un programa válido que gira su entrada 90 grados en un lenguaje hipotético ExampleLang.
^f a2% 3
lk (^_^&
v
D8 $4 /
Cuando se ejecuta consigo mismo como entrada, genera otro programa válido que gira su entrada en sentido antihorario:
D l^
8 kf
$ (a
4 ^2
_%
^
/v&3
Este segundo programa, cuando se da a sí mismo como entrada, emite el programa original. Tenga en cuenta que la línea en blanco debe tener cuatro espacios y hay un espacio final en la penúltima línea que no se puede representar en markdown. Para aclarar:
$ examplelang program < program > rotProg
$ examplelang rotProg < rotProg > program1
$ diff -s program program1
Files program and program1 are identical
El programa más corto gana. Las lagunas estándar están prohibidas.
fuente
:.+
puede dividir en varias líneas?:
y.
depende del carácter después de ellos, y saltos de línea no son válidos después de uno de los (e incluso si lo fueran, que cambiaría el significado del programa).C (gcc) ,
14201399463 bytesAh ... la alegría de las cuerdas de longitud indeterminada!
Asume
sizeof(char*) == sizeof(int)
ysizeof(char**) <= 16
.El nuevo enfoque
Pruébalo en línea!
Salida de lo anterior
La solución fue vergonzosamente fácil al final. Haces un programa A que gira las cosas en sentido horario, y un programa B que gira en sentido antihorario:
UN
si
Haga un rectángulo de proporciones razonables y limite A a eso, y ponga protectores de comentarios a su alrededor:
Limite el programa B a un cuadrado que tenga el mismo ancho que el de A más dos (para las líneas adicionales de comentarios en el borde inferior), gírelo en sentido antihorario y golpéelo a la derecha del programa A y obtendrá la solución anterior.
El viejo enfoque
Pruébalo en línea!
Salida de lo anterior
fuente