Напишите программу (или функцию), которая принимает непустую строку любых печатных символов ASCII .
Выведите (или верните) зигзагообразную цепочку символов в строке, где каждая соседняя пара символов связана:
/
если первый символ находится перед вторым символом в обычном порядке ASCII. напримерB / A
\
если первый символ встречается после второго символа в обычном порядке ASCII. напримерB \ A
-
если первый и второй символы совпадают. напримерA-A
Таким образом, выход для Programming Puzzles & Code Golf
будет
o
/ \
r z-z o e G l
/ \ / \ / \ / \ / \
P o r m-m n u l s & C d f
\ / \ / \ / \ / \ / \ / \ /
g a i g P e
\ /
Если во входной строке есть только один символ, то на выходе будет только этот символ.
Ваша программа должна лечить ,
/
, \
и -
точно так же , как и все другие символы.
например -\//-- \ //-
должен производить:
\
/ \
- /-/
/ \
- --- \ /-/
\ / \ / \
-
\
В выводе не должно быть посторонних символов новой строки, за исключением одного необязательного завершающего символа новой строки. (Обратите внимание, что в приведенном выше примере пустая строка содержит последний пробел в строке и, следовательно, не является посторонним.) В любых строках могут быть конечные пробелы в любом расположении.
Самый короткий код в байтах побеждает.
Еще один пример - вход:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Выход:
9 9 8 6 6
/ \ / \ / \ / \ / \
9 6 8 7 3 3 4 2 4 8 9 8-8
/ \ / \ / \ / \ / \ / \ / \
4 5 2 5 5 2 3-3 3 7 5 2 4 9 9 9-9 7
/ \ / \ / \ / \ / \ / \ / \ / \ / \
3 1 1 3 2 0 1 7 6 3 3 5 8 8 6
\ / \ / \ / \ / \ / \
. 1 1 5 2 9 9 3 7 1 4 6 8 9
\ / \ / \ / \ / \ / \ / \ / \ /
0 0 7 9 5 2 0 0 2 6 9-9 8 5 4 7
\ / \ / \ / \ / \ / \ / \ /
4 4-4 2 8 8 4 2 3 2 7 6
\ / \ / \ / \ /
0 6 8 3 1-1 0
\ / \ /
2 0
'\n'
с шаблоном строки , как этоfor
петли могут быть сильно сжаты. Не тратьте весь блок необходимого кода наi++
. Вместо этого запустите большую часть своегоfor
кода там. Кроме того, вам не нужны скобки вокруг отдельных строк кода.l
- это рассчитывать,s.length*2-1
и вы делаете это дважды. Почему бы не хранить это значение вместо этого?<br>
просто там, так что он отображается в версии HTML; если вы присмотритесь, я вместо этого использую шаблонную строку в фактической записи. Кроме того, это не является обязательным требованием: «Распечатать (или вернуть) ...»Python, 393 байта
Беги как:
z("Zigzag")
источник
JavaScript (ES6), 202
Использование шаблонных строк. Пробелы с отступами и новые строки не учитываются, за исключением последнего символа новой строки внутри обратных кавычек, который является значимым и учитывается.
Обычное примечание: тестовый запуск фрагмента в любом браузере, совместимом с EcmaScript 6 (особенно не Chrome, не MSIE. Я тестировал на Firefox, Safari 9 мог бы пойти)
источник
CJam, 79 байтов
Попробуйте онлайн
Это создает выходной столбец за столбцом и транспонирует результат в конце, чтобы получить выходной ряд за строкой. Это было довольно больно в целом.
Объяснение:
источник
Perl 5,
230214Контрольная работа
источник
К 86
,
Ungolfed:
источник
Рубин, 158
Сохранено 6 байт благодаря гистократу . Спасибо!
источник
->s,*i{
. И если вы заменитеs[0]
наs[/./]
, я думаю, вы можете заменитьs[1..-1]
на$'
.Питон с Numpy: 218 байт
Стоит потратить 19 байтов на импорт numPy.
Golfed:
Ungolfed:
источник