খণ্ডগুলি দ্বারা একটি স্ট্রিং বিপরীত


34

আপনার কাজটি এমন একটি প্রোগ্রাম লিখতে হয় যা একটি সংখ্যা এবং একটি স্ট্রিং দিয়ে স্ট্রিংটিকে সেই আকারের অংশগুলিতে ভাগ করে দেয় এবং তাদের বিপরীত করে দেয়।

বিধি

আপনার প্রোগ্রামটি ইতিবাচক পূর্ণসংখ্যার nপাশাপাশি sকমপক্ষে দৈর্ঘ্যের একটি স্ট্রিং প্রাপ্ত করবে যা কেবলমাত্র মুদ্রণযোগ্য এএসসিআইআই (হোয়াইটস্পেস সহ নয়) সমন্বিত থাকে। তারপরে স্ট্রিংটি দৈর্ঘ্যের অংশগুলিতে বিভক্ত করা উচিত n, যদি স্ট্রিংটির দৈর্ঘ্যটি nকোনও অবশিষ্ট অংশ দ্বারা বিভাজ্য না হয় তবে তার নিজের অংশ হিসাবে বিবেচনা করা উচিত। তারপরে, খণ্ডগুলির ক্রমটি বিপরীত করুন এবং তাদের আবার একসাথে রাখুন।

পরীক্ষার মামলা

n   s           Output

2   abcdefgh    ghefcdab
3   foobarbaz   bazbarfoo
3   abcdefgh    ghdefabc
2   a           a
1   abcdefgh    hgfedcba
2   aaaaaa      aaaaaa
2   baaaab      abaaba
50  abcdefgh    abcdefgh
6   abcdefghi   ghiabcdef

এটি , সুতরাং আপনার যতদূর সম্ভব কম বাইটের লক্ষ্য রাখা উচিত।


উত্তর:


29

জেলি , 2 বাইট

sṚ

একটি সম্পূর্ণ প্রোগ্রাম যা ফলাফল মুদ্রণ করে।

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

sṚ - Main link: string, number                                   e.g. 'abcdefg', 3
s  - split string into chunks of length number (keeping any overflow) ["abc","def","g"]
 Ṛ - reverse the resulting list                                       ["g","def","abc"]
   - implicit print                                                   gdefabc

28
আমি পছন্দ করি কীভাবে দুটি বাইট ব্যাখ্যাের 4 টি লাইন তৈরি করেছে।
পাভেল

16

পাইথন 3 , 35 বাইট

f=lambda s,n:s and f(s[n:],n)+s[:n]

এটি অনলাইন চেষ্টা করুন!


andকীওয়ার্ডটি এখানে কীভাবে কাজ করে? @ ডেনিস
শিনমিগামি 13

2
@ শিনমিগামি 13 খালি স্ট্রিং সত্য নয় তাই এটি পুনরাবৃত্তিটি শেষ করে
মাইকেল ক্লেইন


8

জাভাস্ক্রিপ্ট (ES6), 37 বাইট

n=>F=s=>s&&F(s.slice(n))+s.slice(0,n)

কারিটি করে ইনপুট নেয়: প্রথমে নম্বর, তারপরে স্ট্রিং, পছন্দ করে f(2)("abcdefgh")


7

পার্ল 6 ,  28  20 বাইট

{$^b.comb($^a).reverse.join}

চেষ্টা করে দেখুন

{[R~] $^b.comb($^a)}

চেষ্টা করে দেখুন

সম্প্রসারিত:

{  # bare block lambda with placeholder parameters 「$a」 and 「$b」
  [R[~]] # reduce the following using the reverse meta operator `R`
         # combined with the string concatenation operator

    # `comb` with a number splits the invocant into chunks of that size
    $^b.comb($^a)
}




4

রাদা , 36 বাইট

f n{[[_]..[try head n-1]]|reverse|_}

এটি অনলাইন চেষ্টা করুন!

এটি একটি ফাংশন যা একটি যুক্তি লাগে। স্ট্রিংয়ের অক্ষর অবশ্যই প্রবাহে থাকা উচিত।

