সেই কেসগুলি আনস্র্যাম্বল করুন- (খুব)-সংবেদনশীল স্ট্রিং


53

লক্ষ্য

এটি একটি সহজ চ্যালেঞ্জ। আপনার লক্ষ্য হ'ল অক্ষরের অক্ষরগুলি অপরিবর্তিত রেখে একই ক্ষেত্রে পরবর্তী অক্ষরের সাথে প্রতিটি অক্ষর অদলবদল করে একটি স্ট্রিংকে আনস্র্যাম্বল করা।

উদাহরণ

ধাপে ধাপে ব্যাখ্যা

  1. প্রথম চরিত্রটি হ'ল ক E। আমরা উপরের অক্ষরে পরবর্তী অক্ষরের সন্ধান করি: এটি ক C। আমরা এই অক্ষরগুলি অদলবদল করি, যা বাড়ে CdoE!

  2. আমরা পরবর্তী চরিত্রে অগ্রসর: এটি একটি d। আমরা নিম্নের ক্ষেত্রে পরবর্তী চিঠিটি সন্ধান করি: এটি একটি o। আমরা এই অক্ষরগুলি অদলবদল করি, যা বাড়ে CodE!

  3. আমরা পরবর্তী চরিত্রটিতে এগিয়ে dচলেছি: এটি আমরা এখানে সরে এসেছি। আমরা এটিকে উপেক্ষা করি, কারণ এটি ইতিমধ্যে প্রক্রিয়াভুক্ত হয়েছে।

  4. আমরা পরবর্তী চরিত্রের দিকে এগিয়ে যাই: এটিই Eএখানে পদক্ষেপ # 1 এ সরানো হয়েছিল। আমরা এটিকে উপেক্ষা করি, কারণ এটি ইতিমধ্যে প্রক্রিয়াভুক্ত হয়েছে।

  5. আমরা পরবর্তী চরিত্রে অগ্রসর: এটি একটি !। আমরা এটি উপেক্ষা করি, কারণ এটি কোনও চিঠি নয়।

বিধি

  • আপনি ধরে নিতে পারেন যে ইনপুট স্ট্রিংটি প্রিন্টযোগ্য ASCII অক্ষরগুলি 32 - 126 এর মধ্যে রয়েছে range

  • আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন, যা হয় ফলাফল মুদ্রণ করে বা ফেরত দেয়।

  • যদি ইনপুট স্ট্রিংটিতে একটি বিজোড় সংখ্যক অক্ষর থাকে, তবে শেষের অক্ষরটি অন্য কোনওটির সাথে অদলবদল করা যায় না এবং এটি স্থির থাকা উচিত, তা সে ক্ষেত্রেই হোক place একই যুক্তিটি প্রয়োগ করা হয় যদি স্ট্রিংটিতে একটি এমনকি সংখ্যক অক্ষর থাকে তবে একটি বড় সংখ্যার বড় হাতের অক্ষর এবং একটি ছোট ছোট অক্ষরের অক্ষর থাকে।

  • এটি কোড-গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

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

Input : lLEhW OroLd!
Output: hELlO WorLd!

Input : rpGOZmaimgn uplRzse naC DEoO LdGf
Output: prOGRamming puzZles anD COdE GoLf

Input : eIt uqHKC RBWOO xNf ujPMO SzRE HTL EOvd yAg
Output: tHe quICK BROWN fOx juMPS OvER THE LAzy dOg

Input : NraWgCi: Nsas-eNEiTIsev rNsiTG!!
Output: WarNiNg: Case-sENsITive sTriNG!!

না-এলোমেলো পরীক্ষার কেস:

Input : (^_^)
Output: (^_^)

Input : AWCTY HUOS RETP
Output: WATCH YOUR STEP

Input : hwn oeesd acsp nawyya
Output: who needs caps anyway

Input : SpMycaeIesKyBorekn
Output: MySpaceKeyIsBroken

Input : D's mroyr, Ivam. I'e faardi I act'n od htta.
Output: I'm sorry, Dave. I'm afraid I can't do that.

আমি অনুমান করি যে অনুরূপ মন্তব্যটি যদি ইনপুটটিতে অক্ষরগুলির সমান সংখ্যা থাকে তবে একটি বড় সংখ্যার বড় হাতের অক্ষর এবং ছোট ছোট অক্ষরের একটি বিজোড় সংখ্যা।
গ্রেগ মার্টিন

14
এটি সত্যই চতুর চ্যালেঞ্জ ... আমি এও পছন্দ করি যে পরীক্ষার কেসগুলি ছোট হাতের স্ট্রিংয়ে টাইপ করে, এলোমেলোভাবে কিছু অক্ষর বড় হাতের বদলে, এবং ঠিক একই প্রোগ্রামটি চালিয়ে যায় যা সমস্যার সমাধান করে!
গ্রেগ মার্টিন

1
@ গ্রেগমার্টিন আমি জানতে পেরেছিলাম যে সমস্যাটি তার নিজস্ব বিপরীত কারণ যখন পরীক্ষার কেসটি করার চেষ্টা করার সময় আমি ঘটনাক্রমে ইনপুটটির পরিবর্তে আউটপুটটিতে টাইপ করি :-)
লুইস মেন্ডো

আমি মনে করি আপনার একাধিক অ-চিঠিযুক্ত ASCII চরিত্রের সাথে পরীক্ষার কেসগুলি অন্তর্ভুক্ত করা উচিত ... আমি মনে করি যে কিছু বাস্তবায়ন ঘটনাক্রমে এগুলি একে অপরের সাথে স্যুইচ করতে পারে, যখন এটি হওয়ার কথা না।
গ্রেগ মার্টিন

