Напишите программу, которая принимает прямоугольный блок текста, состоящий из X
's .
' и 's', например вот так A
:
......
..XX..
.X..X.
.XXXX.
.X..X.
.X..X.
Выведите представление этой сетки, повернутой на 45 градусов против часовой стрелки, нарисовав косую черту - вперед или назад в зависимости от контекста - везде, где находится X
граница a .
или сторона сетки (с пробелами, заполняющими остальное):
/\/\
/ /\ \
\/ / \
/\/ /\ \
\ / \/
\ \
\ \
\/
Количество конечных и начальных пробелов (и новых строк) не имеет значения, если X
косая черта поддерживает форму 's' на входе. Можно обрезать лишние строки или столбцы .
.
Для ввода / вывода вы можете использовать любую комбинацию параметров stdin / stdout / files / command line. Например, ваш скрипт может взять имя файла X.
шаблона и переписать файл с шаблоном косой черты. Или ваш скрипт может принимать X.
шаблон из stdin строка за строкой (нажатие по d
завершении) и выводить результат в stdout.
Ввод может быть произвольно большим, но вы можете предположить, что он всегда хорошо отформатирован.
Никаких символов, кроме того, / \
символы новой строки не должны быть в любом выводе.
счет
Самый короткий код в байтах побеждает. Используйте https://mothereff.in/byte-counter в качестве счетчика байтов, если вы используете символы не ASCII.
Бонус: минус 50 байт, если вы можете изменить (заменить, а не удалить) один символ в вашей программе, чтобы она выводила наклонную сетку, повернутую на 45 градусов по часовой стрелке , например:
/\/\
/ /\ \
/ \ \/
/ /\ \/\
\/ \ /
/ /
/ /
\/
Входные образцы
XXXXXXXXX
X.......X
X.XXXXX.X
X.X...X.X
X.X.X.X.X
X.X...X.X
X.XXXXX.X
X.......X
XXXXXXXXX
XXX...XXX....XXX...XXX
X..X..X..X..X.....X...
XXX...XXX...X.....X.XX
X.....X.....X.....X..X
X.....X......XXX...XXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...X
X...X...............X...............X...........X...................X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...XXXXX...XXXXX...XXXXX...X...X
X...............X.......X...X...........X...........X...X...X.......X...X
XXXXXXXXX...X...XXXXXXXXX...XXXXXXXXX...XXXXX...X...X...X...XXXXXXXXX...X
X.......X...X...............X...........X...X...X...X...X...........X...X
X...X...XXXXXXXXXXXXX...X...X...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...............X...X...X.......X...........X...........X.......X...X
X...XXXXXXXXXXXXX...XXXXX...XXXXX...X...XXXXX...XXXXXXXXX...X...XXXXX...X
X...........X.......X...X.......X...X.......X...........X...X...........X
X...XXXXX...XXXXX...X...XXXXX...X...XXXXXXXXX...X...X...X...XXXXXXXXXXXXX
X.......X.......X...X...X.......X.......X.......X...X...X.......X.......X
XXXXXXXXXXXXX...X...X...X...XXXXXXXXX...X...XXXXX...X...XXXXX...XXXXX...X
X...........X...X...........X.......X...X.......X...X.......X...........X
X...XXXXX...X...XXXXXXXXX...XXXXX...X...XXXXX...XXXXX...XXXXXXXXXXXXX...X
X...X.......X...........X...........X.......X...X...X...............X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...X...X...XXXXXXXXXXXXX...X...X
X...X...........X...X...X...X...X...........X...............X...X.......X
X...XXXXXXXXX...X...X...X...XXXXX...XXXXXXXXX...XXXXXXXXX...X...XXXXXXXXX
X...X.......X...X...X...........X...........X...X.......X...............X
X...X...XXXXX...XXXXX...XXXXX...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...................X...........X...............X...............X...X
X...XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Вопросы по теме:
Нарисуйте кривую Гильберта, используя косую черту.
Выровняйте горизонтально выровненную прямоугольную форму ASCII по диагонали.
Ответы:
Python 2 -
236, 228, 226, 221, 250, 248,246 - 50 = 196Я добавил дополнительную бонусную функцию, которая переключает направление с часовой стрелки на против часовой стрелки. По сути, вторая строка просто поворачивает ввод на 90 градусов. Для переключения между обеими опциями замените
s=zip(...)
что-то вродеS=zip(...)
(то есть назначьте переменную, которая больше не будет использоваться).источник
s
сB
помощьюs=B+s+B
.MATLAB - 286 - 50 = 236
уменьшенная:
Expanded:
Код может быть дополнительно уменьшен на 6 символов (чтобы связать текущий отрыв), исключив приведение к типу
char
, но это приводит к предупреждению от MATLAB, и я не был уверен, было ли это разрешено.Он может быть уменьшен еще на 13 символов, если требуется, чтобы ввод имел формат «разметки», например
['X..';'.X.';'..X']
, но я не думал, что это было разрешено. В настоящее время сценарий принимает только два числа (размеры строк и столбцов), а затем считывает одну строку символов сетки.бонус
Изменяя
1
в вызовеx = rot90( ..., 1 );
на a0
, трансформация меняется с поворота на 45 ° против часовой стрелки на вращение на 45 ° по часовой стрелке. Фактически, все возможные повороты на 45 ° + n · 90 ° возможны при переходе от этого параметра0
к3
.Примеры выходов:
источник
Perl - 409
Читает из стандартного ввода и печатает на стандартный вывод.
Пример выходов:
источник