tryheadফাংশনটি n-1মানগুলি পড়তে না পারে সে ক্ষেত্রে ত্রুটিগুলি বাতিল করতে ব্যবহৃত হয় ।

ব্যাখ্যা:

f n{[[_]..[try head n-1]]|reverse|_}
f n{                               } /* Function declaration */
                                     /* In a loop: */
      _                              /*   Pull one value */
           try head n-1              /*   Pull n-1 values (or less) */
     [ ]..[            ]             /*   Make an array */
    [                   ]            /*   Push it to the stream */
                         |reverse    /* Reverse all values in the stream */
                                 |_  /* Flat all arrays in the stream */
                                     /* Characters in the stream are printed */

সাধারণত হিসাবে অপ্রচলিত না। আমি মনে করি এটি বেশ সুন্দর। :)


5
আপনি জেলি সমাধানের চেয়ে কোনও প্রোগ্রামকে কম পঠনযোগ্য করে তোলেন।
পাভেল

এর [[try head n]]বদলে কেন কাজ হয় না [[_]..[try head n-1]]?
ক্রিটসি লিথোস

@KritixiLithos কারণ _অভিব্যক্তি loops। একবারে[[try head n]] n টি মান নিবে , তবে যতক্ষণ মান বাকী থাকবে ততক্ষণ n মানগুলি নেবে। [[_]..[try head n-1]]
ফার্গুসক

4

সিজেম , 5 বাইট

q~/W%

ইনপুট হ'ল স্পেস দ্বারা পৃথক করা ডাবল কোটে বিভক্ত একটি সংখ্যা এবং একটি স্ট্রিং।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

q~   e# Read all input and evaluate: pushes a number and a string
/    e# Split string into chunks of that size. Last chunk may be
     e# smaller. Gives an array of strings
W%   e# Reverse the array. Implicitly display

4

ব্যাচ, 74 বাইট

@if %2=="" (echo %~3)else set s=%~2&call %0 %1 "%%s:~%1%%" "%%s:~,%1%%%~3"

বরং বিরক্তিকরভাবে এটি লেজ পুনরাবৃত্তির পরিবর্তে পুনরাবৃত্ত হয়ে যায়।


4

ভি , 13 10 বাইট

òÀ|lDÏpòÍî

এটি অনলাইন চেষ্টা করুন!

ò      ò    ' Recursively
 À|         ' Go to the "nth" column
   l        ' Move one character right (breaks loop when no more chunks)
    D       ' Delete from here to the end of the line
     Ï      ' Add a line above the current line (now contains one chunk)
      p     ' Paste the remainder of the line that was deleted
        Íî  ' Remove all newlines

পদক্ষেপে:

abcdefghijkl

পরিণত হয়

efghijkl
abcd

যা হয়ে যায়

ijkl
efgh
abcd

সমস্ত নতুনলাইনগুলি সরানোর আগে


4

ব্রেনফাক , 78 বাইট

,<<<+[[>]>+>[[>],<[<]>+>-]<-[->>[>]>>+<<<[<]<]>>]<<<<[[<]>[-[+.[-]]+>]<[<]<<<]

ইনপুটটির প্রথম বাইট হ'ল খণ্ড আকার, বাইট মান দ্বারা দেওয়া। বাকি বাইটগুলি স্ট্রিং হিসাবে বিবেচিত হয়।

এটি অনলাইন চেষ্টা করুন!

প্রসারিত এবং মন্তব্য

Read the chunk size byte
This cell will become a counter cell
,

Move left a few cells an increment; 
this is to make the starting position 
line up with the relative positioning
needed to fit in with the loop
<<<+

While the current cell is nonzero:
[

 Move right to the first zero cell
 [>]

 Move right once and increment and then move right to the counter cell
 The increment is required because of "move to zero cell" loops
 >+>

 This loop will store one chunk of the input in consecutive memory cells
 [
  [>]   Move right until a zero cell is hit
  ,     Store 1 byte of input there
  <[<]  Move back left until a zero cell (other than the current one) is hit
  >+>-  Increment the temporary cell by 1 and decrement the counter
 ] (end loop once the counter hits zero)

 Decrement the temp cell (because we needed to have 1 there initially to make the cell location work)
 <-

 Move the temp cell to three cells after the end of the chunk
 This is the new counter cell for the next chunk
 [->>[>]>>+<<<[<]<]

 Move two cells right from where the temp cell was
 This is the first cell of the chunk; if it's 0
 then the input is finished and the loop should end
 >>
]

