स्क्वायर-अनस्पिरल द स्ट्रिंग!


12

एक स्ट्रिंग को देखते हुए, पहले इसे निम्नानुसार वर्गित करें:

सबसे पहले, स्ट्रिंग लिखें।

abcde

इसके बाद, स्ट्रिंग को बाईं ओर घुमाएं।

abcde
bcdea

ऐसा तब तक करते रहें जब तक कि आपने लेन (स्ट्रिंग) की पंक्तियाँ न लिखी हों ।

abcde
bcdea
cdeab
deabc
eabcd

अब, स्ट्रिंग से इस तरह पढ़ें:

----+
+--+|
|+>||
|+-+|
+---+

जो देता है:

abcdeabcdcbaedcbcdeabaede

इस स्ट्रिंग को प्रिंट करें।

परीक्षण के मामलों

abcdef -> abcdefabcdedcbafedcbcdefabcbafedefaf
cena! -> cena!cenanec!anena!cec!a!
ppcg -> ppcgppcppgcpcgpg
abc -> abcabacbc
ab -> abab
a -> a
 -> 

यदि कोई परीक्षण मामला गलत है, तो कृपया टिप्पणी करें।

याद रखें, यह , इसलिए सबसे कम संख्या में बाइट्स जीतता है।


2
cena!गलत है। यह आपके उदाहरण के साथ मेल खाना चाहिए abcdeक्योंकि दोनों 5 अक्षर हैं:cena!cenanec!anena!cec!a!
लाइनस

@Linus धन्यवाद, मैंने इसे ठीक कर दिया है।
ओलिवर नी

जवाबों:


7

जावास्क्रिप्ट (ईएस 7), 83 80 78 77 बाइट्स

s=>s.repeat(l=s.length).replace(/./g,_=>s[(c-=--i**.5-l&1||-1)%l],c=-1,i=l*l)

बोनस ES3- आज्ञाकारी कार्यक्रम:

for(s=prompt(r=""),c=-1,l=s.length,i=l*l;i;)r+=s[(c-=l-Math.sqrt(i--)&1||-1)%l];alert(r)

व्याख्या

यह इस तथ्य का लाभ उठाता है कि उदाहरण के लिए 5 स्ट्रिंग की लंबाई के रूप में आउटपुट का प्रतिनिधित्व किया जा सकता है:

abcdeabcd cbaedcb cdeab aed e
012345678 7654321 23456 543 4

जहां प्रत्येक अंक स्ट्रिंग में एक सूचकांक (0 पर शुरू) का प्रतिनिधित्व करता है, स्ट्रिंग की लंबाई को मापता है। दूसरे शब्दों में, यदि n स्ट्रिंग की लंबाई है, तो हम सूचकांक को 2n - 1 गुना बढ़ाते हैं , फिर इसे 2 (n - 1) - 1 बार घटाते हैं, फिर इसे 2 (n - 2) - 1 बार बढ़ाते हैं , आदि। इसे निम्नलिखित एल्गोरिथ्म में सरल बनाया जा सकता है:

  • इंडेक्स I को -1 से शुरू करें ।
  • सीमा में प्रत्येक पूर्णांक x के लिए [n 2 ..1] :
    • यदि तल (sqrt (x)) समान समता (सम / विषम) के रूप में n , वृद्धि i है
    • अन्यथा, क्षय i
    • सूचकांक I mod n में आउटपुट पर वर्ण जोड़ें ।

यह काम करता है क्योंकि मंजिल (sqrt (x)) 2n - 1 पुनरावृत्तियों, फिर 2 (n - 1) - 1 पुनरावृत्तियों, आदि के बाद समता को स्विच करता है ।


हास्यास्पद। बहुत बढ़िया!
मेयरमोनी

1

अजगर , 15 बाइट्स

