Задний план
Когда я был моложе, меня учили методу рисования странной буквы "S", который я (вместе со своими одноклассниками) нашел захватывающим. Сегодня я заново открыл для себя и, благодаря его формальному подходу к рисованию, подумал, что это может привести к интересной проблеме: P
Рисунок "S"
S можно нарисовать, выполнив следующие простые шаги:
Сначала нарисуйте 2 ряда из трех вертикальных линий примерно так:
| | |
| | |
Затем соедините верхнюю левую линию с нижней средней линией и верхнюю среднюю с нижней правой линией, чтобы получить
| | |
\ \
| | |
Наконец, нарисуйте верх и низ на текущем нарисованном изображении, чтобы оно выглядело как
^
/ \
| | |
\ \
| | |
\ /
v
Как вы можете видеть, это приводит к форме "S". Однако при расширении (рисуя его более чем на 2 строки) получается очень интересный шаблон. Ваша задача воспроизвести этот интересный образец.
задача
Учитывая целое число где n >= 2
, выведите S со n
строками, которые будут из него сделаны. Выходные данные могут быть возвращены из функции, а входные данные могут быть получены стандартными методами. Конечный / ведущий пробел как для общего изображения, так и для каждой строки, в порядке. Тем не менее, пробелы в начале строки должны быть согласованы, чтобы "не прерывался. Вы можете вывести в виде списка строк.
Контрольные примеры
input
output
---
2
^
/ \
| | |
\ \
| | |
\ /
v
---
8
^
/ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ /
v
---
10
^
/ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ /
v
Это код-гольф, поэтому выигрывает самый короткий код! Удачи,
S
в Прохладный S и вызывает бесконечную версию апS Chain
Ответы:
Python 2 , 47 байт
Попробуйте онлайн!
источник
C # (.NET Core) ,
7369666462 байтаБлагодаря Barodus на два байта меньше и похожий на Perl внешний вид. Не думал об использовании int? для нулей.
Попробуйте онлайн!
источник
new string[n+1]
делает? Я никогда не видел это раньше.new string[n+1]
был неким хитрым конструктором строк, а не объявлением массива -.-)Python 3 , 48
56 59 61байтПопробуйте онлайн!
источник
\ \
.05AB1E ,
2726 байтПопробуйте онлайн!
Альтернативная 27-байтовая версия
Попробуйте онлайн!
объяснение
источник
'^…/ \©IF„| ûû„\ û}\®R'v).C
не глядя.Japt ,
342523 байтаПроверьте это онлайн! Выходы в виде массива строк;
-R
добавлен флаг, чтобы присоединиться к новым строкам. (Спасибо @Shaggy)Перваявторая попытка, может быть, это невозможно ...Как это работает
источник
SOGL V0.12 ,
262518 байтовПопробуй здесь!
Использует ту же стратегию, что и ответ ETHproductions на Japt
Объяснение:
источник
push "|" and " "
JavaScript (ES6), 60 байт
Тестовый фрагмент
Показать фрагмент кода
источник
n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'
(с использованием обратныхДревесный уголь ,
272625 байт-1 байт благодаря Карлосу Алехо. -1 байт благодаря ASCII-только.
Попробуйте онлайн! Ссылка на подробную версию. # угольно-многословный-obfucation
источник
\r
: `^ ⸿ / × \ ⸿ | | | ⸿ \ Iθ / ⸿ v`. Подробная версия .\r
как способ получить новые строки в здравом уме. Благодарность!Perl 5 ,
3937 байтПопробуйте онлайн!
Побрил два байта с предложением @DomHastings
источник
На самом деле , 49 байтов
Попробуйте онлайн!
Объяснение:
источник
05AB1E , 38 байт
Попробуйте онлайн!
источник
C (gcc) , 82 байта
Попробуйте онлайн!
источник
C # (.NET Core) ,
1017773 байтаСохранено 24 байта благодаря i cri alltim !
Сохранено 4 байта благодаря Кевину Круйссену !
Попробуйте онлайн!
Как обычно, повторение строки в C # - это боль.
источник
--n>=0
чтобыn-->0
иs+="/\n v";return s;
для тогоreturn s+"/\n v";
чтобы сохранить некоторые байты.Сетчатка , 38 байт
Попробуйте онлайн!
Печатает столбец с начальными и последующими пробелами в каждой строке.
объяснение
Основная экономия байтов достигается за счет исключения пробелов во всех буквенных частях и вставки их в конце. Фигура построена так, что никогда не бывает двух непространственных символов рядом друг с другом, поэтому, если мы просто удалим их все, мы можем почти исправить фигуру, вставив пробел в каждую позицию в конце:
будет выглядеть так:
Это почти правильно, за исключением отступа. В
^
иv
отсутствуют два пробела. Это на самом деле легче исправить, потому что если мы просто вставим явный пробел перед каждым из них, это приведет к двум дополнительным пробелам в конце. Строки с косой чертой сложнее, потому что они требуют только одного дополнительного пробела. Чтобы это исправить, мы вставляем туда символ-заполнитель (x
). Когда мы вставляем пробелы в конце, мы не просто вставляем их для каждого пустого совпадения, но мы необязательно сопоставляем этоx
. Это означает, что вместо вставки пробела передx
,x
сам заменяется. И тогда все равно будет пустое совпадение сразу после добавления ровно одного пробела без изменения чего-либо еще. Итак, что мы хотим настроить это:x
. Это означает, что каждыйx
что даст нам желаемый результат. Итак, вот код:
Преобразовать ввод в унарный.
Преобразуйте каждую
1
в две строки с помощью|||
иx\\
(и ведущего перевода строки).Вставьте первые две строки с
^
иx/\
.Исправьте финал
x\\
, превратив последний\
в/
и добавив строку сv
.Замените каждое
x
или пустое совпадение пробелом.источник
Pyth, 46 байтов
Тестирование.
источник
%" ^\n / %s/\n v"*Q"\\\n| | |\n \
Pyth, 40 байт
Довольно похоже на Стивена Хьюитта, но разработано независимо.
Попробуйте онлайн
объяснение
источник
Pyth,
333231 байтСпасибо мистеру Xcoder за один байт.
Попробуйте онлайн: демонстрация или тестовый набор
источник
Сетчатка , 45 байт
Это довольно простое решение.
Попробуйте онлайн
Если бы вместо этого искусство могло быть проиндексировано 1, оно было бы немного короче (44 байта):
источник
Пип ,
454233 байтаПопробуйте онлайн!
объяснение
Код действительно прост, хотя новые строки затрудняют его чтение. Вот лучший способ увидеть структуру:
Повторяющийся элемент в S-цепи
Возьмите это как буквальную строку и повторите это
a
раз (гдеa
первый аргумент командной строки). Затем добавьте префикс:и добавьте суффикс:
и распечатать.
(Мне нравится, как это выглядело как программа>>.)
источник
MATL ,
474443 байта-3 байта благодаря Джузеппе
Попробуйте онлайн!
источник
' ^' ' / \ 'XK'| | |'XJ`' \ \'JGq@-]KP' v'
составляет 44 байта.Haskell, 53 байта
Попробуйте онлайн!
источник
Excel, 60 байт
источник
PowerShell ,
83, 57 байтПопробуйте онлайн!
За @ AdmBorkBork предложения,
for
с помощью диапазона номеров.;
и комбинированные строки.источник
for
много, используя1..--$args[0]|%{ }
.";"
и дешевле избавиться от них$s
полностью. 57 байт1..$args
возможность. Я не уверен, что правильный этикет на этом сайте. Вносить ли я изменения в свой ответ и кредитовать вас, или вы публикуете свое решение как отдельный ответ?AsciiDots , 88 байт
Попробуйте онлайн!
источник
Желе , 32 байта
Скучный порт решения Lynn's Python .
Попробуйте онлайн!
Объяснение:
источник
На самом деле , 30 байтов
Это работает по тому же принципу, что и ответ Japt от ETHproductions , где дополнительные пробелы добавляются позже, и вся строка разбивается на строки по 5 для неявной печати. Попробуйте онлайн!
Ungolfing
источник
Желе ,
2523 байтаЭто работает по тому же принципу, что и ответ Japt ETHproductions , где дополнительные пробелы добавляются позже, и вся строка разбивается на строки длиной 5 перед печатью. Попробуйте онлайн!
Редактировать: я знал, что есть способ соединить верх и низ S-цепи в гольф. Спасибо Эрику Аутгольферу за -2 байта.
Ungolfing
источник
“\|||\”ẋ“ ^ /“/ v”jKs5Y
Древесный уголь , 25 байт
Попробуйте онлайн! Ссылка на подробную версию кода.
источник
↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
Баш, 67 байт
Попробуйте онлайн
источник
Java 8,
9376 байтПорт @IanH. ответ на C # .NET после того, как я играю в гольф немного больше.
Попробуй это здесь.
источник
string
противvar
части.n->
противn=>
;)