3
পরীক্ষার ক্ষেত্রে সম্ভবত বড় হাতের অক্ষর ছাড়াই একটি স্ট্রিং এবং কোনও অক্ষর ছাড়াই একটি স্ট্রিং অন্তর্ভুক্ত থাকতে হবে।
ডেনিস

উত্তর:


4

জেলি , 21 20 19 18 বাইট

s2UF,
nŒlTÇyJịŒsµ⁺

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

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

nŒlTÇyJịŒsµ⁺  Main link. Argument: s (string)

 Œl           Convert to lowercase.
n             Test for inequality.
   T          Truth; yield all indices of 1's.
    Ç         Call the helper link. Yields [A, B] (pair of lists).
      J       Indices; yield I := [1, ..., len(s)].
     y        Translate; replace the integers of I that occur in A with the
              corresponding integers in B.
        Œs    Swapcase; yield s with swapped case.
       ị      Use the translated index list to index into s with swapped case.
          µ   Combine all links to the left into a chain.
           ⁺   Duplicate the chain, executing it twice.


s2UF,         Helper link. Argument: J (list of indices)

s2            Split J into pairs. If the length is odd, the last list will be
              a singleton list.
  U           Upend; reverse each pair. This is a no-op for singletons lists.
   F          Flatten, concatenating the pairs.
    ,          Pair the previous result with J.


9

এমএটিএল , 22 বাইট

2:"tttk<f2etAZ))P5M(Yo

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

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

2:"       % Do the following twice
  ttt     %   Input string (implicit). Push three more copies
  k       %   Convert to lowercase
  <f      %   Indices of characters that had their code point increased by
          %   the lowercase conversion, i.e. that were uppercase letters
  2e      %   Convert to 2-row matrix. This pads a zero in the lower-right 
          %   corner if necessary
  tAZ)    %   Keep only columns that don't contain zeros. Thus if there
          %   was a character that can't be swapped it will be ignored             
  )       %   Get 2-row matrix of characters at those positions
  P       %   Flip vertically. This does the swapping
  5M      %   Push matrix of original indices again
  (       %   Write the swapped characters onto their original positions
  Yo      %   Change case. In the first iteration, this prepares the
          %   string so the second iteration will process the letters that
          %   were originally lowercase. In the second iteration, it
          %   undoes the change of case 
          % End (implicit)
          % Display (implicit)

6

বাশ + ইউনিক্স ইউটিলিটিস, 77 62 57 56 54 বাইট

sed -r "s/([$1)([^$1*)([$1)/\3\2\1/g"||$0 a-z]|$0 A-Z]

স্টিডিন ইনপুট। স্টডআউট আউটপুট।

(এই শেষ সংস্করণে, স্ট্যাডার লিখিত হতে পারে, কিন্তু পিপিসিজি conকমত্য বলে মনে হয় যে এটি ঠিক আছে - স্ট্যাডার কেবল উপেক্ষা করা হয়। )

সম্পাদনা 1: 15 বাইটের জন্য @ ডেনিসকে ধন্যবাদ! উন্নতি: (ক) স্টিডিনের মাধ্যমে ইনপুট নেওয়া; (খ) ২ টি সেড স্ক্রিপ্টগুলিকে একটিতে সংমিশ্রণ; এবং (গ) বাশ প্যারামিটার সম্প্রসারণের মাধ্যমে ট্রাকে প্রতিস্থাপনের পরিবর্তে; (খ) এবং (গ) সম্পাদনা 2 এ অদৃশ্য হয়ে গেল।

সম্পাদনা 2: 5 টি অতিরিক্ত বাইট দ্বারা সংক্ষিপ্ত সম্পাদনা 1 এ উভয় (খ) এবং (সি) প্রতিস্থাপন করতে একটি ফাংশন কল ব্যবহার করেছেন।

সম্পাদনা 3: ফাংশন আর্গুমেন্টের অংশ হিসাবে আরও একটি বাইট - পাস]

সম্পাদনা 4: এতে কোনও যুক্তি না থাকলেই দুটি ফাংশন কলকে প্রোগ্রামটিতে কল দিয়ে প্রতিস্থাপন করা হয়।

পরীক্ষিত এবং নমুনা আউটপুট:

for x in 'lLEhW OroLd!' 'rpGOZmaimgn uplRzse naC DEoO LdGf' 'eIt uqHKC RBWOO xNf ujPMO SzRE HTL EOvd yAg' 'NraWgCi: Nsas-eNEiTIsev rNsiTG!!' '(^_^)' 'AWCTY HUOS RETP' 'hwn oeesd acsp nawyya' 'SpMycaeIesKyBorekn' "D's mroyr, Ivam. I'e faardi I act'n od htta."; do ./swapping <<<"$x" 2>/dev/null; done

hELlO WorLd!
prOGRamming puzZles anD COdE GoLf
tHe quICK BROWN fOx juMPS OvER THE LAzy dOg
WarNiNg: Case-sENsITive sTriNG!!
(^_^)
WATCH YOUR STEP
who needs caps anyway
MySpaceKeyIsBroken
I'm sorry, Dave. I'm afraid I can't do that.

6

ES6, 185 95 বাইট