Due to the way the counter is kept track of the tape head
will always be four cells to the right of the last input cell
when the loops breaks
<<<<

Now the chunks are printed one by one
At the start of an iteration the tape head is at the end of a chunk
[
 Locate the start of the last chunk
 [<]>

 Print the chunk:
 [
  Print the byte held in the current cell if it isn't 1
  This is necessary because we left a stray 1 in a cell at
  the start which shouldn't be printed
  -[+.[-]]+

  Move to the next cell
  >
 ]

 Move to just left of the chunk
 <[<]

 Move three cells over to the end of the next chunk
 <<<
]

4

পাওয়ারশেল, 56 49 বাইট

-7 বাইট মজির ধন্যবাদ

param($n,$s)$s-split"(.{$n})"-ne''|%{$r=$_+$r};$r

এটি অনলাইন চেষ্টা করুন!


1) 49 বাইট 2) দয়া করে একটি পূর্ণ প্রোগ্রাম পোস্ট করুন, কোডনিপেট নয়। কীভাবে চেক করবেন? এক্সটেনশন সহ একটি পৃথক ফাইলে আপনার কোডটি বের করুন .ps1এবং আপনার কোডের পরিবর্তে এই স্ক্রিপ্টটি কল করার চেষ্টা করুন। যদি এটি কাজ করে, তবে পরীক্ষাটি সফল হয়েছিল।
mazzy

3

গণিত, 46 বাইট

