मुझे एक महल का निर्माण सीढ़ी!


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
    


क्या सीढ़ी को ऊपर जाना शुरू नहीं करना चाहिए, और फिर नीचे जाने के बजाय नीचे जाना चाहिए? : पी
स्टीफन

@StepHen इस चुनौती के उद्देश्य के लिए, यह नहीं होना चाहिए: p
श्री Xcoder


dabसी। -------
ओलिवर नी

जवाबों:


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


4

जेली , 16 बाइट्स

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

इसे ऑनलाइन आज़माएं!

बेशक, -1 का उपयोग करते हुए जोनाथन एलन की ɓ!


मेरा समाधान भी इसी तरह के मेथिंक है, यहां आप जाते हैं: J’ɓ⁹⁶ẋ;"ṙz⁶Zm€0Y(या के LḶलिए J’)
जोनाथन एलन

@ जोनाथनअलन हेह।
एर्ग आउटफोलर

3

रेटिना , 47 बाइट्स

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

¶

इसे ऑनलाइन आज़माएं! स्पष्टीकरण: पहला चरण प्रत्येक चरित्र पर विचार करके और वर्तमान स्थिति के बराबर रिक्त स्थान बनाकर, फिर शेष स्ट्रिंग, फिर स्ट्रिंग की शुरुआत, फिर स्ट्रिंग के शेष के बराबर स्थान बनाता है। बाकी स्क्रिप्ट बस बारी में उत्पन्न प्रत्येक पंक्ति पर चलती है। पहले लाइन को डुप्लिकेट किया जाता है, फिर डुप्लिकेट में वर्णों को उलट दिया जाता है, फिर लाइन और उसके डुप्लिकेट को संक्षिप्त किया जाता है।


3

पायथन 3 , 89 बाइट्स

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

इसे ऑनलाइन आज़माएं!

-1 बाइट ओवस के लिए धन्यवाद

-1 बाइट की बदौलत लिन


l-i-1बस के l+~iरूप में किया जा सकता है~i == -i-1
21:00

' '*(l+~i)*2बराबरी '  '*(l+~i), जो एक बाइट कम है!
लिन


2

चारकोल , 23 21 20 बाइट्स

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

इसे ऑनलाइन आज़माएं!

शायद अधिक गोल्फ हो सकता है, लेकिन मैं मोबाइल ऐप से पोस्ट कर रहा हूं। वर्बोज़ संस्करण से लिंक करें ।


ओह btw अगर आप कम से कम उपयोग -ए ध्वज को स्पष्टीकरण नहीं जोड़ते हैं तो pls
केवल

@ ASCII- केवल खेद है, मैंने सोचा कि वर्बोज़ संस्करण को स्पष्टीकरण के रूप में गिना जाता है।
चार्ली

प्रतीक्षा करें कि nvm ने क्या नहीं देखा
केवल

मुझे नहीं लगता कि यह उस समय सच था, लेकिन इन दिनों आप एक बहुभुज को एक मनमाना स्ट्रिंग के साथ भर सकते हैं और आपको 9 बाइट्स की आवश्यकता होती है G→↘←Lθθ‖C
नील

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

संपादित करें: बाइट के लिए @ Johanrjan जोहान्सन को धन्यवाद।


u#_=uएक बाइट बचाता है।
अर्जन जोहान्सन

@ ArjanJohansen: मेरे पास पहले स्ट्रिंग्स की एक सूची थी और unlinesजहां u#_=uचेक टाइप नहीं किया गया था और बाद में एक स्ट्रिंग बनाने के लिए स्विच किया गया ... धन्यवाद!
निमि



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

जाप , 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

जावास्क्रिप्ट (ईएस 6), 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

पायथन 2 , 85 83 बाइट्स

  • 2 बाइट्स के लिए धन्यवाद @ नोव्स: l+~iऔर मुझे एक अनचाहे स्थान को खोजने में मदद की
x=input()
l=len(x)
for i in range(l):r=i*' '+x[i:]+x[:i]+(l+~i)*' ';print r+r[::-1]

इसे ऑनलाइन आज़माएं!


1
l-1-iबस के l+~iरूप में हो सकता है~i == -i-1
जूल

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.