CUSRS - সম্পূর্ণরূপে অকেজো স্ট্রিং রিফ্যাক্টরিং সিস্টেম!


11

ভূমিকা

আমি এসবিইউর (শর্ট অথচ অনন্য) চ্যালেঞ্জের সত্যিকারের বড় অনুরাগী যে সমস্ত সময় পিপিসিজিতে ফসল কাটায়। সিইউএসআরএস হ'ল রিফেক্টর স্ট্রিংয়ের জন্য ডিজাইন করা একটি সিস্টেম, একটি সিইউএসআরএস ফাংশন 2 প্যারামিটার নেয় এবং 1 স্ট্রিং আউটপুট দেয়।

চ্যালেঞ্জ

নিম্নলিখিতটি করার জন্য একটি প্রোগ্রাম, ফাংশন, ল্যাম্বদা বা গ্রহণযোগ্য বিকল্প উত্পাদন করুন:

প্রদত্ত String inputএবং String refactor(উদাহরণ হিসাবে), রিফ্যাক্টর নীচে inputব্যবহার refactorকরে:

refactorস্ট্রিং বিন্যাস হবে ((\+|\-)\w* *)+(Regex), উদাহরণস্বরূপ:

+Code -Golf -lf +al

প্রতিটি বিভাগটি সম্পাদন করার জন্য একটি রিফ্যাক্টরিং অ্যাকশন input। প্রতিটি প্রোগ্রামের একটি পয়েন্টারও থাকে।

+ স্ট্রিংয়ের পয়েন্টারগুলি বর্তমান অবস্থানে এটি প্রত্যয় (যোগ ব্যতীত) প্রবেশ করিয়ে দেবে এবং তারপরে পয়েন্টারটি 0 এ পুনরায় সেট করবে।

প্রতিটি অপারেশন স্ট্রিংয়ের জন্য প্রয়োগ করা inputউচিত এবং ফলাফলটি ফিরে আসতে হবে।

উদাহরণ:

input:
Golf +Code //pointer location: 0

output:
CodeGolf //pointer location: 0

-স্ট্রিংয়ের মাধ্যমে পয়েন্টারটি প্রত্যয় না পাওয়া পর্যন্ত বৃদ্ধি করবে। প্রত্যয়টি স্ট্রিং থেকে সরানো হবে এবং পয়েন্টারটি মুছে ফেলা পাঠ্যের বাম দিকে ছেড়ে দেওয়া হবে। যদি প্রত্যয় না পাওয়া যায় তবে পয়েন্টারটি কেবল স্ট্রিংয়ের শেষের দিকে অগ্রসর হবে এবং সেখানেই ছেড়ে দেওয়া হবে।

input:
Golf -lf //pointer location 0

output:
Go //pointer location 2

উদাহরণ

input:
"Simple" "-impl +nip -e +er"

output:
"Sniper"

input:
"Function" "-F +Conj"

output:
"Conjunction"

input:
"Goal" "+Code -al +lf"

output:
"CodeGolf"

input:
"Chocolate" "Chocolate"

output:
"Chocolate" //Nothing happens...

input:
"Hello" "-lo+p        +Please" //Spaces are irrelevant

output:
"PleaseHelp"

input:
"Mississippi" "-s-s-i-ppi+ng" //Operations can be in any order

output:
"Missing"

input:
"abcb" "-c -b +d"

output:
"abd"

input:
"1+1=2" "-1+22-=2+=23"

outut:
"22+1=23"

উদাহরণ কোড

উদাহরণ জাভা, এটি মোটেই গল্ফ হয় না।

public static String refactor(String input, String swap) {
    int pointer = 0;
    String[] commands = swap.replace(" ", "").split("(?=[-+])");

    for (String s : commands) {
        if (s.startsWith("+")) {
            input = input.substring(0, pointer) + s.substring(1) + input.substring(pointer, input.length());
            pointer = 0;
        } else {
            if (s.startsWith("-")) {
                String remove = s.substring(1);
                for (int i = pointer; i < input.length(); i++) {
                    if (input.substring(i, i + remove.length() > input.length() ? input.length() : i + remove.length()).equals(remove)) {
                        pointer = i;
                        input = input.substring(0, i) + input.substring(i + remove.length(), input.length());
                        break;
                    }
                }
            }
        }
    }

    return input;
}

বিধি

  • স্ট্যান্ডার্ড লুফোলস প্রয়োগ করুন
  • সংক্ষিপ্ততম কোড, বাইটে, জিতল


কিসের জন্য আউটপুট হওয়া উচিত aaa -a?
ETH প্রোডাকশনগুলি

|aaপাইপ পয়েন্টার হচ্ছে।
শন ওয়াইল্ড

@ এমিগনা প্রশ্নে প্রশ্নটি দেখার পরে, আমি বিশ্বাস করি আমার বাস্তবায়ন অনেক আলাদা হবে।
শান ওয়াইল্ড

-প্রত্যয়টি না পাওয়া গেলে কী ঘটে ?
জাগারব

উত্তর:


1

এপিএল, 91 90 বাইট

{s l←⍵0⋄s⊣{g←1↓⍵⋄'+'=⊃⍵:+s∘←(l↑s),g,l↓s⋄l∘←¯1+1⍳⍨g⍷s⋄+s∘←(l↑s),s↓⍨l+⍴g}¨{1↓¨⍵⊂⍨⍵=⊃⍵}' ',⍺}

