एक स्ट्रिंग में वर्ण बदलें


12

इस चुनौती में, आपको इनपुट किए गए स्ट्रिंग n संख्या में वर्णों को स्थानांतरित करने और स्थानांतरित स्ट्रिंग को आउटपुट करने की आवश्यकता होती है

इनपुट

इनपुट में पहले एक स्ट्रिंग होगी। अगली पंक्ति में, एक पूर्णांक, जो दर्शाता nहै मौजूद होगा।

उत्पादन

  • यदि nसकारात्मक है, तो स्ट्रिंग में वर्णों को सही nसमय पर शिफ्ट करें ।
  • यदि nनकारात्मक है, तो वर्णों को स्ट्रिंग में बाईं ओर स्थानांतरित करें n
  • यदि nशून्य है, तो स्ट्रिंग में वर्णों को स्थानांतरित न करें।

शिफ्टिंग के बाद ( nशून्य होने पर छोड़कर ) शिफ्ट किए गए स्ट्रिंग को प्रिंट करें।

टिप्पणियाँ

  • स्ट्रिंग खाली नहीं होगी या null
  • स्ट्रिंग 100 वर्णों से अधिक लंबी नहीं होगी और इसमें ASCII वर्ण ( श्रेणी ) ~(tilde) (वर्ण कोड 0x20 से 0x7E, समावेशी) के वर्ण होंगे। संदर्भ के लिए ASCII तालिका देखें ।
  • पारी चक्रीय है।
  • संख्या nसकारात्मक, नकारात्मक या शून्य हो सकती है।
  • n हमेशा -1000 से अधिक या इसके बराबर या 1000 के बराबर या उससे कम होगा
  • आप stdinकमांड लाइन तर्कों के माध्यम से या इनपुट ले सकते हैं
  • स्थानांतरित स्ट्रिंग को stdout(या निकटतम समकक्ष) में आउटपुट किया जाना चाहिए
  • आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिख सकते हैं जो इनपुट लेता है और स्ट्रिंग को stdoutया निकटतम समकक्ष में आउटपुट करता है

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

1)

Hello world!
5             -->orld!Hello w

2)

Testing...
-3            -->ting...Tes

3)

~~~
1000          -->~~~

4)

12345
0             -->12345

5)

ABA
17            -->BAA

स्कोरिंग

यह , इसलिए सबसे छोटा सबमिशन (बाइट्स में) जीतता है।

जवाबों:


5

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

.>zQ

यह मेरे सीजेएम 5 बाइट संस्करण के लगभग समान है , सिवाय इसके कि पायथ एक ऑटो-इवेल इनपुट ऑपरेटर के रूप में है Q

.>              # Cyclic right shift of 
  z             # Input first line as string
   Q            # Rest of the input as evaluated integer

इसे यहाँ ऑनलाइन आज़माएँ


वास्तव में इस के रूप में एक ही समाधान :-)
Spikatrix

@CoolGuy इसकी बहुत सीधे आगे। हालाँकि, मैंने इसे सैंडबॉक्स में नहीं देखा था ..
ऑप्टिमाइज़र

किसी कारण से अब काम नहीं करता है। यहाँ एक वैकल्पिक विकल्प है, 4 बाइट्स भी।
अक्टूबर को hakr14

3

जावास्क्रिप्ट ( ईएस 5 ), 55 52 बाइट्स

p=prompt;with(p())p(slice(b=-p()%length)+slice(0,b))

टिप्पणी की:

p = prompt; // store a copy of prompt function for reuse
with(p()) // extend scope chain with first input
    p( // print result
        slice(b = -p() % length) // take second input negated and modulo length
        +                        // and slice string by result
        slice(0, b) // concatenate with opposite slice
    )

2

CJam, 5 बाइट्स

llim>

यह बहुत सीधा है।

l               e# Read the first line
 li             e# Read the second line and convert to integer
   m>           e# Shift rotate the first string by second integer places

इसे यहाँ ऑनलाइन आज़माएँ


1
क्या यह अंतर्निहित कार्यों के तहत आएगा?
लीजनमोनमल 978

@ LegionMammal978 यह है एक समारोह में बनाया। लेकिन ओपी निर्मित इन्स के उपयोग को प्रतिबंधित नहीं करता है
ऑप्टिमाइज़र

