Wyjmij piramidę (lub autostradę)

39

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
HyperNeutrino
źródło
1
Sandbox Post utworzony przez użytkownika user42649, który był moim kontem do momentu jego usunięcia.
HyperNeutrino
Czy wyjście funkcji dla tego pytania może być listą ciągów znaków, z których każdy reprezentuje linię, czy też powinny być połączone znakami nowej linii?
notjagan
7
Wyjmij piramidę Na pewno masz na myśli autostradę !
Luis Mendo
Wygląda jak piramida aztecka!
QBrute
3
@QBrute Na. Został wykonany przez Goa'ulda :)
theblitz

Odpowiedzi:

12

05AB1E , 9 bajtów

γ².D)ƶJ.C

Wypróbuj online!


γzostał w krótkim czasie zainspirowany odpowiedzią Adnana; ale Steż by działało.


γ          # Split into runs.    | ['0','-','0']
 ².D)      # Push n times.       | [['0','-','0'],['0','-','0'],['0','-','0']]
     ƶ     # Lift by index.      | [['0','-','0'],['00','---','00'],['000','---','000']]
      J    # Inner join.         | ['0-0','00--00','000---000']
       .C  # Center.             | Expected output.
Urna Magicznej Ośmiornicy
źródło
Nie mogę uwierzyć, że ktoś tak naprawdę ocenił twój błędny post: /
Jonathan Allan
1
@JonathanAllan częstotliwość moich możliwych do uniknięcia błędów zasługuje w pewnym stopniu na negatywność.
Magic Octopus Urn
12

05AB1E , 11 bajtów

F²γN>×J}».C

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!

Adnan
źródło
Zaczyna działać funky z wejściami powyżej 168. w przeciwnym razie świetnie!
tuskiomi
@carusocomputing »łączy wewnętrzne tablice spacjami. Zastąpienie go przez Jpowinno działać (i myślę, że powinieneś opublikować to jako inną odpowiedź).
Adnan
Ach! Czy zawsze tak było? Jeśli tak, spoko, jeśli nie, musiałem tego przegapić. Dzięki, zrobię.
Magic Octopus Urn
8

Galaretka , 14 13 bajtów

LH×Ḷ}Ṛ⁶ẋżxЀY

Wypróbuj online!

Jak to działa

LH×Ḷ}Ṛ⁶ẋżxЀY  Main link. Arguments: s (string), n (integer)

L              Get the length l of s.
 H             Halve it, yielding l/2.
   Ḷ}          Unlength right; yield [0, ... n-1].
  ×            Compute [0, l/2, ..., l(n-1)/2].
     Ṛ         Reverse; yield [l(n-1)/2, ..., l/2, 0].
      ⁶ẋ       Space repeat; create string of that many spaces.
         xЀ   Repeat in-place each; repeat the individual characters of s
               1, ..., n times, yielding an array of n strings.
        ż      Zipwith; pair the k-th string of spaces with the k-th string of 
               repeated characters of s.
            Y  Sepatate the resulting pairs by linefeeds.
Dennis
źródło
8

C # (.NET Core) , 139 137 136 130 bajtów

using System.Linq;s=>n=>Enumerable.Range(0,n).Select(i=>"".PadLeft((n+~i)*s.Length/2)+string.Concat(s.Select(c=>new string(c,i))))

Wypróbuj online!

Zwraca wyliczenie strings z liniami rysunku. Po dołączeniu wynik wygląda następująco:

                        _  _
                    ಠಠ__ಠಠ    ಠಠ__ಠಠ
                ಠಠಠ___ಠಠಠ      ಠಠಠ___ಠಠಠ
            ಠಠಠಠ____ಠಠಠಠ        ಠಠಠಠ____ಠಠಠಠ
        ಠಠಠಠಠ_____ಠಠಠಠಠ          ಠಠಠಠಠ_____ಠಠಠಠಠ
    ಠಠಠಠಠಠ______ಠಠಠಠಠಠ            ಠಠಠಠಠಠ______ಠಠಠಠಠಠ