i=>(o=[...i]).map((c,j)=>/[a-z]/i.test(c)?o[e=c>"Z"]=1/(b=o[e])?o[o[j]=o[b],b]=c:j:0)&&o.join``

@ নীল, @ আর্নল্ড এবং @ এডসি 65 এর সহায়তায় সমাধানটি গুরুতরভাবে সংক্ষিপ্ত করা হয়েছে

ব্যাখ্যা

f = i =>
  // Get array of characters from input string
  (o = [...i])
    .map((c, j) => 
      // Check if it's a text character, otherwise skip it
      /[a-z]/i.test(c) ? 
        // Get last character position for case
        // merged with setting a variable for if the character is lowercase
        // merged with storing the current case character position,  
        // under properties on the array (with keys "true" or "false")
        o[e = c>"Z"] =
          // Check if there exists a character position to switch with
          // merged with storing the current position for quick access
          1/(b=o[e]) ? 
            // This statement will end up returning the Array subset, 
            // which will be falsy in the above conditional since (1/[])==false
            o[
              // Switch left character to the right
              o[j]=o[b]
            // Switch right character to the left
            ,b]=c : 
            // No character exists for case, so return current character position
            j
         // It was not a text character, so do nothing
         :0
      )
  // Join array and return as result
  && o.join``;

`lLEhW OroLd!
NraWgCi: Nsas-eNEiTIsev rNsiTG!!
rpGOZmaimgn uplRzse naC DEoO LdGf
eIt uqHKC RBWOO xNf ujPMO SzRE HTL EOvd yAg
(^_^)
AWCTY HUOS RETP
hwn oeesd acsp nawyya
SpMycaeIesKyBorekn
D's mroyr, Ivam. I'e faardi I act'n od htta`
  .split`\n`
  .map(testCase => console.log(f(testCase)));


6 বাইট, যখন আমরা দ্বিতীয় বিবৃতিটি সরিয়ে দিচ্ছি তখন বন্ধকী প্যারেনগুলি অনর্থক :)
জানুয়ারী

2
আমার শেষ মন্তব্য অগ্রাহ্য করুন। এখানে 99:/[a-z]/i.test(c)?o[e=c>"Z"]=1/(b=o[e])?[o[b],o[j]]=[c,o[b]]:j:0
আর্নল্ড

2
[o[b],o[j]]=[c,o[b]]হতে পারেo[o[j]=o[b],b]=c
edc65

এখানের আসল মাস্টারস্ট্রোক একটি অ্যারের সূচি হিসাবে সত্য এবং মিথ্যা ব্যবহার করছে
edc65

ধন্যবাদ ছেলেরা, এখন 95 এর নিচে। সমাধানটি বোঝার মতো এমনভাবে ডকুমেন্ট করা সত্যিই শক্ত হয়ে ওঠে। এক্সডি @ এডিসি 65 এগুলি অ্যারে অবজেক্টে সূচি হিসাবে নয়, হিসাবে সম্পত্তি হিসাবে সঞ্চয় করা আছে। হ্যাঁ আর্নাউল্ড বুঝতে পেরেছিল যে তারা চরিত্রের অ্যারেতে সংরক্ষণ করা হচ্ছে, তবে বস্তুর পুনঃব্যবহার একটি ভাগ্যবান দুর্ঘটনার চেয়ে বেশি ছিল যা আমি মনে করি যা একটি পৃথক পরামর্শ থেকে এসেছে। প্রাথমিকভাবে এটি একটি পৃথক বস্তুতে সংরক্ষণ করা হয়েছিল যা অবশ্যই চ্যালেঞ্জের সুযোগের জন্য সম্পূর্ণ অপ্রয়োজনীয় ছিল।
জানুয়ারী

3

পাইথন , 82 বাইট

lambda s:S(r.lower(),t,S(r,t,s))
import re
S=re.sub
r='([A-Z])(.*?)'*2
t=r'\3\2\1'

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


এটা কিভাবে কাজ করে? ল্যাম্বদা এমনকি বলা হয়?
সার্জে বোর্স

ল্যাম্বদা হ'ল আসল (ফাংশন) জমা দেওয়া। বাকি সমস্ত কিছুই কেবল কোডের সাথে রয়েছে যা ল্যাম্বডা বলার আগেই কার্যকর করা উচিত।
ডেনিস

3

কিউব্যাসিক, 229 বাইট

LINE INPUT s$
FOR i=1TO LEN(s$)
c$=MID$(s$,i,1)
IF"@"<c$AND"[">c$THEN
IF u THEN MID$(s$,u,1)=c$:MID$(s$,i,1)=u$
u=-i*(u=0)
u$=c$
ELSEIF"`"<c$AND"{">c$THEN
IF l THEN MID$(s$,l,1)=c$:MID$(s$,i,1)=l$
l=-i*(l=0)
l$=c$
END IF
NEXT
?s$

কৌশল

আমরা ইনপুট স্ট্রিং মাধ্যমে লুপ। যখন আমরা একটি বড় হাতের অক্ষরের মুখোমুখি হই তখন আমরা এটি এবং এর অবস্থান সংরক্ষণ করি। দ্বিতীয়বার যখন আমরা বড় হাতের অক্ষরের মুখোমুখি হই, তখন আমরা পূর্ববর্তী অক্ষরের সাথে এটি স্যুপ করার জন্য সেগুলি সঞ্চিত মানগুলি ব্যবহার করি। ছোট হাতের জন্য একই।

