Из всех символов ASCII легко сказать, что некоторые из них образуют группы, которые являются вращениями одного и того же основного символа. Например, V > ^ <
. Это дает возможность создавать искусство ASCII, которое можно поворачивать на кратные 90 градусов и при этом оставаться искусством ASCII.
Соревнование
Ваша цель - сыграть в гольф программу, которая принимает искусство ASCII и количество градусов, чтобы повернуть его из STDIN, и распечатать повернутое искусство ASCII в STDOUT.
В первой строке ввода ваша программа получит число N. Это число представляет ширину и высоту рисунка ASCII.
Затем вы получите еще N строк ровно по N символов в каждой (новая строка не учитывается в этом числе). Размер искусства всегда будет квадратным, хотя он может иметь отступы в форме пробелов, чтобы сделать его квадратным.
Затем в последней строке вы получите еще одно число: 90, 180 или 270. Это показывает, на сколько градусов по часовой стрелке должно быть повернуто изображение.
Примечание. Введенное изображение будет содержать только символы, которые можно повернуть на правильную величину. Если входные данные не соответствуют этим требованиям точно, никакого конкретного поведения не требуется.
В качестве вывода ваша программа должна напечатать ровно N строк по N символов, с символами новой строки после каждой строки. Изображение должно быть повернуто так, чтобы каждый символ в оригинале был заменен повернутой версией и был перемещен в правильное место на изображении.
Примеры (не очень красивый ASCII art)
вход
5
<- ||
| |V
+->+
|O
<--+
90
Выход
^ +-^
| | |
| V
+-+--
O <-
(Повороты на 90 и 270 выглядят не очень хорошо, потому что символы не квадратные)
вход
6
+ /\ +
| \ \|
( \/|
\ )
I \ /
:) V $
180
Выход
$ ^ (:
/ \ I
( \
|/\ )
|\ \ |
+ \/ +
Обязательные поддерживаемые символы
Для всех вращений (90, 180 и 270) программа должна иметь возможность вращаться:
- Пробелы,
+
,@
,X
иO
которые никогда не изменится V
>
<
^
|
-
и\
/
(повернутый на 180 они остаются прежними)
Для вращения на 180 градусов эти дополнительные символы должны поддерживаться
I
N
Z
%
:
0
=
S
~
$
#
которые остаются прежнимиP
d
,(
)
,[
]
,{
}
,M
W
, И9
6
v
, которые не являются поддерживаемыми символами. Я предполагаю, что это должно было быть в верхнем регистреV
. Кроме того, последняя строка в нем не дополняется до 5 символов.P d, ( ), [ ], { }, M W, and 9 6
можно ли повернуть на 90º или 270º?Ответы:
GolfScript,
79757367 символовПохоже, решения моего и Питера Тейлора испытывают определенную конвергенцию. Во всяком случае, похоже, у меня еще несколько символов впереди. :-) Спасибо (и +1) и Питеру, и копировать за идеи, которые я бессовестно украл.
Этот код полностью игнорирует размер, указанный в первой строке, поскольку это избыточная информация. Он должен даже обрабатывать вводы с неквадратными размерами, но это очень сильно зависит от того, все ли строки ввода дополняются до одинаковой длины. Попытка повернуть символы
P
,d
,(
,)
,[
,]
,{
,}
,M
,W
,9
, или6
на 90 или 270 градусов может привести к непредвиденному выход; все остальные символы, которые не были явно переназначены, остаются без изменений.Ps. Вот мое оригинальное решение на 79 символов:
источник
C 336 символов
Я уверен, что есть место для улучшения.
источник
JavaScript (181 символ)
Требуется, чтобы каждая строка была дополнена до заданной длины.
источник
\n
обычным копированием, вставкой и балансировкой пробелов в первую / последнюю строки, но не смог заставить его работатьGolfscript (
80 79 78 7776 символов)NB. Ввод «неопределенного поведения», разрешенного неправильным вводом, может привести к несколько любопытным выводам из-за символов-заполнителей (вне ASCII), используемых для определенных символов, поворот которых на 90 градусов не определен. Например,
(
будет сопоставлен кодовой точке 160, которая в ISO-8859-1 и Unicode представляет собой неразрывный пробел.источник