একটি পিভটের চারপাশে একটি স্ট্রিংয়ের দুটি বিভাগ বিপরীত করুন


17

পটভূমি

আমি বর্তমানে একটি এপি কম্প সায়েন্স এ: জাভা ক্লাসে রয়েছি, এবং আমি কোড গল্ফিংয়ে আমার কিছু বন্ধুদের শুরু করতে চাই। কোর্সটি থেকে আমার একটি চ্যালেঞ্জ রয়েছে এবং আমি দেখতে চাই সম্প্রদায়ের মধ্যে কতগুলি বাইট এই চ্যালেঞ্জটি করতে পারে।

চ্যালেঞ্জের বিশদ:

দুটি ইনপুট স্ট্রিং দেওয়া হয়েছে, মূল স্ট্রিং এবং পিভট স্ট্রিং, নিম্নলিখিতটি করুন:

যদি পাইভট স্ট্রিংটি একবার মূল স্ট্রিংয়ের একটি স্ট্রিং হিসাবে হয় তবে মূল স্ট্রিংয়ের যে অংশটি পাইভট স্ট্রিংয়ের আগে আসে তার পরে যে অংশটি আসে তার সাথে অদলবদল করা হবে, যখন সাবট্রিংগুলি অদলবদলের অভ্যন্তরে ক্রম সংরক্ষণ করে

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

পিভট স্ট্রিংটি ফাঁকা থাকলে বা মূল স্ট্রিংয়ের মধ্যে পিভট স্ট্রিংটি পাওয়া যায় না , তবে প্রোগ্রামটি সংজ্ঞায়িত আচরণ করতে হবে না।

পিভট স্ট্রিংয়ের একাধিক উদাহরণ থাকলে, বিভাজনটি প্রথম এবং কেবলমাত্র হওয়া উচিত প্রথম উদাহরণে ।

উদাহরণ: প্রধান স্ট্রিং OneTwoThreeTwoOneএবং পিভট স্ট্রিং দেওয়া Two, আউটপুট হওয়া উচিত ThreeTwoOneTwoOne

মূল স্ট্রিং 1Two2Two3Two4এবং পাইভট দেওয়া Two, আউটপুট হওয়া উচিত 2Two3Two4Two1

মূল স্ট্রিং OneTwoThreeএবং পাইভট স্ট্রিং "দুটি" দেওয়া, আউটপুট হওয়া উচিত ThreeTwoOne। মূল স্ট্রিং the rabbit is faster than the turtleএবং পিভট স্ট্রিং দেওয়া হয়েছে

 is faster than 

(একক স্পেস ট্রেইলিং এবং পূর্ববর্তী নোট করুন), আউটপুট হওয়া উচিত the turtle is faster than the rabbit

মূল স্ট্রিং 1-2-3-4-5-6এবং পিভট দেওয়া -, আউটপুট হওয়া উচিত 2-3-4-5-6-1

উত্তরভাষ:

কোড গল্ফের বিষয়ে এটি আমার প্রথম প্রশ্ন, সুতরাং আপনার যদি পরামর্শ বা গঠনমূলক সমালোচনা থাকে, তবে নির্দ্বিধায় এটি বলতে দ্বিধা করুন।

অতিরিক্তভাবে, এই প্রকল্পের জন্য আমার কোড (জাভাতে লিখিত কারণ কোর্সটি এতে ফোকাস করে) নীচে পাওয়া যাবে। আপনার যদি কোনও টিপস থাকে তবে আমি সেগুলি দেখতে পছন্দ করব। এটি বর্তমানে ৩3৩ বাইট, তবে আমি বাজি ধরছি আপনি ছেলেরা আরও ভাল এবং ছোট সমাধান নিয়ে আসতে পারেন।

import java.util.Scanner;interface Main{static<T>void D(T f){System.out.println(f);}static void main(String[]A){Scanner s=new Scanner(System.in);D("Enter the first String:");String a=s.nextLine();D("Enter the pivot String:");String p=s.nextLine();if(p.isEmpty()|!a.contains(p)){D("Error: Pivot String not found.");return;}String w[]=a.split(p,2);D(w[1]+p+w[0]);}}

