나에게 성 계단을 건설하십시오!


13

인쇄 가능한 ASCII (줄 바꿈 없음)로 구성된 문자열이 제공됩니다. 당신의 임무는 내 성을위한 멋진 계단을 만드는 것입니다.

멋진 계단을 세우는 방법?

  • 먼저 String의 모든 회전을 가져와야합니다. 예를 들어, 문자열 abcd의 회전은 다음과 같습니다 abcd, bcda, cdab, dabc(각 문자는 마지막 문자에 도달 할 때까지 끝으로 이동합니다).

  • 이제 각 회전을 서로의 위에 놓습니다 :

    abcd
    bcda
    cdab
    dabc
    
  • 우리는 똑바로 벽에 올라갈 수 없으므로 계단을 세워야합니다. 즉, 회전 목록의 인덱스에 해당하는 각 회전 전에 여러 개의 공백을 추가해야합니다.

    abcd
     bcda
      cdab
       dabc
    
  • 또한 내 성의 다른쪽에 연결되는 계단이 필요하므로 각 회전을 뒤집고 간격을 추가하여 아래와 같이 만들어야합니다.

    abcd      dcba
     bcda    adcb
      cdab  badc
       dabccbad
    

이것은 이므로 바이트 단위로 가장 짧은 코드가 이기고 태그의 표준 규칙이 적용됩니다.


테스트 사례

  • 입력 : abcd, 출력 :

    abcd      dcba
     bcda    adcb
      cdab  badc
       dabccbad
    
  • 입력 : aaaa, 출력 :

    aaaa      aaaa
     aaaa    aaaa
      aaaa  aaaa
       aaaaaaaa
    
  • 입력 : Code golf, 출력 (공백에 유의) :

    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
    


계단이 올라 가기 시작한 다음 내려가는 대신 내려 가면 안됩니까? : P
Stephen

@StepHen이 도전의 목적을 위해, 그것은해서는 안됩니다 : P
Mr. Xcoder


dab씨. -------
Oliver Ni

답변:




3

레티 나 , 47 바이트

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

¶

온라인으로 사용해보십시오! 설명 : 첫 번째 단계는 각 문자를 고려하여 현재 위치와 같은 공백을 작성한 다음 나머지 문자열, 문자열의 시작, 나머지 문자열과 같은 공백을 작성하여 왼쪽 계단을 작성합니다. 나머지 스크립트는 방금 생성 된 각 줄에서 실행됩니다. 먼저 줄이 복제 된 다음, 그 줄의 문자가 반전 된 다음 줄과 그 줄이 연결됩니다.




2

, 23 21 20 바이트

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

온라인으로 사용해보십시오!

더 골프를 칠 수도 있지만 모바일 앱에서 게시하고 있습니다. 자세한 버전으로 연결합니다 .


아, 만약 설명을 추가하지 않으면 적어도 -a 플래그 pls를 사용하십시오
ASCII 전용

@ASCII 전용 죄송합니다. 자세한 버전은 설명으로 간주됩니다.
Charlie

nvm이 보지 못한 것을 기다리십시오
ASCII 전용

나는 그것이 사실이라고 생각하지 않지만 요즘에는 임의의 문자열로 다각형을 채우고 9 바이트에 필요한 결과를 정확하게 얻을 수 있습니다 G→↘←Lθθ‖C.
Neil

2

하스켈, 80 79 바이트

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

온라인으로 사용해보십시오!

작동 원리

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

편집 : 바이트에 대한 @ Ørjan Johansen에게 감사합니다.


u#_=u바이트를 저장합니다.
Ørjan Johansen

@ ØrjanJohansen : 처음에는 문자열 목록이 있었고 검사를 입력하지 않은 unlinesu#_=u은 나중에 단일 문자열을 만드는 것으로 전환했습니다 ... 감사합니다!
nimi



1

Mathematica, 119 바이트

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 바이트

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

파이프로 실행 -nR하거나 온라인으로 사용해보십시오 .

고장

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

apt , 22 바이트


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

주요 개행은 프로그램의 일부입니다.

온라인으로 사용해보십시오!

WIP CodePen을 사용하여 모든 테스트 사례실행하십시오 .

설명

암시 적 : U= 입력 문자열. 덮어 쓰지 않으려면 첫 번째 줄이 비어 U있습니다.

두 번째 줄은 암시 적으로 길이 (지정 l의) U에를 V.

세 번째 줄 :

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

자바 스크립트 (ES6), 118 바이트

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

코드 스 니펫 예제 :

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 바이트

암호

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

주석이 달린 언 골프 버전

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

사용법 및 예

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 

또는 더 명확하게

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 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.