Напишите программу , которая принимает в строку , содержащую только пробелы, переводы строк, а угловые скобки: <
, >
( шевроны ). Выходная строка пробелов, перевод строки, а косая черта: /
, \
( soliduses ) , чьи формы соответствуют входу, но повернута на четверть оборот по часовой стрелке, с колонной пространств , вставленных между каждой строкой исходного входа (для эстетики).
Например, если ввод это:
<>
Выход будет такой:
/\
\/
Если вход это:
><<<>
<><
Выход будет такой:
\/
/\ /\
\/ /\
/\ /\
\/
Если вход это:
>> <<
<> <>
<
><
Выход будет такой:
/\ \/
\/ \/
\/ /\
/\
/\ /\
\/ /\
Обратите внимание, что в двух последних примерах есть один столбец пробелов между исходными входными строками.
Вы можете написать полную программу, которая принимает входные данные любым обычным способом (командная строка, stdin) и печатает выходные данные, или вы можете написать функцию со строковым аргументом, которая печатает или возвращает выходные данные.
Пустые начальные и конечные строки или столбцы пробелов во входных данных не должны присутствовать в выходных данных. Кроме того, может быть любое количество начальных и / или конечных пробелов и / или новых строк в выходных данных в любых местоположениях, при условии, что результирующие формы являются правильными. Другими словами, перевод искусства ascii не имеет значения, только формы и их отношение друг к другу имеют значение .
При желании вы можете предположить, что ввод содержит завершающий перевод строки.
Самый короткий код в байтах побеждает.
Ответы:
CJam, 35 байт
Попробуйте это онлайн здесь
источник
$
трюка он все еще был длиной 37 байт ...$
трюк уже много раз спас мне жизнь;)CJam, 37 байт
Попробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
Python 2, 105 байт
По всем неправильным причинам, это должно быть одним из самых хороших применений, которые у
map(None, ...)
меня были до сих пор. Выходные данные даже дополняют идеальный прямоугольник.Давайте возьмем второй пример:
map(None,*s.split("\n"))
выполняет беднякzip_longest
, давая:Обратите внимание на то, что вторая строка короче первой, поэтому мы получаем
None
в конце. Обычно это было бы проблемой, но по некоторым причинам почти все сопоставимо в Python 2, и в частностиЭто означает, что выражение
1-cmp(c,"<")
возвращается0, 1, 2
для">", "<", None
соответственно, что позволяет нам использовать трюк срезания строки для извлечения одного из"\/", "/\", " "
. Используя это, мы печатаем выходные данные построчно, объединяя группы из 2 символов с пробелами.источник
Scala,
201188180 знаковнота:
это работает только в том случае, если в указанной строке есть все строки одинаковой длины (то есть дополнены пробелами)
объяснение:
Я использую fold с начальным значением кортежа a
Seq[String]
и anInt
(вместо записиSeq.empty[String]
im пишу корочеSeq("")
и.init
после сгиба), сгиб работает с набором строк, каждая строка является строкой в исходном вводе, и каждая строка в два раза. Хитрость заключалась в том, чтобы проверить по модулю символа. так как'<'
значение равно 60, а'>'
значение равно 62, тестирование по модулю 4 даст 0 или 2. поэтому фолд также имеет переворачивание,Int
установленное на 0, и переворачивание между 0 и 2 с помощью2-i
. каждая нечетная строка должна отобразить'>'
в'/'
и'<'
к'\\'
, и каждый даже линия должна отобразить'>'
на'\\
'и'<'
к'/'
. Вот почему я проверяюc%4==i
и ударил 2 зайцев одним выстрелом. складка «перестраивает» исходную последовательность строк в обратном порядке, а затем (после удаления последней строки) я переставляю последовательность (поэтому все строки должны иметь одинаковую длину). из-за вовлеченных последствий мне нужно в_.mkString
каждой строке (ранее столбец), а затемmkString("\n")
для окончательного вывода.источник
Perl - 119
Сначала
@l
присваивается список списков, представляющих символы в каждой строке ввода со строками в обратном порядке. Затем он проходит по столбцам символов, заменяя угловые скобки соответствующими косыми чертами, соединяя элементы с пробелами и печатая соединенные косые черты в виде линии.источник