দ্রষ্টব্য: ইনপুটগুলির জন্য এবং পিভট স্ট্রিংটি খুঁজে পাওয়া যায় না এমন ক্ষেত্রে মূল কার্যভারের জন্য বাধ্যতামূলক, তবে এই চ্যালেঞ্জের জন্য নয়।


এর প্রত্যাশিত আউটপুট কী pivot='-'এবং main='1-2-3-4-5-6'? 2-3-4-5-6-1এটির জন্য সর্বাধিক জমা দেওয়ার আউটপুট , তবে আমি চ্যালেঞ্জটি বুঝতে পারি এটি হওয়া উচিত 2-1-3-4-5-6
ovs

এটি কেবল প্রথম পিভট উপর স্ট্রিং বিভক্ত করা উচিত । সুতরাং উদ্দেশ্যে আউটপুট হওয়া উচিত 2-3-4-5-6-1
ThePlasmaRailgun

3
যাইহোক, আপনি পরের বার স্যান্ডবক্স ব্যবহার করতে পারেন ।
এরিক আউটগল্ফার

আমি মনে করি যে "সাবট্রিংসগুলি অদলবদল করা হচ্ছে" এর মধ্যে অর্ডার সংরক্ষণ করার সময় এই জোর কেবল এটিকে আরও বিভ্রান্তিকর করে তুলেছে। আমি ইতিমধ্যে এটি সেভাবে বুঝতে পেরেছি তবে শব্দটি এটিকে বিভ্রান্ত করে তুলেছে যদি এটিই আপনি বোঝাতে চেয়েছিলেন।
kamoroso94

উত্তর:



6

জেলি , 6 বাইট

œṣṙ1j⁴

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

ব্যাখ্যা

œṣṙ1j⁴  Main Link
œṣ      Split around sublists equal to the pivot
  ṙ1    Rotate left by one
    j⁴  Rejoin on the pivot

বাহ, ব্যাখ্যার কোনও সুযোগ? অসাধারণ!
ThePlasmaRailgun

@ দ্য প্লাজমাআরেলগুন এটি অভূতপূর্ব নয়, আসলে: পি - জেলির দরকারী বিল্ট-ইন রয়েছে: œṣএটি " y এর সমান সাবলিস্টগুলির চারপাশে স্প্লিট এক্স ", অ্যারেটিকে এক জায়গায় বাম দিকে ঘোরায় এবং দ্বিতীয় ইনপুটটির সাথে যোগ দেয়। ṙ1j⁴
মিস্টার এক্সকোডার 18

@ThePlasmaRailgun এখন ব্যাখ্যা যুক্ত করছে। তবে জেলির পক্ষে এটি অত্যন্ত চিত্তাকর্ষক
এক্সডিও

খুশী হলাম। আমি এটা ভালোবাসি.
দ্যপ্লাজমাআরেলগুন

6

পাইথন 2 , 37 39 বাইট

lambda a,b:b.join(a.split(b,1)[::-1])

যেখানে aমূল স্ট্রিং এবংb পিভট স্ট্রিং।

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


2
আপনি কেবল প্রথম ইভেন্টে বিভক্ত করতে চান তা উল্লেখ split(b)করতে পরিবর্তন split(b,1)করুন।
mypetlion

@ovs, তৃতীয় পরীক্ষার মামলায় কাজ করার জন্য সম্পাদিত
wnnmaw

@ মাইপেটলিয়ন, আমি splitআরও যুক্তি স্বীকার করতে জানি না , ধন্যবাদ!
wnnmaw

6

ওল্ফ্রাম ভাষা (গণিত) , 34 বাইট

p#2<>p<>#&@@StringSplit[#,p,2]&

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

একটি নামবিহীন, ত্রিযুক্ত ফাংশন যা প্রথমে পিভট এবং মূল স্ট্রিং দ্বিতীয় সহ কল ​​করা উচিত। উদাহরণস্বরূপ, আপনি যদি কোনও নামটি ফাংশনটি অর্পণ করেন f:

