विभाजित और बड़ा करें


14

चुनौती :

विशिष्ट पदों पर एक स्ट्रिंग विभाजन को देखते हुए और दिए गए शब्द के पहले चरित्र को कैपिटलाइज़ करें। पहले शब्द के पहले चार अक्षरों को कैपिटलाइज़ करें और यदि केवल पहले से ही कैपिटल किया गया है

इनपुट:

एक तार sऔर एक पात्र c

ऊपुत:

प्रत्येक घटना के साथ स्ट्रिंग cको पहले चार कैप के साथ बदल दिया गया

उदाहरण :

STRING(s)             CHARACTER(c)  RESULT
Hello_world           _             HelloWorld
me,no,like            ,             meNoLike
you-got-it            -             youGotIt
Am^I^clear            ^             AmIClear
go!full!caps          !             goFullCaps
weird&but&tRue        &             weirdButTRue
ProbleM1fixed1no      1             ProbleMFixedNo
!prob!!lem!s!Olved!!  !             ProbLemSOlved

ध्यान दें :

  • दिया गया इनपुट हमेशा मान्य होगा। यानी: पहले हमेशा एक स्ट्रिंग होगी जिसमें चरित्र के कम से कम एक उदाहरण को बदलना होगा। दूसरा हमेशा एकल चरित्र होगा।
  • इनपुट स्ट्रिंग की लंबाई 4 से अधिक होगी।
  • विभाजित करने के लिए चरित्र की कम से कम एक घटना होगी।

  • इनपुट में केवल अक्षर और विभाजक होने की गारंटी दी गई है (धन्यवाद @Arnauld)

  • विभाजक कुछ भी है जो वर्णमाला (az / AZ) नहीं है (@Dennis द्वारा सुझाया गया है)

जीत मापदंड:

यह प्रत्येक भाषा की जीत के लिए बाइट्स में इतना छोटा कोड है।


  1. दो गलतियों को इंगित करने के लिए @JonathanAllan को धन्यवाद।

7
टेस्ट केस बनाते समय सुझाव: प्रत्येक एक कम से कम एक कोने के मामले को कवर करें। आपके सभी परीक्षण मामले मूल रूप से समान हैं (हो सकता है कि एक को छोड़कर 1)। इस बारे में सोचने की कोशिश करें कि समाधान कैसे विफल हो सकते हैं, और ऐसी स्थितियों के लिए एक परीक्षण मामला बना सकते हैं। कुछ उदाहरण: विभाजक के रूप में पत्र, विभाजक अंतिम चरित्र, लगातार विभाजक और इतने पर। कई परीक्षण मामलों की आवश्यकता नहीं है जो विभिन्न चीजों का परीक्षण नहीं करते हैं।
स्टीवी ग्रिफ़िन

आप पिछले परीक्षण मामले में एक सीमांकक को याद कर रहे हैं - एक होना चाहिए! वहाँ। मैं इसे स्वयं संपादित करूंगा, लेकिन मेरे लिए इसे करने के लिए पर्याप्त वर्ण नहीं हैं।
18'13

1
मैंने कल्पना में कई बदलावों के कारण इसे अस्वीकृत कर दिया है। एक सिडेनोट पर, आपको अंतिम परीक्षण मामले की तुलना में बहुत जल्द उल्लेख करना होगा कि स्ट्रिंग में 2 या अधिक लगातार "विभाजक" हो सकते हैं और हमें गारंटी नहीं है कि एक पत्र हमेशा एक "विभाजक" का पालन करेगा।
झबरा

2
मैंने इसे देखा: स्टेवी ने किसी भी परीक्षण मामलों का सुझाव नहीं दिया, लेकिन उन्होंने पूछा कि क्या पहला या अंतिम चरित्र एक विभाजक हो सकता है और क्या लगातार विभाजक हो सकता है। भविष्य में, कृपया इन सभी विवरणों को लाइव करने से पहले सैंडबॉक्स का उपयोग करने पर विचार करें। विनिर्देश में बदलाव के कारण आपका उत्तर अमान्य हो जाना निराशाजनक है। सभी के लिए सबसे आश्चर्य की बात चरित्र को इनपुट के रूप में लेने का प्रतिबंध है, भले ही कार्यक्रम को इसकी आवश्यकता न हो। इसका बिलकुल कोई अर्थ नहीं है।
डेनिस