.Wp.(H0_CZ.<LQU

एक प्रोग्राम जो इनपुट लेता है "quoted string"और परिणाम प्रिंट करता है।

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें (एकाधिक इनपुट के लिए संशोधित)।

यह काम किस प्रकार करता है

.Wp.(H0_CZ.<LQU  Program. Input: Q
            L U  Map over [0, 1, 2, 3, ..., Q-1] (implicit input):
          .< Q     Q left-shifted by that many characters
                 Call this X
.W               While
   .(H0          popping the first element of X (mutates X in-place)
  p              and printing it with no trailing newline is truthy:
         Z           X = 
        C            X transposed
       _             reversed

1

पायथन 2.7 (CMD.EXE में), 91 बाइट्स

इसके लिए वर्किंग बैकस्पेस ( \b) के साथ टर्मिनल की आवश्यकता होती है , और repl.it या ideone.com पर काम नहीं करेगा । अल्पविराम में समाप्त होने वाला एक प्रिंट स्टेटमेंट एक नई पंक्ति या वापसी के बजाय अंतरिक्ष के साथ आगे के आउटपुट को अलग करता है। बैकस्पेस हमें अलग करने वाले स्थान को अधिलेखित करने की अनुमति देता है।

s=input();r=s[::-1];n=len(s)-1;i=0
while i<=n:print'\b'+s[i:]+s[:n-i]+r[i+2:]+r[:n-i],;i+=2

पायथन 2.7, 96 बाइट्स

इसे ideone.com या repl.it (ऑलिवर के लिए धन्यवाद) पर आज़माएं । इनपुट एक अजगर स्ट्रिंग होना चाहिए, उदाहरण के लिए 'cena!'

s=input();r=s[::-1];n=len(s)-1;i=0;S=''
while i<=n:S+=s[i:]+s[:n-i]+r[i+2:]+r[:n-i];i+=2
print S

चार स्लाइस पाश से संलग्न ( s[i:], s[:n-i], r[i+2:], r[:n-i]) सर्पिल के चार किनारों से लिया जाता है। उदाहरण के 01234लिए वर्ग के साथ है:

01234
12340
23401
34012
40123

तो हम ले 01234, 0123, 210, 4321। चर iप्रक्रिया के प्रत्येक चरण में शीर्ष-बाएँ मान का सूचकांक है। अंतिम सर्पिल में कई स्लाइस खाली हो सकते हैं।


यह शायद ही नहीं बचा है, लेकिन अजगर से 3 बदलकर, से छुटकारा पाने के है S='', print Sऔर S+=, और इससे पहले रैपिंग सब कुछ i+=2एक में print()साथ बयान sep='', आप 2 बाइट्स बचा सकता है।
केड

@ साहेब मैं सही से पीछा नहीं कर रहा हूँ। अपने आप को एक अजगर 3 जवाब देने के लिए स्वतंत्र महसूस करें।
लीनस

आप बदल सकते हैं i<=nकरने के लिएn>i
ओलिवर नी

यह एक बाइट बचाता है।
ओलिवर नी

@Oliver, धन्यवाद ... लेकिन यह करता है काम नहीं करने के लिए"a string of odd length."
लीनुस

1

जेली , 11 10 बाइट्स

ẋ2µṖȮṖUµÐL

TryItOnline! , या सभी परीक्षण

कैसे?

अनस्पिरेल्ड स्क्वायर "टॉप-एज प्लस राइट-एज" और "बॉटम-एज प्लस लेफ्ट-एज" की एक श्रृंखला है, जिसमें से प्रत्येक पहले और आखिरी अक्षर के बिना पिछले रन का रिवर्स है, और जिसमें से पहला अंतिम पत्र के बिना इनपुट प्लस इनपुट है (जैसे इनपुट "abcde"का आउटपुट है "abcdeabcd" + "cbaedcb" + "cdeab" + "aed" + "e")।

ẋ2µṖȮṖUµÐL - Main link: s                            e.g. abcde
ẋ2         - repeat s twice                          e.g. abcdeabcde
  µ    µ   - monadic chain separation
        ÐL - repeat until results are no longer unique:
   Ṗ       -     remove the last character                abcdeabcd / cbaedcb / cdeab / aed / e   / ""
    Ȯ      -     print z (with no linefeed) and return z
     Ṗ     -     remove the last character                abcdeabc  / cbaedc  / cdea  / ae  / ""  / ""
      U    -     reverse                                  cbaedcba  / cdeabc  / aedc  / ea  / ""  / "" <- no longer unique.

1

05AB1E, 12 बाइट्स

2×[DõQ#¨D?¨R

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

स्पष्टीकरण:

 2×[DõQ#¨D?¨R
               # Implicit input
 2×            # Repeat twice
   [           # Begin infinite loop
┏>  DõQ#       # If empty string, break
┃       ¨      # Remove last character
┃        D     # Duplicate
┃         ?    # Print with no newline and pop
┃          ¨   # Remove last character
┃           R  # Reverse
┗━━━━━━━━━━━━┛ # Implicit end infinite loop


0

सी, 95 94 बाइट्स

i,j,k,l;f(char*s){for(k=-1,l=i=strlen(s);i--;)for(j=i*2;~j--;putchar(s[(k+=(l-i)%2*2-1)%l]));}

@ETHproductions उत्तर से प्रेरित।


0

पर्ल, 99 बाइट्स

$_=<>;
chop;
@a=split//;
print(@a[$%,(@f=1-($b=@a-$%)..$b-3),$b-1?$b-2:(),reverse@f]),$%+=2 until$%>@a

व्हॉट्सएप कार्यक्रम का हिस्सा नहीं है और पठनीयता के लिए प्रदान किया जाता है।

अत्यंत कुशल कोड नहीं। मैं किसी भी तरह पहली तीन पंक्तियों को छोटा करने में सक्षम होना चाहिए, लेकिन मैंने जो कुछ भी करने की कोशिश की वह विफल रही। उस टर्नरी ऑपरेटर को भी किसी तरह तय किया जाना चाहिए, लेकिन इस तरह से होने से मेरे कोड को 10 बाइट्स से छोटा करना संभव हो गया क्योंकि मैं इतना काट सकता था।

कोड palindromes की एक सूची को संकलित करके काम करता है, यहां तक ​​कि संख्याओं द्वारा अलग किया जाता है, जो खींचे जाने वाले स्ट्रिंग के स्थान मूल्यों का प्रतिनिधित्व करता है।


आप का उपयोग कर सकते हैं -F जो लाइन 1 और 3 को बदल देगा। इनपुट echo -nको हटाने के लिए साथ दें chop। (जो आपको 81 बाइट के आसपास मिलना चाहिए)
दादा

0

दरअसल , 21 13 बाइट्स

यह एल्गोरिथ्म काफी हद तक जोनाथन एलन के जेली उत्तर पर आधारित है । परिणाम को एक स्ट्रिंग के रूप में प्रिंट करने के बारे में जाने के दो तरीके हैं। यहां उपयोग किया गया दृष्टिकोण एक मध्यवर्ती चरण को दोहराता है और फिर इसे रजिस्टर 1 में एक रनिंग कुल में जोड़ता है (डिफ़ॉल्ट रूप से एक रिक्त स्ट्रिंग); ;╕फ़ंक्शन में, फिर अंत में। अन्य दृष्टिकोण एक मध्यवर्ती कदम की नकल करने के लिए है, उन डुप्लिकेट चरणों को स्टैक पर छोड़ दें, और उन्हें अंत में एक स्ट्रिंग में योग करें; ;फ़ंक्शन में, फिर अंत में।

गोल्फ सुझाव का स्वागत करते हैं। इसे ऑनलाइन आज़माएं!

2*`dX;╕dXR`Y╛

Ungolfing

         Implicit input s.
2*       Push a string that repeats s two times.
`...`Y   Call the following function until there is no change from the last call
  dX       Discard the last element. Call this new string m.
  ;╕       Duplicate m and add it to the running total in register 1.
  dXR      Discard the last element again and reverse the string.
╛        Push the unspiralled string from register 1 to the stack.
         Implicit return.

0

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

x=input()*2
while x:x=x[:-1];print(x,end='');x=x[:-1][::-1]

repl.it

मेरे जेली उत्तर का सीधा पोर्ट ; केवल एक पूरा कार्यक्रम इनपुट (एक फ़ंक्शन के बजाय) ले रहा है। एक प्रिंट बयान जो डिफ़ॉल्ट न्यू लाइन मुद्रित नहीं होगा।
print(x,end='')


-1

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

s=input();r,n,i=s[::-1],len(s)-1,0
while n-i:print(s[i:]+s[:n-i]+r[i+2:]+r[:n-i],end='');i+=2

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


इसके बजाय print(...,end=''), क्या करेंprint(end=s[i:]+s[:n-i]+r[i+2:]+r[:n-i]
NovT 416 को पलटें

1
वैसे भी, यह समाधान काम नहीं करता है abcde, यह eअंत में गायब है ।
NovT 416 को पलटें

अपनी स्थिति के i<=nबजाय प्रयास करें n-i
लिनस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.