Xây cho tôi một lâu đài Stairway!


13

Bạn sẽ được cung cấp một Chuỗi bao gồm ASCII có thể in (không có dòng mới). Nhiệm vụ của bạn là xây dựng một Cầu thang đẹp cho Lâu đài của tôi.

Làm thế nào để xây dựng một Stairway đẹp?

  • Trước hết, bạn sẽ nhận được tất cả các phép quay của Chuỗi. Ví dụ: Chuỗi abcdcó các phép quay sau: abcd, bcda, cdab, dabc(mỗi ký tự được di chuyển đến cuối cho đến khi chúng ta đạt đến ký tự cuối cùng).

  • Bây giờ chúng ta đặt từng vòng quay lên nhau:

    abcd
    bcda
    cdab
    dabc
    
  • Chúng ta không thể thực sự trèo lên một bức tường thẳng, vì vậy chúng ta phải xây cầu thang. Điều đó có nghĩa là bạn nên thêm một số khoảng trắng trước mỗi vòng quay tương ứng với chỉ mục của nó trong danh sách xoay vòng:

    abcd
     bcda
      cdab
       dabc
    
  • Bạn cũng cần một Stairway liên kết với phía bên kia của lâu đài của tôi, vì vậy bạn nên xây dựng một cái như bên dưới, đảo ngược mỗi vòng quay và thêm một số khoảng cách:

    abcd      dcba
     bcda    adcb
      cdab  badc
       dabccbad
    

Đây là , do đó mã ngắn nhất tính theo byte thắng và quy tắc chuẩn cho thẻ được áp dụng.


Các trường hợp thử nghiệm

  • Đầu vào : abcd, Đầu ra:

    abcd      dcba
     bcda    adcb
      cdab  badc
       dabccbad
    
  • Đầu vào : aaaa, Đầu ra:

    aaaa      aaaa
     aaaa    aaaa
      aaaa  aaaa
       aaaaaaaa
    
  • Đầu vào : Code golf, Đầu ra (Lưu ý khoảng trắng):

    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
    


Không phải cầu thang bắt đầu đi lên, rồi đi xuống, thay vì đi xuống, rồi lên? : P
Stephen

@StepHen Vì mục đích của thử thách này, không nên: p
Ông Xcoder


dabc. -------
Oliver Ni

Câu trả lời:




3

Võng mạc , 47 byte

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

¶

Hãy thử trực tuyến! Giải thích: Giai đoạn đầu tiên tạo cầu thang bên trái bằng cách xem xét từng ký tự và tạo khoảng trắng bằng vị trí hiện tại, sau đó là phần còn lại của chuỗi, sau đó là bắt đầu chuỗi, sau đó khoảng trắng bằng phần còn lại của chuỗi. Phần còn lại của tập lệnh chạy lần lượt từng dòng. Đầu tiên, dòng được nhân đôi, sau đó các ký tự trong bản sao được đảo ngược, sau đó dòng và bản sao của nó được nối.




2

Than , 23 21 20 byte

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

Hãy thử trực tuyến!

Có thể chơi golf nhiều hơn, nhưng tôi đang đăng từ ứng dụng di động. Liên kết đến phiên bản dài dòng .


Oh btw nếu bạn không thêm một lời giải thích ít nhất là sử dụng cờ- xin vui lòng
ASCII-chỉ

@ ASCII - chỉ xin lỗi, tôi nghĩ phiên bản dài dòng được tính là một lời giải thích.
Charlie

Đợi những gì nvm không thấy điều đó
ASCII - chỉ

Tôi không nghĩ đó là sự thật vào thời điểm đó nhưng ngày nay bạn có thể điền vào một đa giác bằng một chuỗi tùy ý và nhận được chính xác kết quả bạn cần cho 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
(#"")

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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

Chỉnh sửa: Cảm ơn @ rjan Johansen cho một byte.


u#_=utiết kiệm một byte.
Ørjan Johansen

@ RjanJohansen: Trước tiên tôi có một danh sách các chuỗi và unlinesnơi u#_=ukhông gõ kiểm tra và sau đó chuyển sang xây dựng một chuỗi duy nhất ... Cảm ơn!
nimi



1

Toán học, 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),"
";

Chạy như ống với -nRhoặc thử trực tuyến .

phá vỡ

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÷

Dòng mới hàng đầu là một phần của chương trình.

Hãy thử trực tuyến!

Chạy tất cả các trường hợp thử nghiệm bằng WIP CodePen của tôi.

Giải trình

Ngụ ý: U= chuỗi đầu vào. Dòng đầu tiên để trống không ghi đè U.

Dòng thứ hai ngầm gán chiều dài ( l) của Uđể V.

Dòng thứ ba:

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

Đoạn mã ví dụ:

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

8 , 173 168 byte

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

Phiên bản Ungolfed với ý kiến

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

Cách sử dụng và ví dụ

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 

Hay nói rõ hơn

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 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.