1
क्या हमारे पास विभाजक के साथ एक परीक्षण-मामला .हो सकता है, मैं उस एक के साथ संघर्ष करने वाले कुछ स्ट्रिंग विभाजन कार्यों की कल्पना कर सकता हूं।
JAD

जवाबों:




5

जावास्क्रिप्ट (ईएस 6), 58 56 बाइट्स

2 बाइट्स @ l4m2 / @Downgoat के लिए धन्यवाद

करी सिंटैक्स में इनपुट लेता है (s)(c)

s=>c=>s.replace(u=/./g,x=>u=x==c?'':u?x:x.toUpperCase())

इसे ऑनलाइन आज़माएं!

टिप्पणी की गई

s => c =>                  // given s and c
  s.replace(u = /./g, x => // initialize u to a RegExp; replace each character x in s with,
    u =                    // and update u to:
      x == c ?             //   if x is the separator:
        ''                 //     an empty string
      :                    //   else:
        u ?                //     if u is not an empty string:
          x                //       x unchanged
        :                  //     else:
          x.toUpperCase()  //       x capitalized
  )                        // end of replace()

सांत्वना 56 बाइट्स के लिए s=>c=>s.replace(RegExp(c+".","g"),m=>m[1].toUpperCase()), क्योंकि यह विशेष रेगेक्स वर्णों के लिए काम नहीं करता है
कॉनर ओ'ब्रायन

50 बाइट्स । या यदि आप दूसरा इनपुट लेने से परेशान नहीं हैं, जो अप्रासंगिक है।
झबरा

1
@ शगुन थैंक्स! मैंने इसे एक अलग संस्करण के रूप में जोड़ा है, क्योंकि नए नियम मूल लोगों से काफी अलग हैं।
अरनौलद

1
फेल!prob!!lem!s!Olved!!
l4m2

@ l4m2, यह एक नया परीक्षण मामला है जो फिर से कल्पना को बदल देता है । RegEx में A +इससे पहले .मिलेगा।
झबरा


3

sed 4.2.2 (-r), 21

s/[^a-z]+(.)?/\u\1/gi

मैंने \Wइसके बजाय कोशिश की [^a-z], लेकिन दुर्भाग्य से यह मेल नहीं खाता _

इसे ऑनलाइन आज़माएं!


हमारे नए मानकों द्वारा, झंडे के प्रत्येक आह्वान को एक अलग भाषा माना जाता है , और इस प्रकार आपके उत्तर को बदल दिया जा सकता है sed 4.2.2 (-r), 21 bytes
मिस्टर एक्सकोडर

@ Mr.Xcoder अच्छा लगता है - धन्यवाद!
डिजिटल ट्रामा

3

जेली , 8 बाइट्स

Œt⁸1¦«⁸ḟ

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

Œt⁸1¦«⁸ḟ  Main link. Left argument: s (string). Right argument: c (character).

Œt        Title case; capitalize the first character of each word.
  ⁸1¦     Replace the first character of the result with the first character of s.
     «⁸   Take the character-wise minimum of the result and s.
          Note that uppercase letters have lower code points than lowercase ones.
       ḟ  Filterfalse; remove all occurrences of c.

3

ऑक्टेव , 83 , 66 , 64 बाइट्स

लुइस मेंडो के लिए धन्यवाद 2 बाइट्स सहेजे गए। upperके बजाय toupper

@(s,c,k=upper(s(i=find(s==c)+1)))[strsplit({s(i)=k,s}{2},c){:}];

इसे ऑनलाइन आज़माएं!