""<>Reverse@Partition[Characters@#2,#,#,1,{}]&

বেনামে ফাংশন। ইনপুট হিসাবে একটি সংখ্যা এবং একটি স্ট্রিং নেয় এবং আউটপুট হিসাবে একটি স্ট্রিং প্রদান করে। এখানে দেখতে অনেক না।


3

জাভাস্ক্রিপ্ট - 54 47 46 বাইট

remade:

(s,n)=>s.match(eval(`/.{1,${n}}/g`)).reverse()

হিসাবে ব্যবহার

f=(s,n)=>s.match(eval(`/.{1,${n}}/g`)).reverse()
alert(f("abcdefgh",2));

কিছু RegEx quickenning এর জন্য @ETH প্রডাকশনগুলিতে আপনাকে ধন্যবাদ ধন্যবাদ শ্যাগলিকে ধন্যবাদ ইভালে অতিরিক্ত বাইট দেওয়ার জন্য!

মূল:

(s,n)=>s.match(new RegExp('.{1,'+n+'}','g')).reverse()

1
চমৎকার উত্তর! আমি বিশ্বাস করি আপনি এর সাথে eval('/.{1,'+n+'}/g')
রেজিেক্স

পছন্দ করুন এটাই আমি করার চেষ্টা করছিলাম। এটি করার জন্য আমি রেইগেক্সের সাথে যথেষ্ট পরিচিত ছিলাম না!
নীল ওকিরিস

আমি মনে করি আপনি তরকারী দিয়ে একটি বাইট সংরক্ষণ করতে পারেনs=>n=> ...
পাভেল

eval("/.{1,${n}}/g")উদ্ধৃতি চিহ্নের পরিবর্তে ব্যাকটিক্স ব্যবহার করে একটি বাইট সংরক্ষণ করুন ।
শেগি


3

রেটিনা , 38 বাইট

1 বাইট সংরক্ষিত হয়েছে @ লিক্যুনকে ধন্যবাদ

^

+`(.* (1)+¶)((?<-2>.)+)
$3$1
 1+¶

(দ্বিতীয় লাইনের স্থান এবং পেছনের স্থান নোট করুন)

এই প্রোগ্রামটি প্রথম লাইনে অবিচ্ছিন্ন হিসাবে এবং দ্বিতীয়টিতে স্ট্রিং হিসাবে ইনপুট নেয়।

এটি অনলাইন চেষ্টা করুন!

পরীক্ষা স্যুট! (সামান্য সংশোধিত)

ব্যাখ্যা

প্রথম পদক্ষেপটি একটি স্থান অর্থোপচার করা (পরে গুরুত্বপূর্ণ হয়ে উঠবে)।

^
 

এখন আমরা বিপরীত। এটি। নেট এর ব্যালেন্সিং গ্রুপগুলি ব্যবহার করে। এটি লক্ষ্য করা গুরুত্বপূর্ণ যে এখানে গ্রুপগুলি স্ট্যাক হিসাবে কাজ করে, তাই প্রতিটি ম্যাচটি মূলত স্ট্যাকের দিকে ঠেলা যায়। এখানে আমরা অরিয়রি সংখ্যার প্রতিটি সংখ্যাকে ২ য় গ্রুপে ক্যাপচার করি Now

+`(.* (1)+¶)                       Capture the unary number in group 2
             ((?<-2>.)+)           Balancing group for substrings
$3$1                               Reverse

এবং অবশেষে আনরি নম্বর এবং নিউলাইন সরান।

 1+¶


আমি মনে করি আনারিতে নম্বর নেওয়া গ্রহণযোগ্য is
লিকি নুন

যাহাই হউক না কেন, আপনি প্রতিস্থাপন করতে পারেন \dদ্বারা .একটি বাইট সংরক্ষণ করুন।
লিকি নুন

দ্বিতীয়টিও ^অপ্রয়োজনীয়।
লিকি নুন

@ লিক্যুনুন প্রোগ্রামটি এখন আনরেটে ইনপুট নেয়, সুতরাং আমার \dআর আর দরকার নেই। এবং
ক্যারেটটি

অলস (লোভী নয়) ম্যাচটি ব্যবহার করে 33 বাইট
লিকি নুন

3

জাভা, 147 138 বাইট

String r(String s,int n){String r="";int l=s.length();for(int i=l/n*n;i>=0;i-=n)if(!(i>=l))r+=(i+n)>=l?s.substring(i):s.substring(i,i+n);return r;}

কেভিন ক্রুইজসেনকে 9 বাইট সংরক্ষণ করা হয়েছে!

String r(String s,int n){String r="";int l=s.length(),i=l/n*n;for(;i>=0;i-=n)if(i<l)r+=i+n>=l?s.substring(i):s.substring(i,i+n);return r;}

প্রসারিত আকারে:

String r(String s,int n){
    String r="";
    int l=s.length(),i=l/n*n;
    for(;i>=0;i-=n)
        if(i<l)
            r+=i+n>=l?s.substring(i):s.substring(i,i+n);
    return r;
}

কোডোগল্ফের এটি আমার প্রথম চেষ্টা, তাই কোনও প্রতিক্রিয়া স্বাগত!


পিপিসিজিতে আপনাকে স্বাগতম!
পাভেল

1
হাই, পিপিসিজিতে আপনাকে স্বাগতম! ইতিমধ্যে বেশ ভাল, কিন্তু এখনও গল্ফ কিছু বিষয় আরো কিছু আছেন: int l=s.length();for(int i=l/n*n;হতে পারে int l=s.length(),i=l/n*n;for(;তাই আপনি কেবলমাত্র int একবার। এবং if(!(i>=l))হতে পারে if(l<i)। আর r+=(i+n)>=l?প্রথম বন্ধনী ছাড়া হতে পারে: r+=i+n>=l?। এছাড়াও, যদি আপনি এটি এখনও না দেখে থাকেন তবে আমি কিছু দুর্দান্ত শীতল গল্ফিং ব্যবহারের জন্য জাভাতে গল্ফিংয়ের জন্য পরামর্শগুলি দেখতে চাই। :) আবার, স্বাগতম।
কেভিন ক্রুইজসেন

3

পার্ল 5 , 25 বাইট

-lnM5.010পতাকা ব্যবহার করে ।

say reverse<>=~/.{1,$_}/g

এটি অনলাইন চেষ্টা করুন!

আমাকে সম্পর্কে বলার জন্য গ্রিন্জে চিৎকার করুন =~ m/.{1,$n}/g

-M5.010sayফাংশনটির ব্যবহার সক্ষম করে , যা আমাদের উদ্দেশ্যে একটি সংক্ষিপ্ত নাম দিয়ে মুদ্রিত হয়।

-nইনপুটটির প্রথম লাইনটি প্রবেশ করে $_এবং -lপিছনে থাকা নতুন লাইনে চম্পস দেয়।

তারপরে আমরা <>ইনপুটটির দ্বিতীয় লাইনটি ব্যবহার করে পাই এবং এটি রেগেক্সে প্রয়োগ করি .{1,$_}: 1 এবং character _ (প্রথম ইনপুট) সময়ের মধ্যে যে কোনও অক্ষর। যেহেতু এটি ডিফল্টরূপে লোভী, তাই এটি সর্বদা $ _ টি অক্ষরের সাথে মেলে চেষ্টা করে। 1,শেষে সম্ভব অবশেষ খণ্ড জন্য প্রয়োজন হয়।

/gপরিবর্তক আমাদের দেয় যে একটি তালিকা, যা বিপরীত এবং মুদ্রিত হয় ইনপুট স্ট্রিং যে Regex ম্যাচে। পার্লে, কোনও তালিকা পাস করার জন্য sayএটি ডিফল্টরূপে কোনও সীমানা ছাড়াই যোগ দেয়।


3

আপনার দরকার নেইf←
পাভেল

কেন, ,/
অ্যাডম

@ আদম ওহ ওহে আমার উত্তরটির উপরও এটি প্রযোজ্য, ধন্যবাদ
পাভেল

পাভেল: হ্যাঁ, অবশ্যই .. @ অ্যাডম ধন্যবাদ!
ডিজাইমা

14:∊∘⌽⊢⊂⍨≢⍤⊢⍴1↑⍨⊣
ভেন



2

কিউবিআইসি , 24 বাইট

:;[1,_lA|,a|Z=_sA,b,a|+Z

এটি সম্প্রতি কিউবিআইকে যুক্ত করা নতুন স্ট্রাস্টিং-ফাংশনটির দুর্দান্ত ব্যবহার করে:

:;          Read in the cmd line params a (number) and A$ (text)
[1,_lA|,a|  Set up a FOR loop: FOR b = 1; b <= A$.length; b += a
Z=          Modify Z$; Z$ is autoprinted at the end of QBIC code
_sA,b,a|    SUBSTRING: _s is the function followed by the string 
               to take from, the starting pos and the # of chars
+Z          Take chunks from further into A$, put them before Z$



2

সি, 69 বাইট

i;f(s,n)char*s;{i=strlen(s);for(i-=i%n;printf("%.*s",n,s+i),i;i-=n);}

ফলাফল স্ট্যান্ডার্ড আউটপুট থেকে মুদ্রিত হয়।


2

স্কালা, 57 55 বাইট

(n:Int,s:String)=>(""/:s.grouped(n).toSeq.reverse)(_+_)

ধন্যবাদ জ্যাকব! এখানে চেষ্টা করুন

দ্রষ্টব্য: ফোল্ড লেফট ("/:") এর প্রতীক রূপটি ব্যবহার করে আমি আরও কয়েকটি বাইট সরিয়ে ফেলতে সক্ষম হয়েছি।


এটি বেনামে ফাংশন করুন, এবং এর mkStringপরিবর্তে ব্যবহার করুন reduceLeftএবং by বাইট শেভ করুন:(n:Int,s:String)=>s.grouped(n).toSeq.reverse.mkString("")
জ্যাকব


2

আর , 69 60 বাইট

function(s,n)cat(substring(s,(x=nchar(s):0*n)+1,x+n),sep="")

এটি অনলাইন চেষ্টা করুন!

পরামর্শটি অপসারণের জন্য কিরিল এলকে ধন্যবাদ seq


দেখে মনে হচ্ছে এটি 66 এর জন্যও কার্যকর।
ক্যারিল এল।

@KirillL। আমরা যদি 60 টি বাইটে যেতে পারি তবে আমরা যদি আর্গুমেন্টের ক্রমটিকে বিপরীত করি :এবং কিছু হেরফেরটি আমাদের পিছন থেকে মুক্তি পেতে দেয় -1
জিউসেপ

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