একটি স্ট্রিং মধ্যে অক্ষর স্থানান্তর


12

এই চ্যালেঞ্জে আপনাকে একটি ইনপুটযুক্ত স্ট্রিংয়ে অক্ষর স্থানান্তর করতে হবে n বার এবং আউটপুট স্থানান্তরিত স্ট্রিং

ইনপুট

ইনপুটটিতে প্রথমে একটি স্ট্রিং থাকবে। পরবর্তী লাইনে, একটি পূর্ণসংখ্যা, যা চিহ্নিত nকরবে।

আউটপুট

  • যদি nইতিবাচক হয় তবে স্ট্রিংয়ের অক্ষরগুলি সঠিক nসময়ে সরিয়ে দিন।
  • যদি nনেতিবাচক হয় তবে স্ট্রিংয়ের অক্ষরগুলি বাম nবারে স্থানান্তর করুন ।
  • যদি nশূন্য হয় তবে স্ট্রিংয়ের অক্ষরগুলি স্থানান্তর করবেন না।

স্থানান্তরিত হওয়ার পরে (যখন nশূন্য হয় বাদে ), স্থানান্তরিত স্ট্রিংটি মুদ্রণ করুন।

মন্তব্য

  • স্ট্রিং ফাঁকা বা হবে না null
  • স্ট্রিংটি 100 টি অক্ষরের বেশি হবে না এবং কেবলমাত্র পরিসীমা (স্পেস) থেকে ~(টিলডে) অক্ষর কোডগুলি 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

কুলগুই এটি বেশ সোজা এগিয়ে। যদিও, আমি এটি স্যান্ডবক্সে দেখিনি ..
অপ্টিমাইজার

কোনও কারণে আর কাজ করা বলে মনে হচ্ছে না। এখানে একটি কার্যকরী বিকল্প, এছাড়াও 4 বাইট।
hakr14

3

জাভাস্ক্রিপ্ট ( ES5 ), 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

সিজেম, 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
এটি কি অন্তর্নির্মিত কার্যগুলির মধ্যে পড়বে?
LegionMammal978

@ LegionMammal978 এটা হল একটি ফাংশন সালে নির্মিত। তবে ওপি বিল্ট ইনগুলির ব্যবহারকে সীমাবদ্ধ করে না
অপটিমাইজার

1
অন্তর্নির্মিত ফাংশনগুলি স্ট্যান্ডার্ড লুফোলস
LegionMammal978

4
@ লেজিমনমামল ৯78৮ আপনি এমন একটি উত্তরের দিকে নির্দেশ করেছেন যার প্রায় ৫০-৫০ আপ / ডাউন ভোট রয়েছে। এটি কোনও সম্প্রদায়ের সিদ্ধান্ত নয়।
অপ্টিমাইজার

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 "পরীক্ষা ..." -৩
Ting ... TES
$ ./rotstr "~~~" 1000
~~~
$ ./rotstr "12345" 0
12345
$ ./rotstr "এবিএ" 17
বি বি এ BBA
$ ./rotstr "হ্যালো ওয়ার্ল্ড!" -16
হে দুনিয়া!

এটি আমার প্রত্যাশার মতো কাজ করে না। যখন v[2]হয় "1", কোড কেবল কোনো পরিবর্তন ছাড়াই স্ট্রিং আউটপুট। এবং শুধুমাত্র "~~~"এবং "12345"কাজ করে। তাদের বাকিগুলি ভুল আউটপুট দেয়। তারা সকলেই যদি আরও একবার ঘোরান, তবে এটি সংশোধন হত।
স্পিক্যাট্রিক্স

আমি এটি জিসিসি এবং লিনাক্সের (কিছুটা সংশোধন main(a,v,n)-> n;main(a,v)) ঝনঝন উভয়ের মাধ্যমে পরীক্ষা করেছি এবং এটি প্রত্যাশার মতো কাজ করে। জিসিসির জন্য আমি সংস্করণ 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]

বাকিগুলি কেবল I / O নিয়ে আনাড়ি কাজ।


2
এটি সর্বশেষ ABA 17পরীক্ষার ক্ষেত্রে ব্যর্থ হয় এবং সাধারণভাবে যদি হয়|n| > length of string
Sp3000

আপনি যদি n=int(input())%len(s);এটি ব্যবহার করেন তবে এটি স্ট্রিং দৈর্ঘ্যের চেয়ে বেশি পূর্ণসংখ্যার জন্য কাজ করবে তবে এর জন্য আরও 7 টি অক্ষর প্রয়োজন
JPMC

2

কে, 8 7 বাইট

{|x!|y}