वाह, यह शायद मैंने कभी लिखा है ओक्टेव-कोड का सबसे गंदा टुकड़ा है! यह इस युक्तियों के प्रश्न में दिए गए दो चालों का उपयोग करता है , अर्थात् तर्क सूची, और सेल सरणियाँ।

स्पष्टीकरण:

तर्क सूची इनपुट:

@(s,c,k        % An anonymous function that may take three input variables, s, c, k
               % where the third argument has the default value:
 k=upper(s(i=find(s==c)+1))

kयहां sप्रत्येक विभाजक के बाद पहला चरित्र है c, जिसे ऊपरी मामले में परिवर्तित किया गया है। प्रत्येक पूंजीकृत वर्ण का सूचकांक में संग्रहीत किया जाता है i

सेल सरणी शरीर:

हम दो तत्वों के साथ एक सेल ऐरे बनाते हैं, एक तो हम यह कहते थे कि सभी i'th वर्णों को इसके समकक्ष द्वारा प्रतिस्थापित किया जाना चाहिए k, और दूसरे के साथ s, जो अब पहले से ही अद्यतन है। हम इसका उपयोग करते हुए इंडेक्स करते हैं {2}ताकि हमें केवल पूरी, संशोधित स्ट्रिंग वापस मिल सके। इसे खिलाया जाता है strsplit, जो इसे विभाजक चरित्र में कोशिकाओं में विभाजित करता है। हम इसे कॉमा से अलग की गई सूची का उपयोग करके परिवर्तित करते हैं {:}, और इसे चौकोर कोष्ठक का उपयोग करके वापस स्ट्रिंग में भेज देते हैं []

क्षमा याचना अगर यह आपके लिए कोई मतलब नहीं था ... यह मुश्किल से मेरे लिए समझ में आता है: पी


3

रेटिना 0.8.2 , 20 बाइट्स

T`lLp`LL_`[\W\d_]+.?

इसे ऑनलाइन आज़माएं! केवल स्ट्रिंग को लेता है, विभाजक वैकल्पिक। सभी गैर-अक्षर वर्ण हटा दिए जाते हैं लेकिन निम्नलिखित वर्णमाला के किसी भी अक्षर को ऊपर ले जाया जाता है। पिछले 34-बाइट संस्करण ने मनमाना इनपुट स्वीकार किया:

T`l`L`(?=.*(.)$)\1+.
(?=.*(.)$)\1

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण सूट शामिल है। मान लेता है कि इनपुट में स्ट्रिंग और वर्ण एक साथ समाहित हैं। स्पष्टीकरण: पहला चरण अंत वर्ण के घटित होने से लेकर ऊपरी स्थिति तक सभी वर्णों का तुरंत रूपांतरण करता है और दूसरा चरण अंत वर्ण की सभी घटनाओं को हटा देता है।

दोनों समाधानों के लिए, एक +काम के बजाय दाएं-से-बाएं मैच का उपयोग करना ।


चूंकि इनपुट की गारंटी है कि इसमें केवल अल्फाबेटिक अक्षर और विभाजक हैं, आप [^a-z]लुकाहेड्स के बजाय इसका उपयोग कर सकते हैं इसे ऑनलाइन आज़माएं!
user41805


2

रोड़ा , 57 54 बाइट्स

-3 बाइट्स गायों को धन्यवाद

{(_/`\Q$_`)|{pull;[upperCase(_[:1]),_1[1:]]if[#_1>0]}}

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

{
  (_/`\Q$_`)| /* Pull two strings and split the first with the second */
  {
    pull;                /* Pull one string and print it */
                         /* For each string _1 in the stream: */
                         /*   If _1 is not empty: */
    [                    /*     Print: */
      upperCase(_[:1]),  /*       The first character capitalized */
      _1[1:]             /*       The rest of characters */
    ]if[#_1>0]           /*   End if */
  }
}

आप \Eरेगेक्स से बाहर निकल सकते हैं , और _[0:1]_[:1]
user41805

2

वी , 6 7 बाइट्स

तर्क का उपयोग नहीं करके 1 बाइट बचाई गई

ÓÁˆ/õ±

इसे ऑनलाइन आज़माएं!

कार्यक्रम पाठ में इनपुट और एक तर्क के रूप में चार लेता है।

Hexdump:

00000000: d3c1 882f f5b1                           .../..

यह एक सरल प्रतिस्थापन है। असम्बद्ध, यह निम्नलिखित की तरह दिखता है

:s/\A(.)/\u\1/g

एक वैश्विक प्रतिस्थापन, जिसमें \Aएक गैर-वर्णनात्मक चरित्र, उसके बाद एक चरित्र (.)को \uपहले कैप्चर किए गए समूह के साथ बदल दिया जाता है\1


इनपुट के लिए काम नहीं करता है जहां cएक विशेष रेगेक्स चरित्र है
कॉनर ओ'ब्रायन

1
@ ConorO'Brien फिक्स्ड, और इसके लिए धन्यवाद मुझे एक छोटा
सा

2

स्काला, 83 बाइट्स

def f(s:String)={val w=s.split("[^a-zA-Z]");w(0)+w.tail.map(_.capitalize).mkString}

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

def f(s: String) = {                        // takes a String "s" as input
  val w = s.split("[^a-zA-Z]");             // split on non-alpha chars
  w(0) + w.tail.map(_.capitalize).mkString  // upper case first letter of all words except first one and join array into a String
}                                           //


1

05AB1E , 9 बाइट्स

¡ćsvyćusJ

इसे ऑनलाइन आज़माएं!

व्याख्या

¡           # split the string on the char
 ć          # extract the head of the resulting list
  s         # swap the head to the bottom of the stack
   vy       # for each string y in the rest of the list
     ću     # extract the head and capitalize it
       s    # swap it below the rest of the string
        J   # join everything to one string

1

PHP, 91 83 बाइट्स

$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);

के साथ चला -r। क्या 2 बाइट्स विस्फोट के बजाय स्प्लिट का उपयोग करके छोटी थी, लेकिन ^ रेगेक्स के कारण परीक्षण विफल हो जाता है।

-8 मेड के लिए धन्यवाद


1
आप लूप के लिए {और निकाल सकते हैं }, यह केवल अगले स्टेटमेंट को स्थिति के शरीर के रूप में मानेगा।
मेड

1
: आप भी लूप के अंदर गूंज कर सकते हैं$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);
मेड



0

भूसी , 10 बाइट्स

ΣΓ·:mΓo:ax

इसे ऑनलाइन आज़माएं!

व्याख्या

ΣΓ·:mΓ(:a)x  -- example inputs: 'x' "abxbcxcdxdex"
          x  -- split on character: ["ab","bc","cd","de"]
 Γ           -- pattern match (x = head) (xs = tail) and do..
  ·:         -- | construct list (x:xs) but with the second argument do..
    m        -- | | map (eg. "bc")
     Γ(  )   -- | | | pattern match on first character
      ( a)   -- | | | | upper-case it
      (: )   -- | | | | and join again
             -- | | | : "Bc"
             -- | | : ["Bc","Cd","De"]
             -- : ["ab","Bc","Cd","De"]
Σ            -- concatenate: "abBcCdDe"


0

जावा 10, 141 बाइट्स

s->c->{var r=s.split("\\"+c);var r=a[0],t;for(int i=0;++i<a.length;r+=t.isEmpty()?"":(char)(t.charAt(0)&~32)+t.substring(1))t=a[i];return r;}

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

s->c->{                    // Method with String and character parameters and String return-type
  var r=s.split("\\"+c);   //  Split String by character (with potential regex char)
  var r=a[0],              //  Result-String, starting at the first item
      t;                   //  Temp-String to reduce bytes
  for(int i=0;++i<a.length;//  Loop in the range [1, length_of_array)
      r+=                  //    After every iteration: append the result-String with:
         t.isEmpty()?      //     If the current item empty:
          ""               //      Append nothing
         :                 //     Else:
          (char)(t.charAt(0)&~32)
                           //      Capitalize the first character
          +t.substring(1)) //     And append the other characters as is
    t=a[i];                //   Set `t` to the current String-item of the array
  return r;}               //  Return the result-String

0

आर , 87 बाइट्स

g<-function(s,x,z=strsplit(s,x,T)[[1]])cat(z[1],capwords(z[-1]),sep="")
example(chartr)

इसे ऑनलाइन आज़माएं!

इस ट्रिक का उपयोग TIO में ठीक से नहीं किया जा सकता है इसलिए मैंने इसे सिम्युलेटेड किया।

हमें जरूरत है Tअन्यथा परीक्षण मामलों में से एक विफल हो जाता है।


0

स्टैक्स , 11 बाइट्स

óKo{cplòüö\

इसे चलाएं और डीबग करें

व्याख्या

/BsF1:/s^s|dl                 # Full Program, unpacked, Implicit Input
/                             # Split on substrings (Split input with symbol to split on)
 B                            # Remove first element from array. Push the tail of the array, then the removed element.
  s                           # Swap first two elements of stack
   F                          # Start for loop
    1:/                       # Split array at index; push both parts.
       s^s                    # Swap first two elements of stack, capitalize character, swap first two elements 
         |dl                  # Get length of stack, listify that amount (entire stack), implicit output of array

वहाँ कुछ हिस्सों मैं वास्तव में किसी भी तरह ठीक करना चाहते हैं। मैं इसे लगभग 8 बाइट्स तक ले जा सकता हूं, लेकिन यह अंतिम परीक्षण मामले>> <पर विफल रहता है


0

रूबी -pl , 36 बाइट्स

$_.gsub!(/[^a-z]+(.|$)/i){$1.upcase}

इसे ऑनलाइन आज़माएं!

दूसरे तर्क के बिना केवल स्ट्रिंग लेता है। gsub!विधि के ब्लॉक संस्करण का उपयोग करता है क्योंकि आम gsub! x,yवाक्यविन्यास $1आसानी से मैच डेटा से भरा नहीं है। |$regex में अंत में विभाजक के साथ परीक्षण के मामले के लिए आवश्यक है।


0

पायथन 3 , 77 बाइट्स

o=[]
for x in s.split(c): o.append(chr(ord(x[0])-32)+x[1:])
print(''.join(o))

इसे ऑनलाइन आज़माएं!

मतलब यह है कि स्ट्रिंग ASCII इनकोडिंग और कहा कि मान लिया गया है sऔर cइनपुट युक्त चर पहले से लोड कर रहे हैं।

for x in s.split(x)       #loop through items in the string s split by x
    o.append(             #add the following to c
        chr(              #turn the following number into a character
            ord(          #turn the following character into a number
                x[0]      #the first character in string x
            )-32          #subtract 32 from this number
        +x[1:]            #add everything past and including the second character in string x

यह समाधान इस तथ्य पर काम करता है कि एएससीआईआई एन्कोडिंग में, लोअरकेस अक्षर कैपिटल अक्षरों के बाद 32 प्रविष्टियां तैनात हैं

संपादित करें: मुझे बस एहसास हुआ कि यह स्ट्रिंग के पहले चरित्र को भी कैपिटल करता है, जिसे यह नहीं करना चाहिए। लेकिन मुझे अपनी बकवास पर काफी गर्व है, इसलिए अगर इसकी अनुमति दी गई तो मैं इसे छोड़ दूंगा


क्या sमाना जाता है?
मुहम्मद सलमान

@ मुहम्मदसलमानA string s and a character c.
डेविन मिलर

लवली, इसे काम करो, यहाँ जाओ और देखो कि यह काम करता है या नहीं: TIO । जब यह मुझे बताता है?
मुहम्मद सलमान

उफ़! मुझे बस एहसास हुआ कि चर नामों को बदलते समय मैंने एक गलती की है, c = [] किसी अन्य चर को माना जाता है
डेविन मिलर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.