17
2
Out of all of the ASCII characters, it is easy to tell that some of them form groups that are rotations of the same basic character. For example, V > ^ <
. This allows the possibility to construct ASCII art that can be rotated by multiples of 90 degrees and still remain ASCII art.
The Challenge
Your goal is to golf a program that accepts ASCII art and the number of degrees to rotate it from STDIN, and prints the rotated ASCII art to STDOUT.
On the first line of input, your program will receive a number N. This number represents the width and height of the ASCII art.
You will then receive N more lines of exactly N characters each (the newline is not counted in this number). The size of the art will always be a square, although it may have padding in the form of spaces to make it a square.
You will then receive one more number on a final line: 90, 180, or 270. This represents how many degrees clockwise the picture should be rotated.
Note: The inputted image will only contain characters that can be rotated by the correct amount. If the input does not match these requirements exactly, no specific behavior is required.
As output, your program should print exactly N lines of N characters, with newlines after each line. The image should be rotated so that each character in the original has been replaced by a rotated version and has been moved to the correct place in the image.
Examples (not very beautiful ASCII art)
Input
5
<- ||
| |V
+->+
|O
<--+
90
Output
^ +-^
| | |
| V
+-+--
O <-
(Rotations by 90 and 270 won't look very good because the characters are not squares)
Input
6
+ /\ +
| \ \|
( \/|
\ )
I \ /
:) V $
180
Output
$ ^ (:
/ \ I
( \
|/\ )
|\ \ |
+ \/ +
Required Supported Characters
For all rotations (90, 180, and 270), the program should be able to rotate:
- Spaces,
+
,@
,X
andO
which never change V
>
<
^
|
-
and\
/
(rotated by 180 they stay the same)
For 180 degree rotation, these additional characters must be supported
I
N
Z
%
:
0
=
S
~
$
#
which stay the sameP
d
,(
)
,[
]
,{
}
,M
W
, and9
6
Your first example contains the lowercase
v
, which is not a supported character. I assume it was meant to be an uppercaseV
. Also, the last line in it is not padded to be 5 chars long. – Ilmari Karonen – 2012-03-19T17:23:38.877@IlmariKaronen Good catch. It's fixed now. – PhiNotPi – 2012-03-19T20:35:18.407
P d, ( ), [ ], { }, M W, and 9 6
can ever be turned 90º or 270º? – ajax333221 – 2012-03-20T22:04:16.730No, the art will only contain characters that are designated to be able to rotate the correct amount. The last two bullets list characters can be rotated by 180º only. Your program will not be asked to rotate these by any other amount. – PhiNotPi – 2012-03-20T22:09:12.103