Bangun aku Stairway kastil!

13

Anda akan diberikan sebuah String yang terdiri dari ASCII yang dapat dicetak (tanpa baris baru). Tugas Anda adalah membangun Tangga yang bagus untuk Kastil saya.

Bagaimana cara membangun Stairway yang bagus?

  • Pertama, Anda harus mendapatkan semua rotasi dari String. Sebagai contoh, String abcdmemiliki rotasi berikut: abcd, bcda, cdab, dabc(setiap karakter dipindahkan ke akhir sampai kita mencapai karakter terakhir).

  • Kami sekarang menempatkan setiap rotasi di atas satu sama lain:

    abcd
    bcda
    cdab
    dabc
    
  • Kita tidak bisa benar-benar memanjat tembok lurus, jadi kita harus membangun tangga. Itu berarti Anda harus menambahkan sejumlah spasi sebelum setiap rotasi sesuai dengan indeksnya dalam daftar rotasi:

    abcd
     bcda
      cdab
       dabc
    
  • Anda juga membutuhkan Tangga yang menghubungkan ke sisi lain kastil saya, jadi Anda harus membangun satu seperti di bawah ini, membalikkan setiap rotasi dan menambahkan beberapa spasi:

    abcd      dcba
     bcda    adcb
      cdab  badc
       dabccbad
    

Ini adalah , maka kode terpendek dalam byte menang dan aturan standar untuk tag berlaku.


Uji Kasus

  • Input abcd:, Keluaran:

    abcd      dcba
     bcda    adcb
      cdab  badc
       dabccbad
    
  • Input aaaa:, Keluaran:

    aaaa      aaaa
     aaaa    aaaa
      aaaa  aaaa
       aaaaaaaa
    
  • Input Code golf:, Output (Perhatikan spasi):

    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
    
Tuan Xcoder
sumber
Sandbox
Tn. Xcoder
Bukankah seharusnya tangga mulai naik, lalu turun, bukannya turun, lalu naik? : P
Stephen
@StepHen Untuk tujuan tantangan ini, seharusnya tidak: p
Mr. Xcoder
dabc. -------
Oliver Ni

Jawaban:

8

05AB1E , 12 byte

Kode:

vDNúsÀ}\».B∞

Menggunakan penyandian 05AB1E . Cobalah online!

Penjelasan:

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
sumber
4

Jelly , 16 byte

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

Cobalah online!

Tentu saja, -1 menggunakan Jonathan Allan 's ɓ!

Erik the Outgolfer
sumber
Solusi saya adalah metode yang terlalu mirip, ini dia: J’ɓ⁹⁶ẋ;"ṙz⁶Zm€0Y(atau LḶuntuk J’)
Jonathan Allan
@Jonathan Allan Heh.
Erik the Outgolfer
3

Retina , 47 byte

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

¶

Cobalah online! Penjelasan: Tahap pertama membuat tangga kiri dengan mempertimbangkan setiap karakter dan membuat spasi sama dengan posisi saat ini, kemudian sisa string, lalu mulai dari string, lalu spasi sama dengan sisa string. Sisa skrip dijalankan pada setiap baris yang baru saja dihasilkan secara bergantian. Pertama, baris digandakan, lalu karakter dalam duplikat dibalik, kemudian garis dan duplikatnya digabungkan.

Neil
sumber
3

Python 3 , 89 byte

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

Cobalah online!

-1 byte berkat ovs

-1 byte terima kasih kepada Lynn

HyperNeutrino
sumber
l-i-1hanya bisa l+~isebagai~i == -i-1
ovs
' '*(l+~i)*2sama dengan '  '*(l+~i), yang satu byte lebih pendek!
Lynn
2

C (gcc) , 126 byte

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;}

Cobalah online!

Biarawati Bocor
sumber
2

Arang , 23 21 20 byte

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

Cobalah online!

Mungkin bisa bermain golf lebih banyak, tapi saya memposting dari aplikasi seluler. Tautan ke versi verbose .

Charlie
sumber
Oh btw jika Anda tidak menambahkan penjelasan setidaknya menggunakan -sebuah flag pls
ASCII-only
@ ASCII-satunya maaf, saya pikir versi verbose dianggap sebagai penjelasan.
Charlie
Tunggu apa nvm tidak melihat itu
hanya ASCII
Saya tidak berpikir itu benar pada saat itu tetapi hari ini Anda dapat mengisi poligon dengan string sewenang-wenang dan mendapatkan persis hasil yang Anda butuhkan untuk 9 byte: G→↘←Lθθ‖C.
Neil
2

Haskell, 80 79 byte

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

Cobalah online!

Bagaimana itu bekerja

(#"")                      -- 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

Sunting: Terima kasih kepada @ Ørjan Johansen untuk satu byte.

nimi
sumber
u#_=umenghemat satu byte.
Ørjan Johansen
@ ØrjanJohansen: Saya pertama kali memiliki daftar string dan di unlinesmana u#_=utidak mengetik centang dan kemudian beralih untuk membangun string tunggal ... Terima kasih!
nimi
2

J, 34 byte

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

ungolfed

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

Cobalah online!

Jonah
sumber
1

Mathematica, 119 byte

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

PHP, 95 byte

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

Jalankan sebagai pipa dengan -nRatau coba online .

kerusakan

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
Titus
sumber
1

Japt , 22 byte


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

Memimpin baris baru adalah bagian dari program.

Cobalah online!

Jalankan semua test case menggunakan WIP CodePen saya.

Penjelasan

Tersirat: U= string input. Baris pertama kosong untuk tidak ditimpa U.

Baris kedua secara implisit menetapkan panjang ( l) dari Uke V.

Baris ketiga:

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
sumber
1

Javascript (ES6), 118 byte

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`
`

Cuplikan kode contoh:

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.
sumber
1

Python 2 , 85 83 byte

  • Terima kasih @ovs untuk 2 byte: l+~idan membantu saya melihat ruang yang tidak diinginkan
x=input()
l=len(x)
for i in range(l):r=i*' '+x[i:]+x[:i]+(l+~i)*' ';print r+r[::-1]

Cobalah online!

officialaimm
sumber
1
l-1-ihanya bisa l+~isebagai~i == -i-1
ovs
1

8 , 173 168 byte

Kode

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

Versi tidak dikoleksi dengan komentar

: 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
;

Penggunaan dan contoh

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 

Atau lebih jelas

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 
Kekacauan Manor
sumber