ইতিমধ্যে একটি আদিম "ঘোরান" ( !) রয়েছে যা তালিকার জন্য এই ক্রিয়াকলাপটির একটি সাধারণীকরণ করে। কে স্ট্রিংগুলি অক্ষরের তালিকাগুলি, তাই এটি প্রযোজ্য। অনুমানগুলি সিজেম এবং পাইথকে কিছুটা পক্ষপাতিত করে, কারণ কে এর আবর্তিত যা পছন্দসই তার বিপরীত দিকে যেতে ঘটে। !কোনও কার্যক্রমে মোড়ানো এবং অন্তর্নিহিত যুক্তি উপেক্ষা করা xআমরা যা চাই তা করবে:

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

কির্বিফ্যান 64৪ সোস দ্বারা প্রস্তাবিত একটি সামান্য খাটো পদ্ধতির অর্থ হল |ঘূর্ণনের আগে এবং পরে স্ট্রিংটি ( ) বিপরীত করার পক্ষে বন্ধনী এবং অবহেলা বাদ দেওয়া ।

যদি এটি এই প্রতিবন্ধী ম্যাচটির জন্য না হয়, তবে সমাধানটি সহজ হবে

!

অভিন্নভাবে কল করা:

  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

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 বাইট সত্যই একটি বিশাল পার্থক্য তৈরি করে নি। এছাড়াও যখন আমি এনাম এস prefer; ... class ক্লাস এস} ...} এর চেয়ে বেশি পছন্দ করি তখন এটি একটি অনুস্মারক কারণ কারণ (যদিও তারা এই উদাহরণে একই সংখ্যক বাইট গ্রহণ করে) যদি আমার কখনও উদাহরণ প্রয়োজন হয় শ্রেণীর, এটি এনাম সংস্করণটির সাথে আরও একটি বাইট নেয়: এনাম এস {এক্স; ...}} স্ট্যাটিক কীওয়ার্ড ব্যবহার না করে বা স্পষ্টভাবে ক্লাসের নতুন কোনও অবজেক্টটি ইনস্ট্যান্ট না করে আমি ক্লাসে কোনও পদ্ধতি বা পরিবর্তনশীল ঘোষণা করতে চাইলে এটি সহায়তা করে।
জ্যাক আম্মো

কি দারুন! খুশী হলাম। কখনই জানতেন না যে enumএস ব্যবহার করা যেতে পারে!
স্পিক্যাট্রিক্স

আমি জানি যে আপনি এটি পোস্ট করার পরে প্রায় দুই বছর হয়ে গেছে, তবে আপনি কয়েকটি জিনিস গল্ফ করতে পারেন। (-5 বাইট) Integer.parseIntহতে পারে new Integer; এবং n%=l;যদি আপনি পরিবর্তন মুছে ফেলা হতে পারে r[0].substring(n)+জন্য r[0].substring(n%=l)+(-2 বাইট)। এছাড়াও, আপনি এটি জাভা 6 নির্দিষ্ট করতে চাইতে পারেন, কারণ জাভা 7 বা উচ্চতর main-মাদূরের সাথে একটি এনাম আর সম্ভব নয়।
কেভিন ক্রুইজসেন

সম্পাদনা বিরক্ত করতে খুব অলস, তবে সঞ্চয়ের জন্য যথাযথভাবে উল্লেখ করা হয়েছে।
জ্যাক আম্মো

1

পিএইচপি> = 7.1, 88 বাইট (প্রতিযোগিতা না করা)

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

Testcases


'প্রতিদ্বন্দ্বিতা' কেন?
স্পিক্যাট্রিক্স

@ কুলগুই যে পিএইচপি সংস্করণ ব্যবহার করা হয়েছে তা প্রশ্ন শুরুর পরে তৈরি করা হয়েছে
জার্গ হালসারম্যান


1

ক্যাসিও বেসিক, 27 বাইট

StrRotate s,s,-n:Print s

দেখা যাচ্ছে, ক্যাসিও ক্লাসপ্যাডে এটির জন্য একটি বিল্ট-ইন রয়েছে! তবে এটি বিপরীতে কাজ করে-n

কোডের জন্য 24 বাইট, s,nআর্গুমেন্ট হিসাবে নির্দিষ্ট করতে 3 বাইট ।


1

05 এ বি 1 ই , 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 শুধুমাত্র builtins হয়েছে ঘোরান একবার ডান / বাম দিকে , এবং ঘোরান Nডান / বাম দিকে পরিমাণ , আমি লুপlength + input এবং বার পরিমাণ ডান দিকে যে অনেক বার আবর্তিত।

উদাহরণ স্বরূপ:

  • "টেস্টিং ..." এবং -3 10 + -3 = 7সময়গুলি ডানদিকে ঘুরবে , ফলস্বরূপting...Tes
  • "হ্যালো ওয়ার্ল্ড" এবং 5 টি 11 + 5 = 16বারের ডান দিকে ঘোরবে , ফলস্বরূপ worldHello



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.