Учитывая непустую строку s с четной длиной и положительное целое число n, представляющее ее высоту, составьте пирамиду, используя следующие правила:
Пирамида должна содержать n непустых строк; в конце допускаются переводы строки. Для каждого 1 <= i <= n i-я строка должна содержать строку, в которой каждый отдельный символ повторяется i раз; abcd повторяется 3 раза, как таковой становится aaabbbcccddd. Каждая строка должна быть центрирована пробелами так, чтобы середина каждой строки была выровнена по вертикали. Пробелы в конце каждой строки разрешены. У вас также может быть до одной новой строки, но нет других пробелов перед первой строкой.
Входная строка не обязательно является палиндромом.
Прецедент
s = 'o-o o-o', n = 10:
o-o o-o
oo--oo oo--oo
ooo---ooo ooo---ooo
oooo----oooo oooo----oooo
ooooo-----ooooo ooooo-----ooooo
oooooo------oooooo oooooo------oooooo
ooooooo-------ooooooo ooooooo-------ooooooo
oooooooo--------oooooooo oooooooo--------oooooooo
ooooooooo---------ooooooooo ooooooooo---------ooooooooo
oooooooooo----------oooooooooo oooooooooo----------oooooooooo
Ответы:
05AB1E , 9 байтов
Попробуйте онлайн!
γ
был, во многом, вдохновлен ответом Аднана; ноS
также будет работать.источник
05AB1E , 11 байт
Использует кодировку 05AB1E . Попробуйте онлайн!
источник
»
объединяет внутренние массивы пробелами. Замена на этоJ
должна работать (и я думаю, что вы должны опубликовать это как другой ответ).Желе ,
1413 байтовПопробуйте онлайн!
Как это работает
источник
C # (.NET Core) ,
139 137 136130 байтПопробуйте онлайн!
Возвращает перечисление
string
s с линиями чертежа. После того, как присоединился, результат выглядит так:источник
(n-i-1)*s.Length/2
. И мне нравятся твои тесты. +1 :)ಠ_ಠ
усиливается~i
эквивалентен-i-1
», поэтому вы можете сохранить байт, изменив(n-i-1)
на(n+~i)
.s=>n=>...
для другого байтаnew string(' '...
на"".PadLeft(...
Чеддер ,
7164 байтаСохранено 7 байт благодаря @ValueInk
Попробуйте онлайн! Я добавлю объяснение немного
объяснение
источник
center
функция, которую вы можете использовать так же, как и я, в своем ответе на Ruby, потому что она потенциально может также сохранить байты.Рубин , 58 байт
Попробуйте онлайн!
источник
Ява 8,
188186185183181173 байта-2 байта (185 → 183) из-за исправления ошибки (
n+1
вместо него выводились строкиn
). Не часто случается, что исправление ошибки сохраняет байты. :)-2 байта (183 → 181) благодаря @ OlivierGrégoire
Объяснение:
Попробуй это здесь.
источник
r="",q=s.format("%"+x+"s",r)
что сохранили 2 байта. Много движения только для двух байтов :(s.format("%"+x+"s",r)
напрямую, я смог сэкономить еще 8 байтов после вашего гольфа. :)JavaScript (ES6), 85 байт
Принимает ввод в синтаксисе карри
(string)(height)
. Включает ведущий перевод строки.демонстрация
Показать фрагмент кода
источник
Древесный уголь , 19 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Нам нужны строки повторяются
1..n
раз. Самый простой способ добиться этого - это цикл от 0 до n, поскольку цикл 0 в основном не работает.Поместите курсор так, чтобы результирующая линия была в центре.
И это то, как просто печатать каждый символ многократно
i
.источник
Python 2 ,
7577 байтПопробуйте онлайн!
источник
center
встроенный? Мне действительно нужно иногда читать документы: Pn-1
строки.9
строки пирамиды, когда ввод10
...SOGL V0.12 , 14 байтов
Попробуй здесь!
источник
∫dI
.Javascript, 105 байт
После нескольких лет отпуска Stretch Maniac возвращается, надеюсь, на этот раз немного более образованным.
источник
s=>n=>[...Array(x=n)].reduce(a=>a+'\n'.padEnd(--x*s.length/2+1)+s.replace(/./g,c=>c.repeat(n-x)),'')
- вам нужно заменить'
s на backticks, а на\n
буквальный перевод строки.Haskell ,
797369 байтПопробуйте онлайн!
источник
..
, вы можете опускатьdiv
:(' '<$[1,3..(n-m)*length s])
.APL (Dyalog) ,
3331 байт2 байта в гольфе благодаря @ZacharyT, удалив ненужные скобки
Попробуйте онлайн!
объяснение
Правый аргумент
⍵
- это строка, а левый аргумент⍺
- это число.источник
⍺-⊢
?SWI Пролог, 398 байт
Это не самое компактное решение (может быть, где-то изобретать велосипед вместо использования встроенных процедур), но оно работает.
Тест:
Объяснение:
w и s пишет правильное количество ведущих пробелов:
d управляет «дублированием» символы и е является его рекурсивным объектом:
a и l добавить к результату (возможно, существует встроенная процедура?):
o создает вывод:
и, наконец, p является основным методом :
источник
Japt ,
20 + 1 = 2119 + 1 = 2014 байтовВыводит массив строк - добавьте 2 байта, если это не разрешено.
Попробуй это
объяснение
источник
SpUl
чтобы ... ждать, фигу :( Вы можете сохранить байт , хотя путем замены(V-X
сXnV
, если я не ошибаюсь.n
; спасибо @ETHproductions.PHP, 113 байт:
Запустите
php -nr '<code>' '<string>' <N>
или протестируйте его онлайн .сломать
источник
CJam , 36 байт
Попробуйте онлайн!
источник
T-SQL, 223 байта
Ввод осуществляется с уже существующей таблицей т с колонкой s и п , в соответствии с нашими стандартами IO .
Объяснять особо нечего, это довольно простой вложенный цикл, использующий
@i
для строк и@j
для обхода символов строки, которые являютсяREPLICATED
@i
временами:источник
R ,
12595 байтовПопробуйте онлайн!
Объяснение:
Это довольно просто, разбивая строку и повторяя элементы
i
каждый разrep(s,e=i)
(e
сокращенноeach
), пока мы выполняем цикл. Сложная часть естьrep('',(n-i)/2*length(s)+1)
. Это строка заполнения, но это куча пустых строк. Мне нужно добавить 1, потому что в противном случае получаетсяcharacter(0)
вектор нулевой длины,cat
который, по умолчанию разделяет его элементы пробелами, смещает последнюю строку.источник
Mathematica, 97 байт
вход
источник
Tcl,
143142141138 байтТест:
Примечание: «cd» в конце процедуры не позволяет распечатать результат времени ниже пирамиды, но меняет текущий каталог - побочный эффект, который явно не запрещен.
Спасибо sergiol за подсказку для сохранения одного байта .... и другую подсказку для сохранения еще одного байта.
Благодаря аспекту (в чате tcl) еще 3 байта сохранены!
источник
Swift, 232 байта
Возможно, могло бы быть и лучше, но у меня мало времени на рефакторинг.
В этом ответе используется Swift 4, поэтому его нельзя запустить в Интернете.
источник
LOGO,
9795 байтПопробуйте код на FMSLogo интерпретаторе.
Определите функцию,
f
которая принимает два входа,:s
и:n
затем напечатайте результат.источник
Java 8,
164148 байтОбъяснение:
источник
Ржавчина, 107 байт
ссылка на манеж
Определяет анонимную функцию, которая принимает строковый фрагмент и номер, печатая нужный шаблон в стандартный вывод. Предполагается, что фрагмент строки содержит только символы ASCII, но в запросе никогда не указывается, что необходима полная поддержка юникода. Для корректной работы с юникодом также потребуется 117 байт:
Объяснение довольно простое:
источник
SOGL V0.12 , 8 байт
Попробуй здесь!
Объяснение:
Мне не хотелось обновлять мой старый ответ здесь, так как он использует другой метод и использует новую (не сложную) функцию -
╚
источник
Python 2 ,
7977 байтПопробуйте онлайн!
Редактировать: -2 байта любезно предоставлено @FlipTack
источник
[i*(n-m)for i in s]
, так как.join
способен взять генератор, который должен иметь два байта.Excel VBA, 98 байт
Функция анонимного непосредственного окна VBE, которая принимает входные данные в виде строки из
[A1]
и из int, а[B1]
затем выводит их в непосредственное окно VBEисточник