1
अंतर्निहित फ़ंक्शन मानक कमियां हैं
लीजनमोनमाल 978

4
@ LegionMammal978 आप एक उत्तर की ओर इशारा करते हैं जिसमें लगभग 50-50 अप / डाउन वोट हैं। यह सामुदायिक निर्णय नहीं है।
ऑप्टिमाइज़र

2

सी, 93 बाइट्स

main(a,v,n)char**v;{a=v[2]-v[1]-1;n=atoi(v[2]);a=a*(n>0)-n%a;printf("%s%.*s",v[1]+a,a,v[1]);}

अधिक स्पष्ट फ़ंक्शन-तर्क संस्करण है जिसे कमांड लाइन-तर्क संस्करण बनाने के लिए संशोधित किया गया था

f(s,n,c)char*s;{c=strlen(s);c=c*(n>0)-n%c;printf("%s%.*s",s+c,c,s);}

यह केवल 68 बाइट्स है, जो सिर्फ यह दिखाने के लिए जाता है कि कमांड लाइन के तर्कों से निपटने के दौरान सी कितना वंचित है।

यदि शिफ्ट, nपॉज़िटिव है तो strlen(s)-n%strlen(s)ऑफ़सेट है और अगर nनेगेटिव है तो ऑफ़सेट है -n%strlen(s)printfसे ऑफसेट प्रिंट, c, स्ट्रिंग के अंत, और फिर फाइनल में cशुरू से ही अक्षर।

उदाहरण:

$ ./rotstr "नमस्ते दुनिया!" 5
ओल्लो! नमस्ते डब्ल्यू
$ ./rotstr "परीक्षण ..." -3
टिंग ... Tes
$ ./rotstr "~~~" 1000
~~~
$ ./ क्रोस्ट "12345" 0
12345
$ ./ क्रोस्ट "एबीए" 17
BAA
$ ./rotstr "नमस्ते दुनिया!" -16
ओ दुनिया! नरक

यह मेरे लिए उम्मीद के मुताबिक काम नहीं करता है। जब कोड v[2]होता है "1", तो कोड बिना किसी संशोधन के स्ट्रिंग को आउटपुट करता है। और केवल "~~~"और "12345"काम करता है। उनमें से बाकी गलत आउटपुट देता है। यदि वे सभी एक बार और घूमते, तो यह ठीक हो जाता।
स्पाइकाट्रिक्स

मैंने इसे gcc और (मामूली संशोधन main(a,v,n)-> n;main(a,v)) दोनों के साथ linux पर परीक्षण किया है और यह उम्मीद के मुताबिक काम करता है। जीसीसी के लिए मैं 5.1.0 संस्करण का उपयोग कर रहा हूं और इसके साथ संकलन कर रहा हूं gcc -o rotstr rotstr.c। आप किस कंपाइलर का उपयोग कर रहे हैं?
सीएल-

nवैश्विक बनाने की भी कोशिश की । वही मुद्दा। मैंने प्रयोग करके संकलित किया gcc file.c -o file। मैं विंडोज़ पर जीसीसी 4.8.1 का उपयोग कर रहा हूं। क्या आपके कोड में कोई अपरिभाषित व्यवहार है?
स्पाइकट्रिक्स

के v[2]-v[1]-1साथ बदलने से strlen(v[1])फर्क पड़ सकता है, यही एकमात्र जगह है जिसके बारे में मैं सोच सकता हूं कि कुछ सूक्ष्म चल रहा है। दुर्भाग्य से मेरे पास परीक्षण करने के लिए एक विंडोज़ मशीन तक पहुंच नहीं है।
सीएल-

हाँ। जब मैंने उसे बदला तो कोड ने काम किया।
स्पाइकाट्रिक्स

2

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

s=input();n=int(input());print(s[-n:]+s[:-n])

कार्यक्रम का मूल है

s[-n:]+s[:-n]

बाकी सभी आई / ओ के साथ सिर्फ अनाड़ी काम है।


2
यह अंतिम ABA 17परीक्षण के मामले के लिए विफल है , और सामान्य रूप से अगर|n| > length of string
Sp3000

