Побудуй мені замкову сходи!


13

Вам буде надано рядок, що складається з друкованого ASCII (без нових рядків). Ваше завдання - побудувати приємну сходи для мого Замку.

Як побудувати гарну сходи?

  • По-перше, ви повинні отримати всі обертання рядка. Наприклад, рядок 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 Для цього завдання не слід: p
Містер Xcoder


dabc. -------
Олівер Ні,

Відповіді:


8

05AB1E , 12 байт

Код:

vDNúsÀ}\».B∞

Використовує кодування 05AB1E . Спробуйте в Інтернеті!

Пояснення:

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



3

Сітківка , 47 байт

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

¶

Спробуйте в Інтернеті! Пояснення: На першому етапі створюється ліва сходи, розглядаючи кожен символ і створюючи пробіли, рівні поточному положенню, потім залишок рядка, потім початок рядка, потім пробіли, що дорівнюють решті рядка. Решта сценарію працює над кожним рядком, щойно створеним по черзі. Спочатку рядок дублюється, потім символи у дубліката зворотні, потім рядок та його дублікат об'єднуються.




2

Вугілля деревне , 23 21 20 байт

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

Спробуйте в Інтернеті!

Можливо, можна більше пограти в гольф, але я надсилаю повідомлення з мобільного додатку. Посилання на багатослівну версію .


О, btw, якщо ви не додасте пояснення принаймні, використовуйте прапор pls
лише для ASCII

@ ASCII тільки вибачте, я вважав, що багатослівна версія вважається поясненням.
Чарлі

Почекайте, що nvm цього не бачив
лише ASCII

Я не думаю , що це було правда в той час , але в ці дні ви можете заповнити багатокутник з довільної рядком і отримати саме результат вам потрібно для 9 байт: G→↘←Lθθ‖C.
Ніл

2

Haskell, 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: Спочатку у мене був список рядків, unlinesде u#_=uне вводиться перевірка, а пізніше я перейшов до створення єдиного рядка ... Дякую!
німі



1

Математика, 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

Japt , 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

Javascript (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 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.