Biorąc pod uwagę niepuste ciągi o parzystej długości i dodatnią liczbę całkowitą n reprezentującą jego wysokość, utwórz piramidę, stosując następujące reguły:
Piramida powinna zawierać n niepustych linii; końcowe znaki nowej linii są dozwolone. Dla każdego 1 <= i <= n, i-ty wiersz powinien zawierać ciąg z każdym pojedynczym znakiem powtarzanym w miejscu i razy; abcd powtórzone 3 razy jako takie staje się aaabbbcccddd. Każda linia powinna być wyśrodkowana ze spacjami, tak aby środek każdej linii był wyrównany w pionie. Końcowe spacje na końcu każdej linii są dozwolone. Możesz również mieć do jednego wiodącego nowego wiersza, ale nie ma innych białych znaków przed pierwszą linią.
Ciąg wejściowy nie jest gwarantowany jako palindrom.
Przypadek testowy
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
Odpowiedzi:
05AB1E , 9 bajtów
Wypróbuj online!
γ
został w krótkim czasie zainspirowany odpowiedzią Adnana; aleS
też by działało.źródło
05AB1E , 11 bajtów
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
»
łączy wewnętrzne tablice spacjami. Zastąpienie go przezJ
powinno działać (i myślę, że powinieneś opublikować to jako inną odpowiedź).Galaretka ,
1413 bajtówWypróbuj online!
Jak to działa
źródło
C # (.NET Core) ,
139 137 136130 bajtówWypróbuj online!
Zwraca wyliczenie
string
s z liniami rysunku. Po dołączeniu wynik wygląda następująco:źródło
(n-i-1)*s.Length/2
. I podoba mi się twoje przypadki testowe. +1 :)ಠ_ಠ
nasila się~i
jest równoważne z-i-1
”, więc możesz zapisać bajt, zmieniając(n-i-1)
na(n+~i)
.s=>n=>...
dla kolejnego bajtunew string(' '...
z"".PadLeft(...
Cheddar ,
7164 bajtówZaoszczędź 7 bajtów dzięki @ValueInk
Wypróbuj online! Za chwilę dodam wyjaśnienie
Wyjaśnienie
źródło
center
funkcję, której możesz używać tak jak ja w mojej odpowiedzi Ruby, ponieważ może to również potencjalnie oszczędzać bajty.Rubinowy , 58 bajtów
Wypróbuj online!
źródło
Java 8,
188186185183181173 bajtów-2 bajty (185 → 183) z powodu poprawki błędu (
n+1
zamiast tego wyświetlał wierszen
). Nie często zdarza się, że poprawka błędu zapisuje bajty. :)-2 bajty (183 → 181) dzięki @ OlivierGrégoire
Wyjaśnienie:
Wypróbuj tutaj.
źródło
r="",q=s.format("%"+x+"s",r)
zapisanie 2 bajtów. Dużo ruchu za dwa bajty :(s.format("%"+x+"s",r)
bezpośrednio, byłem w stanie zaoszczędzić 8 dodatkowych bajtów po twoim golfie. :)JavaScript (ES6), 85 bajtów
Pobiera dane wejściowe w składni curry
(string)(height)
. Zawiera wiodącą nową linię.Próbny
Pokaż fragment kodu
źródło
Węgiel drzewny , 19 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Potrzebujemy powtarzających się wierszy
1..n
. Najłatwiejszym sposobem na osiągnięcie tego jest zapętlenie od 0 do n, ponieważ pętla 0 to w zasadzie brak operacji.Ustaw kursor, aby wynikowa linia była wyśrodkowana.
I właśnie tak proste
i
jest powtarzanie każdego znaku wielokrotnie .źródło
Python 2 ,
7577 bajtówWypróbuj online!
źródło
center
wbudowany? Naprawdę muszę czasami czytać dokumenty: Pn-1
wiersze.9
linie piramidy, gdy dane wejściowe są10
...SOGL V0.12 , 14 bajtów
Wypróbuj tutaj!
źródło
∫dI
.JavaScript, 105 bajtów
Po kilku latach przerwy Stretch Maniac powraca, tym razem nieco lepiej wykształcony.
źródło
s=>n=>[...Array(x=n)].reduce(a=>a+'\n'.padEnd(--x*s.length/2+1)+s.replace(/./g,c=>c.repeat(n-x)),'')
- musisz zastąpić'
s odwrotnymi literami i\n
dosłownie nową linią.Haskell ,
797369 bajtówWypróbuj online!
źródło
..
, można upuścićdiv
:(' '<$[1,3..(n-m)*length s])
.APL (Dyalog) ,
3331 bajtów2 bajty w golfa dzięki @ZacharyT poprzez usunięcie niepotrzebnych nawiasów
Wypróbuj online!
Wyjaśnienie
Prawym argumentem
⍵
jest ciąg, a lewym argumentem⍺
jest liczba.źródło
⍺-⊢
?SWI Prolog, 398 bajtów
Nie jest to najbardziej kompaktowe rozwiązanie (być może gdzieś na nowo wymyśla koło zamiast korzystać z wbudowanych procedur), ale wydaje się działać.
Test:
Wyjaśnienie:
w i s zapisuje odpowiednią liczbę wiodących spacji:
d zarządza „powielaniem” znaków ie jest funkcją rekurencyjną:
a i l dołączają do wyniku (może istnieje wbudowana procedura?):
o tworzy wynik:
i na koniec p jest główną metodą :
źródło
Japt ,
20 + 1 = 2119 + 1 = 2014 bajtówZwraca tablicę wierszy - dodaj 2 bajty, jeśli nie jest to dozwolone.
Sprawdź to
Wyjaśnienie
źródło
SpUl
na ... poczekaj, nieważne :( Możesz jednak zaoszczędzić bajt, zastępując(V-X
goXnV
, jeśli się nie mylę.n
; dzięki @ETHproductions.PHP, 113 bajtów:
Uruchom go
php -nr '<code>' '<string>' <N>
lub przetestuj online .awaria
źródło
CJam , 36 bajtów
Wypróbuj online!
źródło
T-SQL, 223 bajty
Wejście jest przez istniejący wcześniej tabeli T z kolumny s i n , zgodnie z naszymi standardami IO .
Niewiele do wyjaśnienia, jest to dość prosta zagnieżdżona pętla, wykorzystująca
@i
wiersze i@j
przechodzące przez znaki ciągu, które sąREPLICATED
@i
czasami:źródło
R ,
12595 bajtówWypróbuj online!
Wyjaśnienie:
To całkiem proste, dzielenie łańcucha i powtarzanie elementów
i
razy każdyrep(s,e=i)
(e
jest skrótem odeach
) podczas pętli. Trudna część jestrep('',(n-i)/2*length(s)+1)
. To jest łańcuch wypełniający, ale jest to zbiór pustych łańcuchów. Muszę dodać 1, ponieważ w przeciwnym razie wynikiem jestcharacter(0)
wektor o zerowej długości icat
, który domyślnie oddziela swoje elementy spacjami, nie wyrównuje linii końcowej.źródło
Mathematica, 97 bajtów
wkład
źródło
Tcl,
143142141 141138 bajtówTest:
Uwaga: „cd” na końcu procedury zapobiega wydrukowaniu wyniku czasu poniżej piramidy, ale zmienia bieżący katalog - efekt uboczny, który nie jest wyraźnie zabroniony.
Dzięki sergiol za podpowiedź, aby uratować jeden bajt .... i kolejną podpowiedź, aby uratować jeszcze jeden bajt.
Dzięki aspektowi (na czacie tcl) zapisano kolejne 3 bajty!
źródło
Szybki, 232 bajty
Prawdopodobnie mogłoby być lepiej, ale nie mam dużo czasu na refaktoryzację.
Ta odpowiedź używa Swift 4, więc nie można jej obecnie uruchomić online.
źródło
LOGO,
9795 bajtówWypróbuj kod w interpretatorze FMSLogo.
Zdefiniuj funkcję,
f
która pobiera dwa dane wejściowe,:s
a:n
następnie wydrukuj wynik.źródło
Java 8,
164148 bajtówWyjaśnienie:
źródło
Rdza, 107 bajtów
link do kojec
Definiuje anonimową funkcję, która pobiera ciąg i liczbę ciągów, wypisując pożądany wzór na standardowe wyjście. Zakłada się, że wycinek ciągu zawiera tylko znaki ASCII, ale wyzwanie nigdy nie określa, że pełna obsługa Unicode jest konieczna. Aby być poprawnym również dla Unicode, wymagałby 117 bajtów:
Wyjaśnienie jest raczej proste:
źródło
SOGL V0.12 , 8 bajtów
Wypróbuj tutaj!
Wyjaśnienie:
Nie miałem ochoty aktualizować mojej starej odpowiedzi tutaj, ponieważ używa ona innej metody i wykorzystuje nową funkcję (er niż wyzwanie) -
╚
źródło
Python 2 ,
7977 bajtówWypróbuj online!
Edycja: -2 bajty dzięki uprzejmości @FlipTack
źródło
[i*(n-m)for i in s]
, ponieważ.join
jest on w stanie zabrać generator, który powinien zaoszczędzić dwa bajty.Excel VBA, 98 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe jako ciąg od
[A1]
i[B1]
następnie odtąd przechodzi do bezpośredniego okna VBEźródło