यदि आप उपयोग करते हैं n=int(input())%len(s);, तो यह स्ट्रिंग की लंबाई से अधिक पूर्णांकों के लिए काम करेगा, लेकिन इसके लिए 7 और पात्रों की आवश्यकता होगी
JPMC

2

के, 8 7 बाइट्स

{|x!|y}

पहले से ही एक आदिम "रोटेट" ( !) है जो सूचियों के लिए इस ऑपरेशन का सामान्यीकरण करता है। K तार वर्णों की सूची है, इसलिए यह लागू होता है। हालांकि, सीजेम और पायथ की कल्पना कुछ खास है, क्योंकि के रोटेट ऐसा होता है, जो वांछित होता है। !एक समारोह में लपेटना और निहित तर्क xको नकारना हम क्या चाहते हैं:

  f:{(-x)!y}
{(-x)!y}
  f[5;"Hello world!"]
"orld!Hello w"
  f[-3;"Testing..."]
"ting...Tes"
  f[17;"ABA"]
"BAA"

Kirbyfan64sos द्वारा सुझाया गया थोड़ा कम दृष्टिकोण, |रोटेशन से पहले और बाद में स्ट्रिंग ( ) को उलटने के पक्ष में कोष्ठक और नकार के साथ करना है ।

यदि यह इस प्रतिबाधा बेमेल के लिए नहीं थे, तो समाधान बस होगा

!

समान रूप से कहा जाता है:

  f:!
!
  f[5;"Hello, World!"]
", World!Hello"
  f[-5;"Hello, World!"]
"orld!Hello, W"
  f[0;"Hello, World!"]
"Hello, World!"

1
स्ट्रिंग को उल्टा करना |, उसको घुमाना, और फिर से उलटना उसी परिणाम को प्राप्त करेगा? यदि हां, तो आप एक चरित्र को काट सकते हैं।
kirbyfan64sos

अच्छी बात! इससे काम बन जाएगा।
जॉन

1

पिप, 10 बाइट्स

यह संभवत: आगे सुधार किया जा सकता है। फिर भी, बिना शिफ्ट ऑपरेटर वाली भाषा के लिए, 10 बाइट्स खराब नहीं हैं।

a@_M-b+,#a

स्पष्टीकरण:

            a, b are command-line args (implicit)
       ,#a  range(len(a))
    -b+     range(-b, len(a)-b)
a@_M        map(lambda x: a[x], range(-b, len(a)-b))
            Concatenate the list and print (implicit)

यह काम करता है क्योंकि पिप में स्ट्रिंग और सूची अनुक्रमण चक्रीय है "Hello"@9 == "Hello"@4 == "o":।


1

आरएस , 180 चार्ट

^(-\d+) (.*)/\1 \2\t
+^(-\d+) (.)(.*?)\t(.*)$/\1 \3\t\2\4
^(-\d+) \t/\1 
^(-?)(\d+)/\1 (_)^^(\2)
+_(_*) (.*)(.)$/\1 \3\2
^- /- \t
+^- (.*?)\t(.*?)(.)$/- \1\3\t\2
^-? +/
\t/

लाइव डेमो

यदि इनपुट नंबर ऋणात्मक है, तो इसका अधिकांश भाग स्ट्रिंग को उलट रहा है। मैंने इस तथ्य का लाभ उठाया कि केवल कुछ ASCII वर्ण वैध इनपुट हैं और मेरे लाभ के लिए टैब का उपयोग किया है।

ध्यान दें कि मुझे थोड़ा धोखा देना था: चूंकि आरएस एक एकल-पंक्ति पाठ संशोधक है, इसलिए मुझे <number> <text>इनपुट प्रारूप के रूप में उपयोग करना था ।


1

जावा, 167

enum S{;public static void main(String[]r){int n=-Integer.parseInt(r[1]),l=r[0].length();while(n<0)n+=l;n%=l;System.out.print(r[0].substring(n)+r[0].substring(0,n));}}

कमांड लाइन के माध्यम से इनपुट लेता है।

मजाकिया तौर पर, मूल रूप से मैं गलती से पलट गया था कि स्ट्रिंग को कैसे स्थानांतरित किया जाना चाहिए था। लेकिन उस गलती को ठीक करना सिर्फ n से 1 गुणा करना कम था फिर तर्क को ठीक से लिखना।

विस्तार:

