De todos los caracteres ASCII, es fácil decir que algunos de ellos forman grupos que son rotaciones del mismo carácter básico. Por ejemplo, V > ^ <
. Esto permite la posibilidad de construir arte ASCII que puede rotarse por múltiplos de 90 grados y seguir siendo arte ASCII.
El reto
Su objetivo es jugar al golf un programa que acepte el arte ASCII y la cantidad de grados para rotarlo desde STDIN, e imprima el arte ASCII rotado en STDOUT.
En la primera línea de entrada, su programa recibirá un número N. Este número representa el ancho y la altura del arte ASCII.
Luego recibirá N más líneas de exactamente N caracteres cada una (la nueva línea no se cuenta en este número). El tamaño del arte siempre será un cuadrado, aunque puede tener relleno en forma de espacios para hacerlo cuadrado.
Luego recibirá un número más en una línea final: 90, 180 o 270. Esto representa cuántos grados en el sentido de las agujas del reloj se debe girar la imagen.
Nota: La imagen ingresada solo contendrá caracteres que pueden rotarse en la cantidad correcta. Si la entrada no coincide exactamente con estos requisitos, no se requiere un comportamiento específico.
Como salida, su programa debe imprimir exactamente N líneas de N caracteres, con nuevas líneas después de cada línea. La imagen debe girarse para que cada carácter del original haya sido reemplazado por una versión girada y haya sido movido al lugar correcto en la imagen.
Ejemplos (arte ASCII no muy bonito)
Entrada
5
<- ||
| |V
+->+
|O
<--+
90
Salida
^ +-^
| | |
| V
+-+--
O <-
(Las rotaciones de 90 y 270 no se verán muy bien porque los personajes no son cuadrados)
Entrada
6
+ /\ +
| \ \|
( \/|
\ )
I \ /
:) V $
180
Salida
$ ^ (:
/ \ I
( \
|/\ )
|\ \ |
+ \/ +
Caracteres admitidos requeridos
Para todas las rotaciones (90, 180 y 270), el programa debe poder rotar:
- Espacios,
+
,@
,X
yO
los que nunca cambian V
>
<
^
|
-
y\
/
(rotados por 180 permanecen igual)
Para una rotación de 180 grados, estos caracteres adicionales deben ser compatibles
I
N
Z
%
:
0
=
S
~
$
#
que permanecen igualP
d
,(
)
,[
]
,{
}
,M
W
, Y9
6
v
, que no es un carácter compatible. Supongo que estaba destinado a ser mayúsculaV
. Además, la última línea no está acolchada para tener 5 caracteres de largo.P d, ( ), [ ], { }, M W, and 9 6
¿Se puede girar 90º o 270º?Respuestas:
GolfScript,
79757367 caracteresParece que mis soluciones y las de Peter Taylor están experimentando cierta convergencia. De todos modos, parece que todavía tengo algunos caracteres por delante. :-) Gracias (y +1) tanto a Peter como a la copia por ideas que robé descaradamente.
Este código ignora completamente el tamaño dado en la primera línea, ya que es información redundante. Incluso debería manejar entradas con dimensiones no cuadradas, pero depende mucho de que todas las líneas de entrada se rellenen a la misma longitud. Tratando de rotar los caracteres
P
,d
,(
,)
,[
,]
,{
,}
,M
,W
,9
, o6
por 90 o 270 grados pueden producir una salida inesperada; todos los demás caracteres que no se reasignan explícitamente se conservan sin cambios.PD. Aquí está mi solución original de 79 caracteres:
fuente
C, 336 caracteres
Estoy seguro de que hay margen de mejora.
fuente
javascript (181 caracteres)
Requiere que cada línea se rellene a la longitud dada.
fuente
\n
copia normal, pegar y equilibrar espacios en la primera / última línea y noGolfscript (
80 79 78 7776 caracteres)NB Introducir el "comportamiento indefinido" permitido por una entrada no válida puede producir resultados algo curiosos, debido a los caracteres de marcador de posición (fuera de ASCII) utilizados para ciertos caracteres cuya rotación de 90 grados no está definida. Por ejemplo,
(
se asignaría al punto de código 160, que en ISO-8859-1 y Unicode es un espacio sin interrupciones.fuente