CJam, 32 30 29 28 байт
ri_"/\ /"2/f*)@,\f>+_z..e>N*
Проверьте это здесь.
Я пытался помочь Рето в гольф его ответом CJam, но в итоге нашел решение, которое не имело ничего общего с его, поэтому я решил, что я мог бы также опубликовать его сам.
объяснение
Это использует симметрию вывода. В частности, тот факт, что вывод совпадает с его транспонирования.
Сначала мы генерируем первые N+1
строки, но без левого края:
ri e# Read input and convert to integer N.
_ e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f* e# Repeat each of the two strings N times. That gives the first two rows.
) e# Detach the second row.
@, e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f> e# For each element i in that range, discard the first i characters of
e# the second row.
+ e# Add all those lines back to the first row.
Теперь у нас есть массив строк, представляющих следующую сетку:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
Транспонирование это выглядит так:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
Вместе у них есть все непробельные символы, которые нам нужны. Теперь мы можем использовать рад совет Денниса, чтобы объединить две сетки ASCII в одну, взяв максимум каждой соответствующей пары символов. Во всех позициях, где две сетки различаются, одна будет иметь пробел (или вообще ничего), а другая будет иметь символ, который мы ищем. Когда один список в векторизованной операции длиннее другого, дополнительные элементы более длинного списка просто сохраняются, и это именно то, что мы ищем. В других случаях непробельный символ всегда будет максимальным из двух символов:
_z e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N* e# Join the lines by linefeed characters.
;
с.Python 2, 80 байт
источник
Mathematica,
123122121 байтВозможно, будет дальше в гольф.
источник
Java - 141 байт
Не самое короткое, конечно, но приятно иметь решение на Java:
Ungolfed
вход
Выход
источник
Pyth, 30 байт
Попробуй это здесь .
источник
JavaScript,
128125123114 байтДе-гольф (также преобразованный в ES5) + демо:
источник
Рубин, 50 байтов
В тестовой программе:
Цикл печатает 2 строки для каждой итерации от i = 0 до i = n-1.
За вторым рядом всегда
'\'
следуют n случаев'/ '
.Первая строка такая же, как и вторая строка предыдущей итерации, но с
'\'
отсутствующей (поэтому мы сохраняем это значениеs
при печати второй строки предыдущей итерации).Единственным исключением является нулевая итерация, которая обрабатывается путем инициализации
s
в'/\'*n
.источник
Javascript (ES6),
10710410098979190 байтПервый пост здесь!
Раньше использовал, но теперь использует , аналогично Ruby .
Array(len)
.
join(str)
String.repeat(len)
operator*(str,len)
Ungolfed:
Спасибо:
107 => 104 байта: @insertusernamehere
97 => 90 байтов: @ user81655
источник
p=>{s=Array(++p).join('/\\')+'\n';for(i=p;i>2;i--,s+='\\'+o+o)o=Array(i).join('/ ')+'\n';return s+'\\/'}
.repeat
метод.Python 2, 66 байт
Довольно просто. Значение
n
- это число/
в строке, котороеb
указывает, начинается ли строка с\
. Значениеb
чередуется между 0 и 1 иn
уменьшается с каждым вторым шагом. Безобразное условие прекращения прекращается, когдаn=1, b=0
. Альтернативаexec
цикла может возникнуть необходимость в большом количестве побегов"'\\\\'"
.Я был удивлен, обнаружив, что этот подход короче, чем использование одного числа
k=2*n+b
. Это 68 байт:Альтернативная стратегия позволит избежать отдельного
print
для верхней строчки, но я не видел краткого пути.источник
Минколанг 0.14 , 46 байтов
Я уверен, что это может быть игра в гольф, но сейчас 4 часа утра, и мне нужно идти спать.
Попробуй это здесь.
объяснение
источник
Пакет, 121 байт
Или, если унарный является приемлемым, 107 байтов:
Вызвать с соответствующим числом 1 с.
источник
Matlab, 122 байта
источник
Haskell, 99 байт
Два решения одинаковой длины.
Вызов
f
.а также
источник
Хаскелл, 96
Это на самом деле не является конкурентоспособным по сравнению с существующим решением на Haskell, потому что оно сохраняет 5 символов, возвращая вместо печати строку. Я публикую его только для того, чтобы показать, как подход с бесконечным шаблоном сравнивается с подходом на основе координат. Заметки:
p
может быть встроен без изменения длины.[t n l|(n,l)<-...]
сохраняет 2 за(map(uncurry t)$...)
.источник
Цейлон, 100
Это показывает «список именованных аргументов» для
join
(без именованных аргументов, но вместо итеративного понимания) и несколько вариантов использованияString.repeat
(одно из которых фактически означает «включать только для нечетных»).i
»).отформатирован:
источник
PHP, 117 байт
Предполагается, что уведомления отключены, а ввод взят из командной строки.
Ungolfed:
Комментарии приветствуются :)
источник