ಠಠಠಠಠಠಠ_______ಠಠಠಠಠಠಠ              ಠಠಠಠಠಠಠ_______ಠಠಠಠಠಠಠ
  • 2 bajty zapisane dzięki Kevin Cruijssen!
  • 1 bajt zapisany dzięki Value Ink!
  • 6 bajtów zapisanych dzięki LiefdeWen!
Charlie
źródło
1
Możesz zapisać dwa bajty, usuwając nawias w (n-i-1)*s.Length/2. I podoba mi się twoje przypadki testowe. +1 :)
Kevin Cruijssen
10
ಠ_ಠnasila się
Magic Octopus Urn
1
Obowiązkowe „ ~ijest równoważne z -i-1”, więc możesz zapisać bajt, zmieniając (n-i-1)na (n+~i).
Wartość tuszu
1
i możesz użyć curry s=>n=>...dla kolejnego bajtu
LiefdeWen
1
@CarlosAlejo Przepraszam za komentarz oddzielne edycje ale można również wymienić new string(' '...z"".PadLeft(...
LiefdeWen
7

Cheddar , 71 64 bajtów

Zaoszczędź 7 bajtów dzięki @ValueInk

(s,n)->(1|>n=>i->(s.len*(n-i)/2)*" "+s.sub(/./g,"$&"*i)).asLines

Wypróbuj online! Za chwilę dodam wyjaśnienie

Wyjaśnienie

(string, count)->(
   1 |> count          // 1..count, the amount of rep/char per line
     => i -> (         // Map over the range       
        s.len*(n-i)/2  // Calculate amount of spaces and repeat by it.
     )*" "
     + s.sub(/./g,"$&"*i) // replace each character, duplicate the amount of times `*i`
).asLines              // return the above joined with newlines
Downgoat
źródło
Nie ma problemu! Zastanawiam się, czy Cheddar ma centerfunkcję, której możesz używać tak jak ja w mojej odpowiedzi Ruby, ponieważ może to również potencjalnie oszczędzać bajty.
Wartość tuszu
5

Rubinowy , 58 bajtów

->s,n{(1..n).map{|i|s.gsub(/./){$&*i}.center s.size*n}*$/}

Wypróbuj online!

Wartość tuszu
źródło
5

Java 8, 188 186 185 183 181 173 bajtów

s->n->{String r="";int l=s.length()/2,x=l*n,i,j;for(i=0;i++<n;r+="\n"){r+=s.format("%"+x+"s",r).substring(0,x-i*l);for(char c:s.toCharArray())for(j=0;j++<i;r+=c);}return r;}

-2 bajty (185 → 183) z powodu poprawki błędu ( n+1zamiast tego wyświetlał wiersze n). Nie często zdarza się, że poprawka błędu zapisuje bajty. :)
-2 bajty (183 → 181) dzięki @ OlivierGrégoire

Wyjaśnienie:

Wypróbuj tutaj.

s->n->{                          // Method with String and integer parameter and String return-type
  String r="";                   //  Return-String
  int l=s.length()/2,            //  Halve the length of the input-String
      x=l*n,                     //  Halve the length * the input integer
      i,j;                       //  Some temp integers
  for(i=0;i++<n;                 //  Loop (1) `n` times
      r+="\n"){                  //    And after every iteration, add a new-line
    r+=s.format("%"+x+"s",r).substring(0,x-i*l);
                                 //   Add the appropriate trailing spaces
    for(char c:s.toCharArray())  //   Loop (2) over the characters of the String
      for(j=0;j++<i;r+=c);       //    And repeat each one more than in the previous row
                                 //   End of loop (2) (implicit / single-line body)
  }                              //  End of loop (1)
  return r;                      //  Return the result-String
}                                // End of method
Kevin Cruijssen
źródło
1
Jeśli najpierw przeniosłeś swoje ints, możesz zadeklarować r="",q=s.format("%"+x+"s",r)zapisanie 2 bajtów. Dużo ruchu za dwa bajty :(
Olivier Grégoire,
1
@ OlivierGrégoire Thanks! Używając s.format("%"+x+"s",r)bezpośrednio, byłem w stanie zaoszczędzić 8 dodatkowych bajtów po twoim golfie. :)
Kevin Cruijssen
4

JavaScript (ES6), 85 bajtów

Pobiera dane wejściowe w składni curry (string)(height). Zawiera wiodącą nową linię.

s=>g=(n,p=`
`)=>n?g(n-1,p+' '.repeat(s.length/2))+p+s.replace(/./g,c=>c.repeat(n)):''

Próbny

Arnauld
źródło
Przed ostatnim wierszem są wiodące białe znaki, czy to dozwolone?
Charlie
@CarlosAlejo Och, to był niezamierzony efekt uboczny aktualizacji w ostatniej chwili. Teraz naprawione. Dziękujemy za zgłoszenie tego!
Arnauld
4

Węgiel drzewny , 19 bajtów

F⁺¹N«J±×ι÷Lη²ιFηFικ

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

F⁺¹N«       for (Plus(1, InputNumber())) {

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.

J±×ι÷Lη²ι       JumpTo(Negate(Times(i, IntDivide(Length(h), 2))), i);

Ustaw kursor, aby wynikowa linia była wyśrodkowana.

FηFικ           for (h) for (i) Print(k);

I właśnie tak proste ijest powtarzanie każdego znaku wielokrotnie .

Neil
źródło
4

Python 2 , 75 77 bajtów

s,n=input()
for i in range(n):print''.join(c*-~i for c in s).center(len(s)*n)

Wypróbuj online!

Pręt
źródło
Dang, miałem prawie taką samą odpowiedź, ale nie byłem pewien, czy funkcja może zwrócić listę linii. Jeśli tak, opublikuję moją jako osobną odpowiedź, ale jeśli nie, byłoby to zbyt podobne do postu.
notjagan
3
Wow, jest centerwbudowany? Naprawdę muszę czasami czytać dokumenty: P
HyperNeutrino
Zwraca zły wynik; ma to wiodącą pustą linię, po której następują n-1wiersze.
Wartość tuszu
Masz również kilka wiodących białych znaków przed ostatnią linią, czy to dozwolone?
Charlie
@FryAmTheEggman to może być prawda, ale nadal zwraca 9linie piramidy, gdy dane wejściowe są 10...
Wartość Ink
4

JavaScript, 105 bajtów

(s,n)=>Array(N=n).fill().reduce(a=>a+'\n'+' '.repeat(--n*s.length/2)+s.replace(/./g,_=>_.repeat(N-n)),'')

Po kilku latach przerwy Stretch Maniac powraca, tym razem nieco lepiej wykształcony.

Stretch Maniac
źródło
Masz za dużo wiodących spacji w każdej linii.
Shaggy
Oto 99-bajtowa wersja tej metody ES8, którą wymyśliłem, zanim zobaczyłem twoją: 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 \ndosłownie nową linią.
Shaggy
3

Haskell , 79 73 69 bajtów

  • Zapisany 4 bajty dzięki Nimi
s#n=unlines[(' '<$[1,3..(n-m)*length s])++((<$[1..m])=<<s)|m<-[1..n]]

Wypróbuj online!

sudee
źródło
1
Jeśli używasz krok w .., można upuścić div: (' '<$[1,3..(n-m)*length s]).
nimi
Kolejne 5 bajtów wyłączone .
ბიმო
3

APL (Dyalog) , 33 31 bajtów

2 bajty w golfa dzięki @ZacharyT poprzez usunięcie niepotrzebnych nawiasów

{↑((' '/⍨(.5×≢⍵)×⍺-⊢),⍵/⍨⊢)¨⍳⍺}

Wypróbuj online!

Wyjaśnienie

Prawym argumentem jest ciąg, a lewym argumentem jest liczba.

{↑((' '/⍨(.5×≢⍵)×⍺-⊢),⍵/⍨⊢)¨⍳⍺}
                             ⍳⍺      Range 1 .. 
  (                                For each element (let's call it i) do:
                      ⍵/⍨⊢          Replicate ⍵ i times
  (                 ),               Concatenated with
         (.5×≢⍵)×⍺-⊢                (⍺-i)×(len(⍵)×0.5)
   ' '/⍨                                spaces
 ↑                                    Convert the resulting array to a 2D matrix
Kritixi Lithos
źródło
Czy potrzebujesz wokół siebie parens ⍺-⊢?
Zacharý
@ZacharyT Masz rację, nie potrzebuję ich. Dzięki :)
Kritixi Lithos
3

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ć.

w(0).
w(X):-write(' '),Y is X-1,w(Y).
s(S,N):-string_length(S,X),Y is div(X,2)*N,w(Y).
d(S,N,R):-atom_chars(S,A),e([],A,N,R).
e(B,[H|T],N,R):-l(B,H,N,I),e(I,T,N,R).
e(B,[],_,B).
a([], L, L).
a([H|T],L,[H|R]):-a(T,L,R).
l(L,_,0,L).
l(L,I,N,R):-M is N-1,l(L,I,M,T),a(T,[I],R).
o([]):-nl.
o([H|T]):-write(H),o(T).
p(S,N):-p(S,N,N).
p(_,0,_).
p(S,N,L):-Q is N-1,p(S,Q,L),d(S,N,R),W is L-N,s(S,W),o(R).

Test:

?- p("o-o  o-o",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
true .

Wyjaśnienie:

w i s zapisuje odpowiednią liczbę wiodących spacji:

w(0).
w(X):-write(' '),Y is X-1,w(Y).
s(S,N):-string_length(S,X),Y is div(X,2)*N,w(Y).

d zarządza „powielaniem” znaków ie jest funkcją rekurencyjną:

//d(String, Number of repetitions, Result)
d(S,N,R):-atom_chars(S,A),e([],A,N,R).
e(B,[H|T],N,R):-l(B,H,N,I),e(I,T,N,R).
e(B,[],_,B).

a i l dołączają do wyniku (może istnieje wbudowana procedura?):

a([], L, L).
a([H|T],L,[H|R]):-a(T,L,R).
l(L,_,0,L).
l(L,I,N,R):-M is N-1,l(L,I,M,T),a(T,[I],R).

o tworzy wynik:

o([]):-nl.
o([H|T]):-write(H),o(T).

i na koniec p jest główną metodą :

p(S,N):-p(S,N,N).
p(_,0,_).
//p(String, Current level, Number of levels) :- go to the bottom, create pyramide level, write whitespaces, write the level
p(S,N,L):-Q is N-1,p(S,Q,L),d(S,N,R),W is L-N,s(S,W),o(R).
Jan Drozen
źródło
3

Japt , 20 + 1 = 21 19 + 1 = 20 14 bajtów

Zwraca tablicę wierszy - dodaj 2 bajty, jeśli nie jest to dozwolone.

Võ@®pXÃù°V*UÊz

Sprawdź to


Wyjaśnienie

      :Implicit input of string U & integer V
Võ    :Generate an array of integers from 1 to V, inclusive
@     :Map over the elements of the array
®     :Map over the characters of U
p     :Repeat the current character ...
X     :  X (the current element) times.
à    :End string mapping.
ù     :Left pad each line with spaces to length...
°V    :  V incremented by one...
*     :  multiplied by...
UÊ    :  the length of U...
z     :  divided by 2.
      :Implicit output of resulting array.
Kudłaty
źródło
Myślę, że możesz zmienić SpUlna ... poczekaj, nieważne :( Możesz jednak zaoszczędzić bajt, zastępując (V-Xgo XnV, jeśli się nie mylę.
ETHproductions
O tak, zapomniałem n; dzięki @ETHproductions.
Kudłaty
2

PHP, 113 bajtów:

for([,$s,$n]=$argv;$i++<$n;)for(print($f=str_pad)("
",($n-$i)*strlen($s)/2+!$p=0);~$c=$s[$p++];)echo$f($c,$i,$c);

Uruchom go php -nr '<code>' '<string>' <N>lub przetestuj online .

awaria

# import input, loop $i from 1 to $n
for([,$s,$n]=$argv;$i++<$n;)
    # 1. print newline and padding, reset $p
    for(print($f=str_pad)("\n",($n-$i)*strlen($s)/2+!$p=0);
    # 2. loop $c through string
        ~$c=$s[$p++];)
        # print repeated character
        echo$f($c,$i,$c);
Tytus
źródło
2

CJam , 36 bajtów

l_,2/:T;]li:F{[_U)*zSTFU)-**\N]\}fU;

Wypróbuj online!

Siguza
źródło
Witamy w PPCG! Ładne pierwsze zgłoszenie :)
HyperNeutrino
@HyperNeutrino Cóż, mam wrażenie, że mój kod jest daleki od optymalizacji, ale ... dzięki. :)
Siguza
4
Ale zawiera STFU :-D
Luis Mendo
2

T-SQL, 223 bajty

DECLARE @ char(99),@n INT,@i INT=1,@j INT,@p varchar(max)SELECT @=s,@n=n FROM t
R:SET @j=0SET @p=SPACE((@n-@i)*len(@)/2)C:SET @j+=1SET @P+=REPLICATE(SUBSTRING(@,@j,1),@i)IF @j<LEN(@)GOTO C
PRINT @p SET @i+=1IF @i<=@n GOTO R

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 @iwiersze i @jprzechodzące przez znaki ciągu, które są REPLICATED @iczasami:

DECLARE @ char(99),@n INT,@i INT=1,@j INT,@p varchar(max)
SELECT @=s,@n=n FROM t
R:
    SET @j=0
    SET @p=SPACE((@n-@i)*len(@)/2) 
    C:
        SET @j+=1
        SET @P+=REPLICATE(SUBSTRING(@,@j,1),@i)
    IF @j<LEN(@)GOTO C
    PRINT @p
    SET @i+=1
IF @i<=@n GOTO R
BradC
źródło
2

R , 125 95 bajtów

function(S,n)for(i in 1:n)cat(rep(' ',(n-i)/2*nchar(S)),rep(el(strsplit(S,'')),e=i),sep="",'
')

Wypróbuj online!

Wyjaśnienie:

To całkiem proste, dzielenie łańcucha i powtarzanie elementów irazy każdy rep(s,e=i)( ejest skrótem odeach ) podczas pętli. Trudna część jest rep('',(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 jest character(0)wektor o zerowej długości i cat, który domyślnie oddziela swoje elementy spacjami, nie wyrównuje linii końcowej.

Giuseppe
źródło
1

Mathematica, 97 bajtów

(c=Characters@#;T=Table;Column[T[""<>T[""<>T[c[[i]],j],{i,Length@c}],{j,#2}],Alignment->Center])&


wkład

[„oo oo”, 10]

J42161217
źródło
1

Tcl, 143 142 141 141 138 bajtów

proc p s\ n {set p [expr [set w [expr [string le $s]/2]]*$n];time {incr p $w;puts [format %$p\s [regsub -all . $s [append r \\0]]]} $n;cd}

Test:

% p "o-o  o-o" 5
                o-o  o-o
            oo--oo    oo--oo
        ooo---ooo      ooo---ooo
    oooo----oooo        oooo----oooo
ooooo-----ooooo          ooooo-----ooooo

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!

avl42
źródło
1

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.

var p:(String,Int)->String={s,i in let r=(1...i).map{n in return s.map{return String(repeating:$0,count:n)}.joined()};return(r.map{return String(repeating:" ",count:(r.last!.count-$0.count)/2)+$0}as[String]).joined(separator:"\n")}
Caleb Kleveter
źródło
1

LOGO, 97 95 bajtów

to f :s :n
for[i 1 :n][repeat(:n-:i)/2*count :s[type "\ ]foreach :s[repeat :i[type ?]]pr "]
end

Wypróbuj kod w interpretatorze FMSLogo.

Zdefiniuj funkcję, fktóra pobiera dwa dane wejściowe, :sa :nnastępnie wydrukuj wynik.

użytkownik202729
źródło
1

Java 8, 164 148 bajtów

s->n->{String o="";for(int i=0,m,j;i++<n;){o+="\n";for(m=0;m++<(n-i)*s.length()/2;)o+=" ";for(char c:s.toCharArray())for(j=0;j++<i;)o+=c;}return o;}

Wyjaśnienie:

s->n->{
    String o = "";                                  //empty output string
    for (int i = 0, m, j; i++ < n; ) {              //for each row
        o += "\n";                                  //append a new line
        for (m = 0; m++ < (n - i)*s.length()/2; )   //for amount of spaces = inversed row_number * half length
            o += " ";                               //append a space
        for (char c : s.toCharArray())              //for each char of the string
            for (j = 0; j++ < i; )                  //row_number times
                o+=c;                               //append char
    }
    return o;
}
Sebastian Matschke
źródło
1

Rdza, 107 bajtów

|a:&str,b|for i in 0..b{println!("{:^1$}",a.split("").map(|s|s.repeat(i+1)).collect::<String>(),a.len()*b)}

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:

|a:&str,b|for i in 0..b{println!("{:^1$}",a.split("").map(|s|s.repeat(i+1)).collect::<String>(),a.chars().count()*b)}

Wyjaśnienie jest raczej proste:

|a:&str,b|                             // arguments, compiler can't infer the type of a unfortunately
    for i in 0..b {                    // iterate from row 0 to row b - 1
        println!(
            "{:^1$}",                  // print a line containing arg 0, centered with the width specified as arg 1
            a.split("")                // split the string into slices of one character
                .map(|s|s.repeat(i+1)) // for each slice, yield a string containing row+1 times that slice
                .collect::<String>(),  // concatenate each of the strings into one string
            a.len()*b                  // total length should be the length of the string times the amount of rows
        )
    }
CensoredUsername
źródło
1

SOGL V0.12 , 8 bajtów

∫dč*∑}¹╚

Wypróbuj tutaj!

Wyjaśnienie:

∫dč*∑}¹╚
∫    }    iterate over 1..input, pushing counter
 d        push the variable D, which sets itself to the next input as string
  č       chop into characters - a vertical array
   *      multiply horizontally by the counter
    ∑     join the array together
      ¹   wrap all that in an array
       ╚  center horizontally

Nie miałem ochoty aktualizować mojej starej odpowiedzi tutaj, ponieważ używa ona innej metody i wykorzystuje nową funkcję (er niż wyzwanie) -

dzaima
źródło
1

Python 2 , 79 77 bajtów

s,n=input();m=n
while m:m-=1;print' '*(m*len(s)/2)+''.join(i*(n-m)for i in s)

Wypróbuj online!

Edycja: -2 bajty dzięki uprzejmości @FlipTack

Koishore Roy
źródło
Możesz usunąć nawiasy kwadratowe [i*(n-m)for i in s], ponieważ .joinjest on w stanie zabrać generator, który powinien zaoszczędzić dwa bajty.
FlipTack,
0

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

For i=1To[B1]:?Spc([Len(A1)/2]*([B1]-i));:For j=1To[Len(A1)]:?String(i,Mid([A1],j,1));:Next:?:Next
Taylor Scott
źródło