এটি স্ট্রিংটিকে তার ডান আর্গুমেন্ট হিসাবে নেয় এবং কমান্ডগুলি তার বাম আর্গুমেন্ট হিসাবে গ্রহণ করে:

      '+Code -al +lf' {s l←⍵0⋄s⊣{g←1↓⍵⋄'+'=⊃⍵:+s∘←(l↑s),g,l↓s⋄l∘←¯1+1⍳⍨g⍷s⋄+s∘←(l↑s),s↓⍨l+⍴g}¨{1↓¨⍵⊂⍨⍵=⊃⍵}' ',⍺} 'Goal'
CodeGolf

1

গল্ফস্ক্রিপ্ট, 97 বাইট

" "%(:s;0:p;{("-"0=={.s p>\?.-1={;;s,:p;}{:p;,:l;s p<s p l+>+:s;}if}{s p<\+s p>+:s;0:p;}if}/"\n"s

পরীক্ষা: গল্ফস্ক্রিপ্ট


পিপিসিজিতে আপনাকে স্বাগতম! আপনি এটি অনলাইনে চেষ্টা করে দোভাষী ব্যবহার করতে পারেন , যা ইনপুট সমর্থন করে।
মার্টিন ইন্ডার

1

পাইথন 3 ( 164 194 186 181 168 165 বাইট)

p=0
w,*x=input().split()
for i in x:
 if '-'>i:w,p=w[:p]+i[1:]+w[p:],0
 else:
  try:p=w.index(i[1:],p)
  except:p=len(w)
  w=w[:p]+w[p:].replace(i[1:],'',1)
print(w)

উদাহরণস্বরূপ পয়েন্টারটি প্রান্তে চলে যাওয়া দেখায় উদাহরণস্বরূপ এটি যদি কোনও স্ট্রিংয়ের সন্ধান না করে:

Input: HelloThere -x +Friend
Output: HelloThereFriend

আমাকে 13 বাইট সংরক্ষণ করার জন্য আর্টিরকে বিশেষ ধন্যবাদ।

আর্টিয়ারকে আর একটি ধন্যবাদ begপ্যারামিটারের সাহায্যে আমাকে আরও 3 বাইট সংরক্ষণ করার জন্য index

পুরানো উত্তর:

p=0
x=input().split()
w=x[0]
for i in x[1:]:
 if i[0]=='+':
  w=w[:p]+i[1:]+w[p:]
  p=0
 else:
  p=w[p:].index(i[1:])+p
  w=w[:p]+w[p:].replace(i[1:],'',1)
print(w)

পয়েন্টার কাজগুলি দেখানোর উদাহরণ (কিউ এর সমস্ত উদাহরণ উদাহরণস্বরূপ আপনি পয়েন্টারে ফ্যাক্টর না রেখে এবং প্রথম উপস্থিতিতে কেবল প্রতিস্থাপন করুন):

Input: HelloThereCowboy -r -e -y +ySays +Oh
Output: OhHelloTheCowboySays

সম্পাদনা: যেহেতু 2 মিনিট আগে আমার উত্তরটি প্রশ্নকারীর মন্তব্য অনুসারে এখন অবৈধ।

aaa -b + b এর ফলাফল আবাবের সাথে ঘটত কারণ পয়েন্টারটি সর্বশেষে চলে যেত।

সম্পাদনা 2: স্থির


1
w,*x=input().split()এবং if'-'>i:পরিবর্তে if i[0]=='+':এবং 2 শূণ্যস্থান পরিবর্তে 2 ইনডেন্ট কিছু বাইট সংরক্ষণ করতে হবে জন্য ট্যাব অক্ষর
Artyer

আমি যদি পাওয়া ট্যাব এবং স্পেসগুলি মিশ্রিত করার চেষ্টা করি TabError: inconsistent use of tabs and spaces in indentation। পরামর্শের জন্য ধন্যবাদ, আমি এই বৈশিষ্ট্যগুলি সম্পর্কে জানতাম না! আমি তাদের সাথে সাথে যুক্ত করা শুরু করব adding
রেডস্টারকোডার

@redstartcoder আমি অনুমান করি ট্যাব ট্রিকটি কেবল পাইথন ২ এ কাজ করে My আমার খারাপ
আরটিয়ার

আমি এখানে একেবারেই ভুল হতে পারি, তবে আমি মনে করি স্ট্রিংগুলির একটি findপদ্ধতি রয়েছে যা -1এটি স্ট্রিংগুলি না পেলে ফিরে আসবে । যেহেতু -1 স্ট্রিংটির পিছনের দিকে নির্দেশ করে, আপনাকে যা করতে হবে তা হল pদৈর্ঘ্য অনুসারে একটি মডুলাস নেওয়া wউচিত যার অর্থ হওয়া উচিত আপনার ব্যতীত চেষ্টা করার দরকার নেই।
কেদে

1
আপনি -1%len(str)স্ট্রিং শেষে সূচক পেতে হবে । str.indexএবং str.findআরো একটি নিতে startতাই আমি অনুমান আপনি প্রতিস্থাপন করতে পারেন, প্যারামিটার w[p:].index(i[1:])দিয়ে w.index(i[1:],p)। সামগ্রিকভাবে, এটি হবে else:p=(w.find(i[1:],p)+p)%len(p);w=w[:p]+w[p:].replace(i[1:],'',1)
আরটিয়ার

0

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

(s,r,t='')=>r.match(/\S\w*/g).map(r=>(q=r.slice(1),r<'-'?(s=t+q+s.t=''):([b,...a]=s.split(q),t+=b,s=a.join(q))))&&t+s

ব্যাখ্যা: একটি জটিল পয়েন্টার ব্যবহার না করে, আমি স্ট্রিংয়ের বাম অর্ধেক tএবং ডান অর্ধেকটি ভিতরে রাখি s। অতিরিক্তভাবে, splitএবং joinঅপসারণ সঞ্চালনের একটি সুবিধাজনক উপায়।

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