enum Shift{
    ;
    public static void main(String[]args){
        int n=-Integer.parseInt(args[1]),length=args[0].length();
        while(n<0)n+=length;
        n%=length;
        System.out.print(args[0].substring(n)+args[0].substring(0,n));
    }
}

आपके पास क्यों है enum S{; ... }?
स्पिकैट्रिक्स

1
मैंने पूरा कार्यक्रम लिखने का विकल्प चुना क्योंकि 9 बाइट्स वास्तव में बहुत बड़ा अंतर नहीं था। यह भी एक अनुस्मारक है जब मैं enum S {...} को वर्ग S {...} पर पसंद करने के लिए वापस देखता हूं क्योंकि (भले ही वे इस उदाहरण में बाइट्स की समान संख्या लेते हैं) अगर मुझे कभी भी एक उदाहरण की आवश्यकता होती है कक्षा में, यह एनम संस्करण के साथ एक बाइट लेता है: एनम एस {एक्स; ...}। यह तब मदद करता है जब मैं स्थिर कीवर्ड का उपयोग किए बिना या कक्षा के किसी नए ऑब्जेक्ट को तुरंत इंस्टेंट करने के लिए कक्षा में एक विधि या चर घोषित करना चाहता हूं।
जैक अम्मो

वाह! अच्छा लगा। कभी नहीं पता था कि enumइस तरह से इस्तेमाल किया जा सकता है!
स्पिकैट्रिक्स

मुझे पता है कि यह पोस्ट करने के बाद आपको दो साल के करीब हो गया है, लेकिन आप कुछ चीजों को गोल्फ कर सकते हैं। Integer.parseIntहो सकता है new Integer(-5 बाइट्स); और n%=l;अगर आप को बदलने हटाया जा सकता है r[0].substring(n)+के लिए r[0].substring(n%=l)+(-2 बाइट्स)। इसके अलावा, आप यह निर्दिष्ट करना चाह सकते हैं कि यह जावा 6 है, क्योंकि जावा 7 या उच्चतर में main-मैथोड के साथ अब और संभव नहीं है।
केविन क्रूज़सेन

संपादित करने के लिए परेशान करने के लिए आलसी, लेकिन बचत के लिए समय पर ध्यान दिया।
जैक अमो

1

PHP> = 7.1, 88 बाइट्स (गैर-प्रतिस्पर्धात्मक)

for([,$s,$t]=$argv;$t;)$s=$t<0?substr($s,1).$s[!$t++]:$s[-1].substr($s,!$t--,-1);echo$s;

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


Why गैर-प्रतिस्पर्धी ’क्यों?
स्पिकट्रिक्स

@CoolGuy PHP संस्करण का उपयोग किया जाता है जो प्रश्न शुरू होने के बाद निर्मित होता है
Jörg Hülsermann


1

कैसियो बेसिक, 27 बाइट्स

StrRotate s,s,-n:Print s

जैसा कि यह पता चला है, कैसियो क्लासपैड पर इसके लिए एक अंतर्निर्मित है! लेकिन यह उल्टा काम करता है, इसलिए -n

कोड के लिए 24 बाइट्स, s,nतर्क के रूप में निर्दिष्ट करने के लिए 3 बाइट्स ।


1

05AB1E , 6 बाइट्स

DgI+FÁ

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

D         # Duplicate the text input
 g        # Take it's length
          #  i.e. "Testing..." → 10
  I       # Take the integer input
   +      # Add them together
          #  i.e. 10 and -3 → 7
    F     # Loop that many times
     Á    #  And rotate once towards the right during every iteration

चूंकि 05AB1E में केवल दाएं / बाएं की ओर एक बार घुमाए जाने के लिए बिल्डिंस हैं , और दाएं / बाएं की ओर राशि घुमाएंN नहीं , मैं length + inputकई बार लूप करता हूं और कई बार दाईं ओर घुमाता हूं ।

उदाहरण के लिए:

  • "परीक्षण ..." और -3 10 + -3 = 7सही समय की ओर घूमेंगे , जिसके परिणामस्वरूपting...Tes
  • "नमस्ते दुनिया" और 5 11 + 5 = 16बार दाईं ओर घूमेंगे , जिसके परिणामस्वरूप worldHello



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