(আমি একটি অ্যারে ব্যবহার করে একটি দীর্ঘতর সংস্করণ পোস্ট করতে চলেছিলাম, কারণ আমি ভেবেছিলাম যে কিউব্যাসিক স্ট্রিংগুলি অপরিবর্তনীয় Then তবে আমি MID$(strng$, index, length) = replacement$ঠিক ঠিক কাজ করে এমন ঘটনাটি পেরেছি Live

Ungolfed + মন্তব্য করেছে

LINE INPUT text$

FOR i = 1 TO LEN(text$)
  char$ = MID$(text$, i, 1)
  IF "A" <= char$ AND "Z" >= char$ THEN
    ' Uppercase
    IF upperIndex = 0 THEN
      ' This is the first of a pair of uppercase letters
      ' Store the letter and its index for later
      upperLetter$ = char$
      upperIndex = i
    ELSE
      ' This is the second of a pair of uppercase letters
      ' Put it at the position of the previous uppercase letter
      ' and put that letter at this letter's position
      MID$(text$, upperIndex, 1) = char$
      MID$(text$, i, 1) = upperLetter$
      upperIndex = 0
    END IF
  ELSEIF "a" <= char$ AND "z" >= char$ THEN
    ' Lowercase
    IF lowerIndex = 0 THEN
      ' This is the first of a pair of lowercase letters
      ' Store the letter and its index for later
      lowerLetter$ = char$
      lowerIndex = i
    ELSE
      ' This is the second of a pair of lowercase letters
      ' Put it at the position of the previous lowercase letter
      ' and put that letter at this letter's position
      MID$(text$, lowerIndex, 1) = char$
      MID$(text$, i, 1) = lowerLetter$
      lowerIndex = 0
    END IF
  END IF
NEXT i

PRINT text$

2

সি ++ 11 (জিসিসি), 154 149 বাইট

#include<algorithm>
[](std::string s){int*p,u,l=u=-1;for(auto&c:s)(c|32)-97<26U?p=&(c&32?u:l),~*p?(std::swap(c,s[*p]),*p=-1):*p=&c-&s[0]:0;return s;}

1
আপনার হয় হয় #include<string>বা সি ++ 14 এ স্যুইচ করা উচিত এবং একটি জেনেরিক ল্যাম্বডা ঘোষণা করুন [](auto s)এবং sহতে হবে std::string। এছাড়াও, ঘোষণা [](auto&s)আপনাকে আউটপুট হিসাবে অনুমোদিত হিসাবে ইনপুট আর্গুমেন্টগুলি পরিবর্তন করার হিসাবে স্ট্রিং ফিরিয়ে দেওয়া থেকে বাঁচায়।
কার্ল ন্যাপফ

2

কিবাসিক, 436 408 বাইট

LINE INPUT a$:b=len(a$):FOR a=1TO b:t$=MID$(a$,a,1)
IF"@"<t$AND"[">t$THEN
b$=b$+"U":u$=u$+t$
ELSEIF"`"<t$AND"{">t$THEN
b$=b$+"L":l$=l$+t$
ELSE b$=b$+t$
END IF:NEXT
FOR x=1TO b STEP 2:g$=g$+MID$(u$,x+1,1)+MID$(u$,x,1):h$=h$+MID$(l$,x+1,1)+MID$(l$,x,1):NEXT
FOR x=1TO b:t$=MID$(b$,x,1)
IF"U"=t$THEN
u=u+1:z$=z$+MID$(g$,u,1)
ELSEIF"L"=t$THEN l=l+1:z$=z$+MID$(h$,l,1)
ELSE z$=z$+t$
END IF:NEXT:?z$

ডিএলসকে ধন্যবাদ জানিয়ে একটি বাইট সংরক্ষণ করা হয়েছে। চিঠিবিহীন অক্ষরের হ্যান্ডলিং পরিবর্তন করে আরও বেশ কয়েকটি সংরক্ষণ করা হয়েছে।

এটি মূলত তিনটি অংশ নিয়ে গঠিত:

  • ইনপুটটি তিনটি স্ট্রিংয়ে বিভক্ত করা (বড় হাতের অক্ষর, ছোট হাতের মানচিত্র এবং একটি মানচিত্র (অন্যান্য অক্ষরগুলিও ধারণ করে))
  • বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর উল্টানো
  • (পুনরায়) আউটপুটটি নির্মাণ করতে মানচিত্র ব্যবহার করে।

আরও বিশদ বিবরণ (নোট করুন যে এটি কোডের পূর্ববর্তী সংস্করণের, তবে নীতিটি এখনও প্রয়োগ হয়):

' --- Part I: Reading the input
LINE INPUT a$
'This FOR loop takes one character at a time
b=len(a$):FOR a=1TO b
' And checks in what category the character belongs
t$=MID$(a$,a,1):SELECT CASE t$
' For each group, char t$ is added to that group (u$ for uppercase, 
' l$ for lowercase. The map in b$ is updated with a U or L on this index,
' or with the non-letter char t$.
CASE"A"TO"Z":b$=b$+"U":u$=u$+t$
CASE"a"TO"z":b$=b$+"L":l$=l$+t$
CASE ELSE:b$=b$+t$
END SELECT:NEXT

' --- Part II: Swapping within case-groups
' Loop through u$ and l$ twp chars at a time, and add those chunks in reverse order
' to g$ and h$. Because mid$ doesn't fail past the end of a string (but returns ""), 
' this automatically compensates for odd-length groups.
FOR x=1TO b STEP 2:g$=g$+MID$(u$,x+1,1)+MID$(u$,x,1):h$=h$+MID$(l$,x+1,1)+MID$(l$,x,1):NEXT

' --- Part III: Read the map to put it all back together
FOR x=1TO b:t$=MID$(b$,x,1)
' See what group was in this spot, then read the next char from the flipped string.
' This keeps an index on those strings for the next lookup.
IF t$="U"THEN
u=u+1:z$=z$+MID$(g$,u,1)
ELSEIF t$="L"THEN l=l+1:z$=z$+MID$(h$,l,1)
' The map contains a non-letter char, just drop that in
ELSE z$=z$+t$
' And finally,display the end result.
END IF:NEXT:?z$

2

পিএইচপি, 108 93 83 বাইট

<?=preg_replace([$a="/([a-z])([^a-z]*)([a-z])/",strtoupper($a)],"$3$2$1",$argv[1]);

পূর্ববর্তী সংস্করণ (93 বাইট)

<?=preg_replace(["/([a-z])([^a-z]*)([a-z])/","/([A-Z])([^A-Z]*)([A-Z])/"],"$3$2$1",$argv[1]);

preg_replace()যুক্তি হিসাবে স্ট্রিং এর অ্যারে নিতে পারে আমাকে মনে করিয়ে দেওয়ার জন্য @ user59178 ধন্যবাদ ।


আসল উত্তর (108 বাইট)

$f=preg_replace;echo$f("/([a-z])([^a-z]*)([a-z])/",$r="$3$2$1",
$f("/([A-Z])([^A-Z]*)([A-Z])/",$r,$argv[1]));

উপলভ্য জায়গার ফিট করার জন্য কোডটি এখানে মোড়ানো রয়েছে।
কমান্ড লাইন থেকে এটি কার্যকর করা যেতে পারে:

$ php -d error_reporting=0 -r '$f=preg_replace;echo$f("/([a-z])([^a-z]*)([a-z])/",$r="$3$2$1",$f("/([A-Z])([^A-Z]*)([A-Z])/",$r,$argv[1]));' 'lLEhW OroLd!'

পিএইচপি 7-তে একটি 1 বাইটের সংক্ষিপ্ত সংস্করণ $fএটির প্রথম কলটির অভ্যন্তর অ্যাসাইনমেন্টটি সাজাতে সম্ভব :

echo($f=preg_replace)("/([a-z])([^a-z]*)([a-z])/",$r="$3$2$1",
$f("/([A-Z])([^A-Z]*)([A-Z])/",$r,$argv[1]));

উভয় সমাধান, পরীক্ষা ক্ষেত্রে এবং ungolfed সংস্করণের সাথে পাওয়া যাবে গিটহাব


1
preg_replaceএটি করার জন্য প্রতিস্থাপনের একটি অ্যারে নিতে পারে যাতে আপনার কেবলমাত্র একটি কল প্রয়োজন। এছাড়াও এটি ব্যবহারের <?=চেয়ে কম echo। এগুলি দিয়ে আপনার উত্তরটি 93 বাইটে নামা সহজ।
ব্যবহারকারী59178

আপনি ঠিক সম্পর্কে preg_replace()। আমি এটি সম্পর্কে ভুলে গেছি। আমি পছন্দ করি না <?=(আমার মতে <?ভাষার অংশ নয়, এটি কেবল একটি চিহ্নিতকারী) এবং আমি স্বল্প ওয়ান-লাইন প্রোগ্রাম লিখতে চাই যা ব্যবহার করে কমান্ড লাইন থেকে কার্যকর করা যায় php -r। তবে কোড গল্ফের উদ্দেশ্যে আপনি আবার ঠিক আছেন। আমি 1 বাইট ব্যবহার করে সঞ্চয় করতে পারি <?=
axiac

1

গণিত, 96 বাইট

s[#,r="([a-z])(.*?)([a-z])"]~(s=StringReplace[#,RegularExpression@#2->"$3$2$1"]&)~ToUpperCase@r&

লিওর রেটিনা উত্তরের একটি বন্দর , যা নিয়মিত প্রকাশ করে uses


আমি সত্যই অবাক হয়েছি যে এর জন্য গণিতের কোনও অন্তর্নির্মিতা নেই, আমি বলতে চাইছি, "যদি ইস্টার রবিবার", "কখন সূর্যাস্ত হয়" এবং "ফ্রান্সের আকৃতি কী" অন্তর্নির্মিত হয়, তবে এটিরও উচিত!
sagiksp


1

বিন , 83 বাইট

Hexdump:

00000000 26 53 d0 80 d3 d0 80 a0 5d 20 80 0a a1 81 81 00  &SÐ.ÓÐ. ] ..¡...
00000010 23 81 01 20 80 0a a1 81 81 02 23 81 01 a8 db c1  #.. ..¡...#..¨ÛÁ
00000020 ad da dd a9 a8 db de c1 ad da dd aa bf a9 a8 db  .ÚÝ©¨ÛÞÁ.Úݪ¿©¨Û
00000030 c1 ad da dd 29 a4 b3 a4 b2 a4 31 a8 db e1 ad fa  Á.ÚÝ)¤³¤²¤1¨Ûá.ú
00000040 dd a9 a8 db de e1 ad fa dd aa bf a9 a8 db e1 ad  Ý©¨ÛÞá.úݪ¿©¨Ûá.
00000050 fa dd 29                                         úÝ)
00000053

