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
    


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:




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.


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


l-i-1hanya bisa l+~isebagai~i == -i-1
ovs

' '*(l+~i)*2sama dengan '  '*(l+~i), yang satu byte lebih pendek!
Lynn


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 .


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.


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



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}]&

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

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


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>


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!


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 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.