f["-"]["1-2-3-4-5-6"]


4

পার্ল 5 , 20 + 2 ( -pl) = 22 বাইট

<>=~/$_/;$_="$'$_$`"

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

প্রথম লাইনে পিভট স্ট্রিং নেয়, তারপরে দ্বিতীয়টিতে সম্পূর্ণ স্ট্রিং নেয়।


যুক্তি দিয়ে খেলতে আমি এই 20 বাইট সমাধানটি পেয়েছি , অন্যথায় /আশেপাশের $_
স্থানগুলি

এছাড়াও $_=~<>;$_="$'$&$"20 হ'ল 20 বাইট এবং সঠিক ক্রমে যুক্তিগুলি পড়ে
নাহুয়েল ফুইলুল

4

পাইথন 2 , 53 44 বাইট

কিছু বাইটের জন্য ThePlasmaRailgun ধন্যবাদ

p,m=input()
k=m.split(p,1)
print k[1]+p+k[0]

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


Output on your test case with pivot "Two" and string "1Two2Two3Two4" should be "2Two3Two4Two1". It should only split on the first "Two", leaving you the array ["1", "2Two3Two4Two"]. Then you can just print k[1]+p+k[0]. This should have intended behavior.
ThePlasmaRailgun

Fixed. I'm also going to add an example test case to show people how it should be.
ThePlasmaRailgun

@ThePlasmaRailgun for the next time you want to improve an answer just leave a comment and let the op edit it in.
ovs

@ দ্য প্লাজমাআরেলগান আপনার স্পষ্টতার জন্য ধন্যবাদ
ovs

দ্বিতীয় এবং তৃতীয় লাইন k,j=m.split(p,1);print j,p,k38 বাইট জন্য হয়ে যায় ।
mypetlion



4

অ্যালিস , 18 বাইট

/?.?.Qz
\IoI%!oo@/

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

ব্যাখ্যা

/...
\...@/

এটি লিনিয়ার অর্ডিনাল মোড (স্ট্রিং-প্রসেসিং) কোডের জন্য কেবল একটি ফ্রেমওয়ার্ক। জিগজ্যাগ নিয়ন্ত্রণ প্রবাহ উন্মোচন করা, আমরা পাই:

I.I.!zo?o?%Qo

I.  Read the first string, duplicate it.
I   Read the second string (the pivot).
.!  Store a copy of the pivot on the tape.
z   Drop. Removes everything up to and including the pivot from the first string,
    so we get only the stuff after the pivot.
o   Output that.
?o  Retrieve the pivot from the tape and output it.
?%  Retrieve the pivot again and split the input around (all occurrences of)
    the pivot.
Q   Reverse the stack.
o   Output the top of the stack (i.e. the chunk in front of the first pivot).




2

Pyth, 8 bytes

jQ.<cEQ1

Try it here!

Explanation

jQ.<cEQ1 - Full program.

    cEQ  - Split the second input by the first input.
  .<   1 - Cyclically rotate by 1 place to the left.
jQ       - Join on the first input.

2

Charcoal, 13 bytes

≔⪪θηθ⪫Eθ§θ⊕κη

Try it online! Link is to verbose version of code. Explanation:

  θ             First input
   η            Second input
 ⪪              Split
≔   θ           Assign result
      Eθ        Map over result
           κ    Current index
          ⊕     Incremented
        §θ      Circularly index into result
     ⪫      η   Join
                Implicitly print


2

জাভা 8, 47 বাইট

x->y->x.replaceAll("(.*?)("+y+")(.*)","$3$2$1")

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


প্রতিস্থাপনের মাধ্যমে প্রতিস্থাপনের প্রথমটি পরিবর্তিত হয়েছে কারণ 2 বাইট সংক্ষিপ্ত এবং রেজেক্সের সাথে পুরো স্ট্রিংয়ের সাথে মেলে প্রতিস্থাপনটি কেবল একবার সম্পন্ন হবে
নাহুয়েল ফুইলুল

2

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

(s,p,[a,...r]=s.split(p))=>r.join(p)+p+a

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


