Вот ASCII-искусство пересечения с 4 путями:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
(Обратите внимание, что горизонтальные дороги имеют 3 строки в высоту, а вертикальные дороги - 5 столбцов. Это из эстетических соображений из-за прямоугольного шрифта.)
Ваша задача - создать это искусство ASCII. Однако, как я уверен, вы все знаете, не на каждом перекрестке есть дорога, которая движется в каждом направлении. Это конкретное пересечение идет NESW
, но некоторые пересечения могут идти, например NW
:
| | |
| |
| | |
| |
| | |
-----+-----+
| |
- - -| |
| |
-----+-----+
Или это может пойти SWE
:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
Или это может даже пойти E
, только одно направление (хотя вы вряд ли можете назвать это пересечением , но постарайтесь не быть чрезмерно педантичным):
+-----+-----
| |
| |- - -
| |
+-----+-----
Вам нужно написать программу или функцию, которая может легко генерировать любую из этих комбинаций. Более конкретно, ваша задача состоит в том, чтобы написать программу или функцию, которая принимает строку направлений, состоящую из NESW
входных данных, и выводит или возвращает это искусство ASCII пересечения с дорогами, указывающими в этих направлениях. Эти направления могут появляться в любом порядке, но вход не будет содержать любые символы , за исключением N
, E
, S
или W
. Если хотите, вы можете запросить ввод данных в нижнем регистре, но вы должны указать это в своем ответе. Вы также можете предположить, что все входные данные будут содержать хотя бы одно направление.
В последнем примере были пробелы в каждой строке, потому что на запад нет дороги. Если у вас нет дороги, ведущей на запад, эти пробелы не обязательны. Это:
+-----+-----
| |
| |- - -
| |
+-----+-----
Также будет приемлемый вывод. Точно так же, если N
или S
ушел, пустые строки там не являются обязательными. Разрешается одна конечная новая строка, а конечные пробелы допускаются, если результат визуально одинаков.
Вы можете принимать ввод и вывод в любом приемлемом формате, таком как STDIN / STDOUT, аргументы командной строки, файлы, аргументы функций / возвращаемые значения и т. Д.
Как обычно, это код-гольф , поэтому постарайтесь получить максимально короткий ответ на любом языке, который вы используете!
Образец ввода-вывода:
NESW:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
NS:
| | |
| |
| | |
| |
| | |
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
S:
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
EW:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
SE:
+-----+-----
| |
| |- - -
| |
+-----+-----
| | |
| |
| | |
| |
| | |
E
)? Разрешены ли начальные и конечные пустые строки, если нетN
илиS
?Ответы:
Javascript (ES6),
190187185 байтЭто попытка построить этот художественный символ ASCII для каждого символа путем итерации матрицы 17x15. Поэтому выход всегда состоит из 15 рядов из 17 столбцов с пересечением дорог по центру посередине.
Разоблаченный и прокомментированный
матрица
Ниже приведена матрица с координатами, используемыми в коде.
демонстрация
Следующий фрагмент позволяет попробовать любую конфигурацию дороги.
источник
PowerShell v3 +,
226204192191 байтПринимает ввод как строку заглавных букв, явно преобразует ее в
char
массив. Создает сегмент «Север» с помощью цикла от0
до4
. Каждый цикл создает строку из 5 пробелов (еслиW
/87
присутствует во входных данных), сохраняет ее в$x
, затем либо| |
(хранит в$w
), либо| | |
, в зависимости от того, четны мы или нет. Этот массив строк сохраняется$n
и умножается наN
/78
является-in
входом. Это будет определять,$n
находится ли на конвейере или нет.Затем мы строим среднюю часть. Первая строка
$z
- это «верх» маршрута восток-запад, использующий ту же логику дляW
иE
/69
и заключенный в скобки, чтобы также разместить копию на конвейере. Мы используем вспомогательную переменную$y
для сохранения байта на-----
разделах.Следующая строка - это просто соответствующее количество пробелов (т. Е.
$x
) Конкатенированных строк с трубами правильной ширины (т. Е.$w
). Затем, в середине полосатой линии, сноваW
иE
логики и$w
заполнении в середине. Потом$x+$w
и$z
снова.Наконец, поскольку южная дорога совпадает с северной, включите
$n
трубопровод, еслиS
/83
есть-in
$a
.Все эти результирующие строки собираются из конвейера и вывод неявен в конце выполнения программы. Злоупотребляет
Write-Output
разделителем по умолчанию для вставки новой строки между элементами.Примеры
источник
C ++
317280276 байтUngolfed:
источник
strchr
сindex
будет сбрить несколько больше. Определитеx
иy
вместе наружныеfor
петли.Python 3, 186 байт
Анонимная лямбда, называемая строкой указаний, например, «NWS»
Объяснение следовать
источник
сед 234
Он просто строит разные части, если в строке есть правильный символ.
Использует
@
вместо\n
и\n
возвращается в конце.Северная и южная части идентичны, поэтому я использую то, что в основном является функцией для их вставки.
источник
Пакетный,
351344341 байтПримечание. Строка
set t=
заканчивается пятью пробелами, а строкаif "%i:e=%"=="%i%" set r=
заканчивается пробелами. Принимает регистронезависимый ввод из STDIN. Редактировать: Сохранение 7 байтов путем исключенияd
переменной. Сохранено 3 байта с помощьюfor
цикла для печати средней части. Если вместо этого мне разрешены отдельные параметры командной строки, то для326319316 байт:источник
Python 2, 290 байт
источник
m,t,s=[],[],[]
может бытьm=t=s=[]
.range(5)
может быть сохранен в переменную и использован дважды, вместо вводаrange(5)
дважды.m
?t=s=[]
все испортилосьm=t=s=[]
они указывают на одну и ту же ссылку.GolfScript, 154 байта
Попробуйте онлайн!
источник
Pyth (
385380373353 байта)Golfed:
Ungolfed:
Конечно, если есть какие-либо улучшения, пожалуйста, сообщите мне.
Сохранено 5 байтов благодаря Maltysen
Вы можете попробовать это здесь
источник
K
вместо,N
а затем при назначении в первый раз, вам не нужно использовать=
, сохраняя вам байтN[:-1]
этоP
Groovy (274 байта)
Ungolfed
Golfed
Попробуйте это: https://groovyconsole.appspot.com/script/5082600544665600
источник