সমতুল্য জাভাস্ক্রিপ্ট:

a.replace(/([A-Z])([^A-Z]*?)([A-Z])/g,'$3$2$1').replace(/([a-z])([^a-z]*?)([a-z])/g,'$3$2$1')

ব্যাখ্যা:

সুস্পষ্টভাবে ইনপুটটির প্রথম লাইনটিকে বিনাবিহীন হিসাবে গ্রহণ করা a(যেহেতু নিউলাইনগুলি স্ক্র্যাম্বলড স্ট্রিংয়ের অংশ হতে পারে না), এবং স্পষ্টতই বড় হাতের অক্ষর প্রতিস্থাপন করে আনস্র্যাম্বলড স্ট্রিংকে আউটপুট দেয়, তারপরে ছোট হাতের জোড়া।

এখানে ডেমো চেষ্টা করুন।

এখানে পরীক্ষার স্যুট চেষ্টা করুন।


1

রুবি, 81 বাইট

puts f=->(i,s){i.gsub /([#{s})([^#{s}*)([#{s})/,'\3\2\1'}[f[$*[0],'a-z]'],'A-Z]']

1

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

লিওর রেটিনা উত্তরের ভিত্তিতে ।

s=>eval("s"+(r=".replace(/([A-Z])([^A-Z]*)([A-Z])/g,'$3$2$1')")+r.toLowerCase())

এই কাজ করে কারণ কোডে শুধুমাত্র বড় হাতের অক্ষর .replace(/([A-Z])([^A-Z]*)([A-Z])/g,'$3$2$1')দ্বারা Aএবং Z, যা চরিত্র রেঞ্জ বর্ণনা করতে ব্যবহার করা হয়। দ্বিতীয় পাসটি প্রক্রিয়া করার জন্য এটি আমাদের ছোট হাতের অক্ষরে রূপান্তরিত করতে হবে।

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


আসলে, এটি ডেনিসের পাইথন উত্তরের সাথে খুব মিল খুঁজে বের করেছে ।
আর্নল্ড

1

ES6 155 - 195 বাইট

আমি জানি ইতিমধ্যে এর থেকে আরও ভাল উত্তর রয়েছে, তবে আমি রেজিক্স ছাড়াই চেষ্টা করতে চেয়েছিলাম। এটি একটি বিরামচিহ্নের উপরও কাজ করে তবে এটি (^_^)পরীক্ষার লঙ্ঘন করে বলে মনে হয় । সেক্ষেত্রে আমার আরও একটি c()ফাংশন রয়েছে যা নীচে দেওয়া হয়েছে।

f=(s)=>{d={};s=[...s];for(i in s){b=s[i];for(j in s)if(i<j&!d[i]&c(s[j])==c(b)){d[j]=1;s[i]=s[j];s[j]=b;break}}return s.join('')}
c=c=>~(c.charCodeAt()/32)

f("M I'o DaG") //> I'M a GoD
f("(^_^)")     //> )_^^(

c=c=>((c!=c.toUpperCase())<<1|c!=c.toLowerCase())||c.charCodeAt()

f("M I'o DaG") //> I'M a GoD
f("(^_^)")     //> (^_^)

ব্যাখ্যা

f=(s)=>{
    d={};        //list of indexes already swapped
    s=[...s];        //string to array, stolen from above ES6 answer
    for(i in s){
        b=s[i];        //keep a note of what we are swapping
        for(j in s)        //iterate over the array again
            if( i<j & !d[i] & c(s[j])==c(b) ){
                        //only pay attention after we pass i'th
                        //only swap if this char hasn't been swapped
                        //only swap if both chars in same 'category'
                d[j]=1;        //note that the latter char has been swapped
                s[i]=s[j];
                s[j]=b;
                break        //avoid swapping on the same 'i' twice
            }
    }
    return s.join('')        //return as string
}

1

পার্ল 6 , 56 বাইট

{for "A".."Z","a".."z" ->@c {s:g/(@c)(.*?)(@c)/$2$1$0/}}

আর্গুমেন্ট হিসাবে একটি স্ট্রিং ভেরিয়েবল গ্রহণ করে এবং এটি জায়গায় জায়গায় পরিবর্তন করে যাতে ল্যাম্বডাকে ভেরিয়েবল বলার পরে ফলাফল থাকে।

পার্লের তুলনায় এটি আর দীর্ঘ হবে কারণ:

  • নতুন রেজেক্স সিনট্যাক্সটি আরও ভার্বোজ, উদাহরণস্বরূপ অক্ষরের ক্লাসগুলি লেখার <[A..Z]>পরিবর্তে দেখতে ভাল লাগবে [A-Z]
  • রেজিগেক্সগুলি প্রথম শ্রেণীর উত্স কোডটি সংকলনের সময় পার্স করা হয় এবং একটি স্ট্রিং কেবল রান-টাইমে তাদের মধ্যে সংযুক্ত করা যেতে পারে যদি এতে কোনও স্ব-অন্তর্ভুক্ত সাবরেজেক্স থাকে (যেমন আপনি একটি অক্ষরকে একটি অক্ষর শ্রেণিতে বিভক্ত করতে পারবেন না)।
  • এক্সপ্লিট EVAL, যা আরও নমনীয়তার অনুমতি দেয়, গল্ফ-বন্ধুত্বপূর্ণ use MONKEY-SEE-NO-EVAL;প্রগমা প্রয়োজন।

প্লাস পাশের, @ভেরিয়েবলের একটি অ্যারে সরাসরি একটি রেজেক্সে উল্লেখ করা যেতে পারে এবং এটি বিকল্প হিসাবে বিবেচনা করা হয়।


পার্ল 6 , 65 বাইট

{reduce ->$_,@c {S:g/(@c)(.*?)(@c)/$2$1$0/},$_,"A".."Z","a".."z"}

কার্যকরী সংস্করণ (ল্যাম্বদার ফেরতের মান হিসাবে ফলাফলকে আউটপুট করে)।


1

আর, 343 বাইট

মারাত্মক আনাড়ি আর সমাধান:

f <- function(x) {
        y=unlist(strsplit(x,""))
        z=data.frame(l=ifelse(y %in% letters,0,ifelse(y %in% LETTERS,1,2)),s=y)
        l <- list(which(z$l==0),which(z$l==1))
        v <- unlist(l)
        for(j in 1:2) for (i in seq(1,ifelse(length(l[[j]])%%2==1,length(l[[j]])-2,length(l[[j]])-1),2)) l[[j]][i:(i+1)] <- rev(l[[j]][i:(i+1)])
        z[v,] <- z[unlist(l),]
        return(z$s)
    }

f("D's mroyr, Ivam. I'e faardi I act'n od htta.")

# [1] I ' m   s o r r y ,   D a v e .   I ' m   a f r a i d   I   c a n ' t   d o   t h a t .

1

পাইথন 2, 181 বাইট

এর চেয়ে অনেক বেশি দীর্ঘ হওয়া উচিত তবে যাইহোক:

def F(s):
 for l in[i for i,c in enumerate(s)if c.isupper()],[i for i,c in enumerate(s)if c.islower()]:
  for a,b in zip(l[0::2],l[1::2]):s=s[:a]+s[b]+s[a+1:b]+s[a]+s[b+1:]
 print s

এটি প্রথমে দুটি তালিকা তৈরি করে: বড় হাতের অক্ষরগুলির সূচকগুলির একটি এবং ছোট হাতের অক্ষরের জন্য একটি for এই তালিকাগুলির প্রত্যেককেই সূচকের জোড়ায় জুড়ে দেওয়া হয় এবং সেই সূচকগুলিতে অক্ষরগুলি পরিবর্তন করা হয়।

আমি আগামীকাল এটিকে গল্ফ করব , তবে আপাতত ঘুমানোর সময় এসেছে


1

পিপ , 28 বাইট

Y[XLXU]aRy.`.*?`.y{Sa@0a@va}

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

বিল্টিন রেজেক্স ভেরিয়েবল XL(ছোট হাতের অক্ষর, `[a-z]`) এবং XU(বড় হাতের অক্ষর, ) ব্যবহার করে এটি একটি রেজেক্স সমাধান `[A-Z]`

                              a is 1st cmdline arg; v is -1 (implicit)
Y[XLXU]                       Yank a list containing XL and XU into y
         y.`.*?`.y            Concatenate y, `.*?`, and y itemwise, giving this list:
                              [`[a-z].*?[a-z]`; `[A-Z].*?[A-Z]`]
       aR                     In a, replace matches of each regex in that list...
                  {        }  ... using this callback function:
                   Sa@0a@v     Swap the 0th and -1st characters of the match
                          a    and return the resulting string
                              Print (implicit)

যখন দ্বিতীয় যুক্তিটি Rএকটি তালিকা হয়, প্রতিস্থাপনগুলি সিরিজটিতে সম্পাদিত হয়; সুতরাং, ছোট হাতের প্রতিস্থাপন এবং বড় হাতের প্রতিস্থাপন একে অপরের সাথে হস্তক্ষেপ করে না।



1

এডাব্লুকে , 121 129 বাইট

BEGIN{FS=OFS=""}{for(a=1;a<=NF;a++){if($a~/[A-Z]/?U>0?p=U+(U=0):0*(U=a):$a~/[a-z]/?L>0?p=L+(L=0):0*(L=a):0>0){t=$a;$a=$p;$p=t}}}1

এটি অনলাইন চেষ্টা করুন! দ্রষ্টব্য: লিঙ্কটিতে মাল্টলাইন ইনপুটটিকে অনুমতি দেওয়ার জন্য 8 টি অতিরিক্ত বাইট রয়েছে

ব্যবহার মোটামুটি সাধারণ, তবে এর কোনও সংস্করণ প্রয়োজন AWKযা ক্ষেত্র বিভাজক হিসাবে খালি স্ট্রিং গ্রহণ করে (বেশিরভাগ সংস্করণ gawkতবে আমি নিশ্চিত যে আসলটি AWKব্যর্থ হবে :()

এটি একেবারে সোজাসাপ্ট কারণ এটি প্রতিটি চরিত্রের উপরে কেবল পুনরাবৃত্তি করে এবং এটির আগে কেসের কোনও একটি পাওয়া যায় কিনা তা যাচাই করে। যদি তা হয় তবে এটি অক্ষরগুলি অদলবদল করে এবং পরীক্ষিত সূচিটি পুনরায় সেট করে। বিষয়গুলি শেখার পক্ষে, আমি আগে কখনও কোনও এসাইনমেন্ট স্টেটমেন্টের মধ্যে কোনও এসাইনমেন্ট স্টেটমেন্ট ব্যবহার করতাম না AWK। কোনও কারণে এটি কখনই সামনে আসেনি। :)

BEGINকমান্ড-লাইন অ্যাসাইনমেন্ট বা অনুরূপ মাধ্যমে কোনও ব্লকের বাইরে ওএফএস এবং এফএস নির্ধারণের কথা বলে আমি বেশ কয়েকটি বাইট শেভ করতে সক্ষম হতে পারি তবে এটি এইভাবে "ক্লিনার"।

টিআইও লিঙ্কটি যুক্ত করা আমাকে দেখিয়েছিল যে আমার কাছে একটি প্রতিলিপি ত্রুটি ছিল যা ঠিক করতে 8 বাইট প্রয়োজন :( (আমি ছেড়ে গেছি 0*(U=a):))


1

সি (জিসিসি) , 212 206 বাইট

#define I(a,b)if(S[j=i]>=a&S[i]<-~b){for(;S[++j]<a|S[j]>b;);j<l?s[i]=S[j],s[j]=S[i]:0;}
i,j,l;f(char*S){char*s=calloc(l=-~strlen(S),1);for(i=~0;++i<strlen(S);)if(!s[i]){s[i]=S[i];I(65,90)I(97,'z')}puts(s);}

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


আপনাকে ধন্যবাদ
জোনাথন ফ্রেচ

1

স্ট্যাক্স , 18 বাইট

âß:}\]ó☺æ■jφ╛jz/Φi

এটি চালান এবং এটি ডিবাগ করুন

সাধারণ পন্থা রেজেক্স ভিত্তিক।

  • দু'বার করুন:
  • এর জন্য সমস্ত ম্যাচ সন্ধান করুন [a-z].*?[a-z]
  • ম্যাচে প্রথম এবং শেষ চরিত্রটি অদলবদল করুন।
  • বিপরীত কেস

1

আর , 223 163 বাইট 148 বাইট

সম্পাদনা: লুপের জন্য প্রয়োগ করে -60 বাইট

সম্পাদনা: জিউসেপ থেকে -15 বাইট

u=utf8ToInt(scan(,''));for(i in c(65,97)){l=which(u%in%i:(i+25));x=sum(l|1)%/%2;u[l[1:(x*2)]]=u[c(matrix(l,2)[2:1,1:x])]};cat(intToUtf8(u,T),sep="")

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

অক্ষর যদি ছোট হাতের বা বড় হাতের হয় তবে পরীক্ষার মাধ্যমে কাজ করে, এগুলিকে একটি ম্যাট্রিক্সে রাখে, অদলবদল বিন্যাসে মানগুলি বের করতে ম্যাট্রিক্সকে উল্টে দেয়। তারপরে আউটপুট catscan(,'')কোডটি যদি এক লাইনের বেশি হয় তবে অনলাইনে লড়াই করে দেখুন, তাই কোডের একক লাইন জুড়ে সেমিকোলন।


আমি আপনার লিঙ্কে 168 পেয়েছি, তবে এই গল্ফটি 163
জিউসেপ 21

আর এই এটা 162. এনেছে
: Giuseppe

এটি সম্ভবত কাজ করে; xবাজে কাজে ব্যস্ত চালাক বিট, কিন্তু পরিত্রাণ m=matrixহিসাবে ভাল ছিল 4 বাইট।
জিউসেপ

scan(,'')সমস্যা কী ? এবং "lLEhW OroLd!" হ্রাস করা হচ্ছে scan(,'')ইনপুট পেতে টিআইও বা অন্য কোনও উপায়ে?
Sumner18

1
: আপনি একটি দম্পতি মিস tio.run/##Dc5NC4IwGADgv2LC8H1rEA76muzYIRC6GB3Eg6zEwdxibjSofvvy/...
: Giuseppe

0

জাভা 7, 117 বাইট

String c(String s){String x="([a-z])(.*?)([a-z])",y="$3$2$1";return s.replaceAll(x,y).replaceAll(x.toUpperCase(),y);}

সম্পাদনা: সবেমাত্র খেয়াল করেছিলাম আমার কাছে @ লিওর রেটিনা জবাবের মতো একই উত্তর রয়েছে , যদিও আমি এ সম্পর্কে স্বতন্ত্রভাবে চিন্তা করেছি ..

Ungolfed:

String c(final String s) {
  String x = "([a-z])(.*?)([a-z])",
         y = "$3$2$1";
  return s.replaceAll(x, y).replaceAll(x.toUpperCase(), y);
}

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  static String c(String s){String x="([a-z])(.*?)([a-z])",y="$3$2$1";return s.replaceAll(x,y).replaceAll(x.toUpperCase(),y);}

  public static void main(String[] a){
    System.out.println(c("lLEhW OroLd!"));
    System.out.println(c("rpGOZmaimgn uplRzse naC DEoO LdGf"));
    System.out.println(c("eIt uqHKC RBWOO xNf ujPMO SzRE HTL EOvd yAg"));
    System.out.println(c("NraWgCi: Nsas-eNEiTIsev rNsiTG!!"));
    System.out.println(c("(^_^)"));
    System.out.println(c("AWCTY HUOS RETP"));
    System.out.println(c("hwn oeesd acsp nawyya"));
    System.out.println(c("SpMycaeIesKyBorekn"));
    System.out.println(c("D's mroyr, Ivam. I'e faardi I act'n od htta."));
  }
}

আউটপুট:

hELlO WorLd!
prOGRamming puzZles anD COdE GoLf
tHe quICK BROWN fOx juMPS OvER THE LAzy dOg
WarNiNg: Case-sENsITive sTriNG!!
(^_^)
WATCH YOUR STEP
who needs caps anyway
MySpaceKeyIsBroken
I'm sorry, Dave. I'm afraid I can't do that.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.