2

জে , 14 বাইট

#@[}.{.@ss|.,~

কিভাবে এটা কাজ করে:

বাম আর্গুমেন্টটি হ'ল পিভট, ডান এক - স্ট্রিংটি বিপরীত করা উচিত

            ,~   appends the pivot to the string
     {.@ss       finds the positions of the pivot in the string and takes the first one
          |.     rotates the appended string to the left, so that the pivot is at the start
#@[              finds the length of the pivot string (n)
   }.            drops n characters from the begining of the rotated string

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





0

পিএইচপি, 62 বাইট

<?=![,$s,$p]=$argv,preg_filter("(^(.*)$p(.*)$)U","$2$p$1",$s);

পিএইচপি 7.1 প্রয়োজন; পিভটটিতে যদি রেজেক্স বিশেষ অক্ষর ( \+*?[^]$(){}=!<>|:-) থাকে তবে ব্যর্থ হতে পারে ।
পিভট ফাঁকা থাকলে কোনও পরিবর্তন হয় না, পিভট ইনপুট না থাকলে খালি আউটপুট।
সাথে চালাও -n

নিরাপদ সংস্করণ, 77 বাইট:

<?=preg_filter("(^(.*)".preg_quote($p=$argv[1])."(.*)$)U","$2$p$1",$argv[2]);

পিভট ফাঁকা থাকলে কোনও পরিবর্তন হয় না, পিভট ইনপুট না থাকলে খালি আউটপুট।
সাথে চালাও -n

নন-রেজেক্স সংস্করণ, by১ বাইট:

$a=explode($p=$argv[2],$argv[1]);$a[]=array_shift($a);echo join($p,$a);

পিভট ফাঁকা থাকলে সতর্কতা দেয়; পিভট ইনপুট না থাকলে কোনও পরিবর্তন নেই।

সাথে চালাও -nr

অনলাইনে এগুলি ব্যবহার করে দেখুন



0

সুইফট , 131 বাইট

import Foundation
func f(s:String,d:String){var c=s.components(separatedBy:d);print((c+[c[0]]).suffix(from:1).joined(separator:d))}

ব্যাখ্যা (অবরুদ্ধ)

import Foundation                     // Import String.components
func f(s:String,d:String){
    var c=s.components(separatedBy:d) // Split the input string by the separator
    print((c+[c[0]])                  // Add the last element of c ([A,B,C] -> [A,B,C,A])
        .suffix(from:1)               // Remove the first element  ([A,B,C,A] -> [B,C,A])
        .joined(separator:d))         // Join with the separator
}


0

সি ++ 11, 64 বাইট

[s,p,&a]{int f=s.find(p);a=s.substr(f+p.size())+p+s.substr(0,f);}

একটি ল্যাম্বদা, যা রেফারেন্স হিসাবে (ইন-আউট) স্ট্রিংগুলির s, p এবং a কে ক্যাপচার করে।

পরীক্ষার কোড

#include <iostream>
#include <string>

std::string Test(std::string s, std::string p) {
    std::string a;
[s,p,&a]{int f=s.find(p);a=s.substr(f+p.size())+p+s.substr(0,f);}();
    return a; 
}

int main() {
    std::string 
        s = "OneTwoThreeTwoOne",
        p = "Two",
        r = "ThreeTwoOneTwoOne";
    auto a = Test(s,p);
    std::cout << ((a==r)?"OK":"Failed") << ": " << a << std::endl; 

    return 0;
}

0

পরিষ্কার , 83 বাইট

import StdEnv;f s c=(\p=p takeWhile++[hd s,c:p dropWhile])\g=reverse(tl(g((<>)c)s))

Stringক্লিন এ সাধারণত হয় {#Char}- একটি আনবক্সড ( #) Charঅ্যারে ( {})। এই ফাংশনটি এর [Char]পরিবর্তে গ্রহণ করে Stringযা এটির দ্বিতীয়, বৈধ সংস্করণ String

সম্পূর্ণ ফাংশন স্বাক্ষর হয় f :: [.t] .t -> [.t] | [.t <= Char]

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


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