Zbuduj mi schody zamkowe!

13

Otrzymasz ciąg znaków składający się z drukowalnego ASCII (bez znaków nowej linii). Twoim zadaniem jest zbudowanie ładnej klatki schodowej dla mojego zamku.

Jak zbudować fajne schody?

  • Po pierwsze, powinieneś uzyskać wszystkie obroty struny. Na przykład Ciąg abcdma następujące obroty: abcd, bcda, cdab, dabc(każda postać jest przenoszona na koniec, aż dojdziemy do ostatniej postaci).

  • Teraz umieszczamy każdy obrót jeden na drugim:

    abcd
    bcda
    cdab
    dabc
    
  • Tak naprawdę nie możemy wspiąć się po prostej ścianie, więc musimy budować schody. Oznacza to, że przed każdą rotacją należy dodać liczbę spacji odpowiadającą jej indeksowi na liście rotacji:

    abcd
     bcda
      cdab
       dabc
    
  • Potrzebujesz także Schodów, które prowadzą do drugiej strony mojego zamku, więc powinieneś zbudować taki jak poniżej, odwracając każdy obrót i dodając pewne odstępy:

    abcd      dcba
     bcda    adcb
      cdab  badc
       dabccbad
    

To jest , stąd wygrywa najkrótszy kod w bajtach i obowiązują standardowe reguły dla tagu.


Przypadki testowe

  • Wejście:, abcdWyjście:

    abcd      dcba
     bcda    adcb
      cdab  badc
       dabccbad
    
  • Wejście:, aaaaWyjście:

    aaaa      aaaa
     aaaa    aaaa
      aaaa  aaaa
       aaaaaaaa
    
  • Wejście:, Code golfWyjście (zauważ spacje):

    Code golf                flog edoC
     ode golfC              Cflog edo 
      de golfCo            oCflog ed  
       e golfCod          doCflog e   
         golfCode        edoCflog     
         golfCode        edoCflog     
          olfCode g    g edoCflo      
           lfCode go  og edoCfl       
            fCode gollog edoCf
    
Pan Xcoder
źródło
Piaskownica
Mr. Xcoder
Czy schody nie powinny zacząć iść w górę, a potem zejść, zamiast zejść, a potem w górę? : P
Stephen
@StepHen Na potrzeby tego wyzwania nie powinno: p
Mr. Xcoder
dabdo. -------
Oliver Ni

Odpowiedzi:

8

05AB1E , 12 bajtów

Kod:

vDNúsÀ}\».B∞

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!

Wyjaśnienie:

v     }        # Length input times, do.. (N = iteration count)
 DNú           #   Duplicate and prepend N spaces
    sÀ         #   Swap and rotate one to the left
       \       # Discard the top of the stack
        »      # Join the stack by newlines
         .B    # Pad with spaces into a rectangle
           ∞   # Mirror the string
Adnan
źródło
4

Galaretka , 16 bajtów

J’ɓ⁹⁶ẋ;"ṙz⁶Zm€0Y

Wypróbuj online!

Oczywiście, -1 za pomocą Jonathan Allan S” ɓ!

Erik the Outgolfer
źródło
Moje rozwiązanie jest zbyt podobne, proszę bardzo: J’ɓ⁹⁶ẋ;"ṙz⁶Zm€0Y(lub LḶdla J’)
Jonathan Allan
@JathanathanAllan Heh.
Erik the Outgolfer,
3

Siatkówka , 47 bajtów

.
$.`$* $&$'$`$.'$* ¶
%(`^
$_¶
O$^`.(?=.*$)

¶

Wypróbuj online! Objaśnienie: Pierwszy etap tworzy lewe schody, biorąc pod uwagę każdy znak i tworząc spacje równe bieżącej pozycji, następnie resztę ciągu, potem początek ciągu, a następnie spacje równe pozostałej części ciągu. Reszta skryptu przebiega po każdej właśnie wygenerowanej linii. Najpierw linia jest duplikowana, następnie znaki w duplikacie są odwracane, a następnie linia i jej duplikat są łączone.

Neil
źródło
3

Python 3 , 89 bajtów

x=input()
l=len(x)
for i in range(l):y=x[i:]+x[:i];j=' '*i;print(j+y+'  '*(l+~i)+y[::-1])

Wypróbuj online!

-1 bajt dzięki ovs

-1 bajt dzięki Lynn

HyperNeutrino
źródło
l-i-1może być l+~ijak~i == -i-1
ows
' '*(l+~i)*2równa się '  '*(l+~i), czyli o jeden bajt krócej!
Lynn
2

C (gcc) , 126 bajtów

i,j,k,l;f(char*s){for(l=strlen(s),i=0;i<l;i++,puts(""))for(j=0;j<4*l-2;j++,putchar(i<=k&k<i+l?s[k%l]:32))k=j<2*l-1?j:4*l-3-j;}

Wypróbuj online!

Leaky Nun
źródło
2

Węgiel , 23 21 20 bajtów

FLθ«FLθ§θ⁺κι↘MLθ←»‖C

Wypróbuj online!

Prawdopodobnie można grać w golfa więcej, ale piszę z aplikacji mobilnej. Link do pełnej wersji .

Charlie
źródło
Aha, jeśli nie dodasz wyjaśnienia, użyj przynajmniej -a flag pls
tylko ASCII
@ Tylko ASCII przepraszam, myślałem, że pełna wersja jest liczona jako wyjaśnienie.
Charlie
Poczekaj, co nvm tego nie widział
tylko ASCII
Nie sądzę, żeby to była prawda w czasie, ale w dzisiejszych czasach można wypełnić wielokąt z dowolnego ciągu znaków i uzyskać wynik dokładnie, czego potrzeba do 9 bajtów: G→↘←Lθθ‖C.
Neil,
2

Haskell, 80 79 bajtów

(s:u)#t|q<-(t>>" ")++s:u++t++(u>>" ")=q++reverse q++'\n':u#(t++[s])
u#_=u
(#"")

Wypróbuj online!

Jak to działa

(#"")                      -- start with the input string and an empty accumulator

(s:u)#t                    -- let s be the first char and u the rest of the input
                           -- string, and t the accumulator
    |q<-                   -- let q be half of the current line, i.e.
        (t>>" ")++         --   length of t times spaces
        s:u++              --   s and u (aka the input string)
        t++                --   the accumulator
        (u>>" ")           --   length of u times spaces
    = q ++ reverse q ++    -- the current line is q and q reversed
        '\n' :             -- and a newline
        u#(t++[s])         -- and a recursive call with u as the new input
                           -- string and s put at the end of t
_#_=[]                     -- base case: stop if the input string is empty

Edycja: Dzięki @ Ørjan Johansen za bajt.

nimi
źródło
u#_=uzapisuje bajt.
Ørjan Johansen
@ ØrjanJohansen: Najpierw miałem listę ciągów, a unlinestam, gdzie u#_=unie wpisuję sprawdzania, a później przełączyłem się na budowanie pojedynczego ciągu ... Dzięki!
nimi
2

J, 34 bajty

([,.|.)@(i.@#((' '#~[),[|.])"0 1])

bez golfa

([,.|.) @ (i.@# ((' '#~[) , [|.])"0 1 ])

Wypróbuj online!

Jonasz
źródło
1

Mathematica, 119 bajtów

b=StringRotateLeft;j=Table;Column@j[""<>{" "~j~i,b[s=#,i],j["  ",t-i],b[StringReverse@s,-i]},{i,0,t=StringLength@#-1}]&
J42161217
źródło
1

PHP, 95 bajtów

for($e=strlen($s=$argn);$i<$e;$s.=$s[$i],$s[$i++]=" ")echo$t=str_pad($s,2*$e-1),strrev($t),"
";

Uruchom jako potok z -nRlub spróbuj online .

awaria

for($e=strlen($s=$argn);    # import input
    $i<$e;                  # loop length times
    $s.=$s[$i],                 # 2. append current character
    $s[$i++]=" ")               # 3. set current character to space
    echo$t=str_pad($s,2*$e-1),  # 1. print string padded with length-1 spaces
        strrev($t),             #    print reverse
        "\n";                   #    print newline
Tytus
źródło
1

Japt , 22 bajty


l
VÇç +UéZn)+´Vç)ê1÷

Wiodąca nowa linia jest częścią programu.

Wypróbuj online!

Uruchom wszystkie przypadki testowe, używając mojego WIP CodePen.

Wyjaśnienie

Implikowany: U= ciąg wejściowy. Pierwszy wiersz jest pusty, aby go nie zastąpić U.

Drugi wiersz domyślnie przypisuje długość ( l) Udo V.

Trzecia linia:

VÇç +UéZn)+´Vç)ê1÷
VoZ{Zç +UéZn)+--Vç)ê1} · Ungolfed
VoZ{                 }   Create array [0, V) and map by...
    Zç                      The current value (Z) times " "
       +UéZn)               Concatenated with U rotated Z times left
             +--Vç)         Concatenated with --V times " ". This decrements V
                   ê1       Palindromize with repeated last char
                       · Join with newlines and implicitly output
Justin Mariner
źródło
1

JavaScript (ES6), 118 bajtów

s=>[...s].map((_,y)=>Array(l=(j=s.length)*4-2).fill().map((_,x)=>(x=x<l/2?x:l-x-1)>=y&y+j>x?s[x%j]:" ").join``).join`
`

Przykładowy fragment kodu:

f=
s=>[...s].map((_,y)=>Array(l=(j=s.length)*4-2).fill().map((_,x)=>(x=x<l/2?x:l-x-1)>=y&y+j>x?s[x%j]:" ").join``).join`
`
o.innerText=f("Code golf")
<pre id=o>

Herman L.
źródło
1

Python 2 , 85 83 bajtów

  • Dzięki @ovs za 2 bajty: l+~ii pomógł mi dostrzec niechciane miejsce
x=input()
l=len(x)
for i in range(l):r=i*' '+x[i:]+x[:i]+(l+~i)*' ';print r+r[::-1]

Wypróbuj online!

Officialaimm
źródło
1
l-1-imoże być l+~ijak~i == -i-1
ovs
1

8th , 173 168 bajtów

Kod

s:len n:1- ( >r dup s:len n:1- "" ( " " s:+ ) rot times dup 0 r@ s:slice -rot r> -1 s:slice s:+ s:+ dup s:rev swap . . cr null s:/ a:shift a:push "" a:join ) 0 rot loop

Wersja bez golfa z komentarzami

: shifter \ s -- s
  null s:/     \ convert string into array
  a:shift      \ remove the first item in the array and put it on TOS
  a:push       \ append the former 1st item to array
  "" a:join    \ convert array into string
;

: stairway \ s -- s
  s:len n:1-
  (
    >r                       \ save loop index
    dup                      \ duplicate input string 
    s:len n:1-               \ get string length
    "" ( " " s:+ ) rot times \ make filler
    dup                      \ duplicate filler 
    0 r@ s:slice             \ make left filler
    -rot                     \ put left filler at proper position
    r> -1 s:slice            \ make right filler
    s:+ s:+                  \ build string ( 1st half of stairway )
    dup s:rev                \ build 2nd half 
    swap . . cr              \ print it
    shifter                  \ shift rotate 1st character
  ) 0 rot loop               \ loop from 0 to len(string)-1
;

Zastosowanie i przykłady

ok> "abcd" s:len n:1- ( >r dup s:len n:1- "" ( " " s:+ ) rot times dup 0 r@ s:slice -rot r> -1 s:slice s:+ s:+ dup s:rev swap . . cr null s:/ a:shift a:push "" a:join ) 0 rot loop
abcd      dcba
 bcda    adcb 
  cdab  badc  
   dabccbad 

Lub bardziej wyraźnie

ok> "Code golf" stairway
Code golf                flog edoC
 ode golfC              Cflog edo 
  de golfCo            oCflog ed  
   e golfCod          doCflog e   
     golfCode        edoCflog     
     golfCode        edoCflog     
      olfCode g    g edoCflo      
       lfCode go  og edoCfl       
        fCode gollog edoCf 
Dwór Chaosu
źródło