एक स्ट्रिंग से अतिरिक्त रिक्त स्थान अलग करना


12

आपको एक तार दिया जाता है। स्ट्रिंग को प्रति शब्द एक स्थान के साथ आउटपुट करें।

चुनौती

इनपुट स्ट्रिंग के माध्यम से एक स्ट्रिंग (नहीं nullया खाली) होगा, जो उद्धरण के "माध्यम से भेजा जाएगा stdin। इसमें से प्रमुख और अनुगामी रिक्त स्थान निकालें। इसके अलावा, अगर दो शब्दों (या प्रतीकों या जो भी हो) के बीच एक से अधिक स्थान हैं, तो इसे केवल एक स्थान पर ट्रिम करें। उद्धरण के साथ संशोधित स्ट्रिंग आउटपुट।

नियम

  • स्ट्रिंग 100 वर्णों से अधिक लंबी नहीं होगी और इसमें केवल (tilde) रेंज (स्पेस) में ASCII अक्षर ~(वर्ण कोड 0x20 से 0x7E, समावेशी) "शामिल होंगे, अर्थात, स्ट्रिंग में उद्धरण ( ") और अन्य वर्ण शामिल नहीं होंगे । ऊपर निर्दिष्ट सीमा। संदर्भ के लिए ASCII तालिका देखें ।
  • आपको stdin(या निकटतम विकल्प) से इनपुट लेना होगा ।
  • आउटपुट में उद्धरण ( ") होना चाहिए ।
  • आप एक पूर्ण कार्यक्रम, या एक फ़ंक्शन लिख सकते हैं जो इनपुट (से stdin) लेता है , और अंतिम स्ट्रिंग को आउटपुट करता है

परीक्षण के मामलों

"this  is  a    string   "         --> "this is a string"

"  blah blah    blah "             --> "blah blah blah"

"abcdefg"                          --> "abcdefg"

"           "                      --> ""

"12 34  ~5 6   (7, 8) - 9 -  "     --> "12 34 ~5 6 (7, 8) - 9 -" 

स्कोरिंग

यह कोड गोल्फ है, इसलिए सबसे छोटा सबमिशन (बाइट्स में) जीतता है।


1
आप कहते हैं must take input from stdin, और बाद में आप कहते हैं ...or a function which takes input, and outputs the final string। क्या इसका मतलब यह है कि फ़ंक्शन को इनपुट से भी लेना चाहिए stdin?
ब्लुटोरांगे

@blutorange, हाँ। इसे स्पष्ट करने का संपादन किया।
स्पाइकट्रिक्स

2
" "aa" "-> ""aa""(इनपुट स्ट्रिंग के अंदर मान्य उद्धरण हैं?)
edc65

@ edc65, अच्छी बात है। उस के लिए जवाब नहीं है। इसे स्पष्ट करने का संपादन किया।
स्पाइकट्रिक्स

कृपया मेरे जवाब पर मिक्की की टिप्पणी देखें । क्या वह मान्य है? आर में, लौटे परिणाम स्पष्ट रूप से मुद्रित होते हैं, लेकिन मेरे जवाब में मैंने स्पष्ट रूप से स्टडआउट के लिए मुद्रित किया है।
एलेक्स ए

जवाबों:


12

सीजाम, 7 बाइट्स

q~S%S*p

कोड स्पष्टीकरण

CJam ने सभी बड़े अक्षरों को इनबिल्ट वैरिएबल के रूप में आरक्षित किया है। तो Sयहाँ एक स्थान का एक मूल्य है।

q~          e# Read the input (using q) and evaluate (~) to get the string
  S%        e# Split on running lengths (%) of space
    S*      e# Join (*) the splitted parts by single space
      p     e# Print the stringified form (p) of the string.

यह ट्रेलिंग और लीडिंग स्पेस को भी हटा देता है

इसे यहाँ ऑनलाइन आज़माएँ


10

/// : 18 अक्षर

/  / //" /"// "/"/

नमूना रन:

( व्याख्या /// के लिए अपने पर्ल जवाब से faubiguy दुभाषिया का उपयोग करना (उच्चारण 'स्लैश') ।)

bash-4.3$ ( echo -n '/  / //" /"// "/"/'; echo '"   foo  *  bar   "'; ) | slashes.pl
"foo * bar"


तकनीकी रूप से आप हालांकि इनपुट नहीं ले रहे हैं। ;) यह भाषा है लेकिन इनपुट पढ़ना अभी भी काफी दर्द है जो मुझे लगता है।
मार्टिन एंडर

6

पर्ल, २२

(कोड के 20 बाइट्स, प्लस 2 कमांड लाइन स्विच)

s/ +/ /g;s/" | "/"/g

-npस्विच के साथ चलाने की आवश्यकता है ताकि $_स्टड के माध्यम से स्वचालित रूप से भरा जाए और स्टडआउट पर मुद्रित किया जाए। मैं मान रहा हूँ कि यह बाइट गिनती में 2 जोड़ता है।


1
एक ही समाधान:sed -E 's/ +/ /g;s/" | "/"/g'
izabera

3
यही बात रेटिना में 12 बाइट्स की होती है । :)
मार्टिन एंडर

-pतात्पर्य -n, इसलिए आपको केवल एक +1 जुर्माना लेना होगा (यह मानकर कि आप किसी अन्य भाषा में स्विच नहीं करते हैं, जैसे अन्य टिप्पणीकार सुझाव देते हैं)।

4

रूबी, 31 29 25 23 बाइट्स

p$*[0].strip.squeeze' '

कोड स्पष्टीकरण:

  • pदोहरे उद्धरण चिह्नों के भीतर स्ट्रिंग स्ट्रिंग STDOUT( हालांकि यह अधिक है ...)
  • $*STDINइनपुट की एक सरणी $*[0]है, पहले एक लेता है
  • strip रिक्त स्थान शुरू और समाप्त करता है
  • squeeze ' ' एक अंतरिक्ष के साथ 1 अंतरिक्ष वर्ण> की जगह

परीक्षण के मामलों:

यहाँ छवि विवरण दर्ज करें


1
आप दो बाइट बचाने के ARGVसाथ बदल सकते हैं $*। एक और 4 बाइट्स के gsub /\s+/, ' 'साथ प्रतिस्थापित किया जा सकता हैsqueeze ' '
डिकिएबॉय

@DickieBoy, के लिए धन्यवाद $*, मुझे नहीं पता था कि। लेकिन हम gsub /\s+/, ' 'साथ नहीं बदल सकते squeezeक्योंकि वे समान नहीं हैं
शेहर

"क्या आप एक ही नहीं हैं" से क्या मतलब है? आउटपुट समान हैं।
डिकिएबॉय

1
squeeze ' 'केवल रिक्त स्थान निचोड़ेंगे। "yellow moon".squeeze "l" => "yelow moon"
डिकिएबॉय

2
व्यक्तिगत रूप से मैं हूं। और कुछ अन्य उत्तर देने वाले भी। लेकिन जैसा कि मैंने देखा, न तो आप अपनी व्याख्या के साथ अकेले हैं ... प्रश्न के स्वामी से स्पष्टीकरण का स्वागत किया जाएगा। वैसे, दोनों के बीच का स्थान pऔर इसके पैरामीटर squeezeऔर इसके पैरामीटर अनावश्यक हैं।
प्रातः

4

पायथ, 17 15 11 10 बाइट्स

( Ypnypn और FryAmTheEggman के लिए धन्यवाद )

pjd-cQdkNN

शायद और अधिक गोल्फ हो सकता है।

उत्पादन का उपयोग कर सकते हैं 'के बजाय "तो मैं केवल 8 बाइट्स की जरूरत है:

`jd-cQdk

आप के Nबजाय का उपयोग कर सकते हैं\"
Ypnypn

Pyth, Tylio में आपका स्वागत है। दूसरे कार्यक्रम के उपयोग से दूर किया जा सकता है d
isaacg

@isaacg मैं पहले से ही इस्तेमाल नहीं किया है d यह सब कुछ के लिए जा सकता है?
टायिलो

@Tyilo मुझे लगता है कि आपने उसी समय के बारे में एक टिप्पणी की थी जब मैंने टिप्पणी की थी। अभी सब ठीक है।
इसहाक

आप pबहुत से +तों के बजाय स्ट्रिंग बोधन पर कुछ बाइट्स को बचाने के लिए उपयोग कर सकते हैं । pjd-cQdkNN
फ्राइअमईएगमैन

3

बैश, 36 32 बाइट्स

एक समारोह के रूप में, एक कार्यक्रम, या सिर्फ एक पाइप में:

xargs|xargs|xargs -i echo '"{}"'

व्याख्या

पहले xargsउद्धरण चिह्नों को स्ट्रिप्स करते हैं।

दूसरा xargsबाईं ओर ट्रिम होता है और स्ट्रिंग के बीच में एक "स्पेस" के साथ प्रत्येक "वर्ड" को ले कर और प्रत्येक को एक स्पेस के साथ अलग करके कई समीपस्थ स्पेस को बदलता है।

xargs -i echo '"{}"'दाईं ओर ट्रिम और दोहरे उद्धरण चिह्नों में जिसके परिणामस्वरूप स्ट्रिंग rewraps।


2
वाह! यह मुश्किल है। दुर्भाग्य से टेस्ट केस 4 को नहीं संभालता, लेकिन फिर भी प्रभावित करता है।
मैनेटवर्क

हाँ, यह कोड चौथे टेस्ट केस से मिलता है और छोटा है।
प्रातः

क्या आप ऐसा कुछ कर सकते हैं? x=xargs;$x|$x|$x -i echo '"{}"'
साइओस

@ कैश: आप वास्तव में पाइप की कार्यक्षमता खोने की कीमत पर एक बाइट को बचाने के लिए कर सकते हैं। अभी भी इस समाधान के रूप में कम नहीं है और अभी भी चौथे परीक्षण मामले को संतुष्ट नहीं करता है।
डेल्टिक

3

हास्केल, 31 25 बाइट्स

fmap(unwords.words)readLn

wordsस्ट्रिंग को सीमांकक के रूप में रिक्त स्थान के साथ स्ट्रिंग की सूची में विभाजित करता है और unwordsएक एकल रिक्त स्थान के साथ तार की सूची में शामिल होता है। उद्धरण" स्ट्रैस पर हास्केल के ( readऔर showआरईपीएल के माध्यम से) कार्यों द्वारा वापस छीन लिए जाते हैं।

फ़ंक्शन द्वारा आउटपुट करना तीन बाइट्स से अधिक लंबा है, अर्थात 28 बाइट्स:

print.unwords.words=<<readLn

संपादित करें: @ मौरिस ने readLnफ़ंक्शन को इंगित किया , जिसने कुछ बाइट्स को बचाया।


Parse error: naked expression at top levelजब मैं यहाँ
Spikatrix

@CoolGuy: rextester.com पूरे कार्यक्रमों की अपेक्षा करता है, कार्य नहीं, इसलिए प्रयास करें main=interact$show.unwords.words.read। जहाँ आप कोशिश कर सकते हैं वहाँ haskell.org (कुकीज़ सक्षम करने की आवश्यकता है) के सामने एक ऑनलाइन REPL है fmap(unwords.words.read)getLine
नीमी

1
fmap(unwords.words)readLnऔर print.unwords.words=<<readLnथोड़े छोटे हैं।
लिन

@ मौरिस: इशारा करने के लिए धन्यवाद readLn
नीमी

2

आर, 45 बाइट्स

cat('"',gsub(" +"," ",readline()),'"',sep="")

readline()समारोह stdin से पढ़ता है, स्वचालित रूप से किसी भी प्रमुख और पिछली श्वेत रिक्ति को अलग करना। शब्दों के बीच की अतिरिक्त जगह का उपयोग करके हटा दिया जाता हैgsub() । अंत में, दोहरे उद्धरणों को पूर्व-निर्धारित और जोड़ दिया जाता है और परिणाम STDOUT में मुद्रित किया जाता है।

उदाहरण:

> cat('"',gsub(" +"," ",readline()),'"',sep="")
    This   is     a   string  
"This is a string"

> cat('"',gsub(" +"," ",readline()),'"',sep="")
12 34  ~5 6   (7, 8) - 9 -  
"12 34 ~5 6 (7, 8) - 9 -"

सुनिश्चित नहीं है कि यह पूरी तरह से नियमों का अनुपालन करता है, लेकिन बिल्ली पूरी तरह से आवश्यक नहीं हो सकती है, बस जीएसयूबी। उस से उत्पादन है[1] "This is a string"
मिकी

@ मिक्की: सुझाव के लिए धन्यवाद। ओपी की टिप्पणी (पोस्ट पर सबसे पहले) के आधार पर मेरी व्याख्या यह थी कि इसे स्टडआउट के लिए मुद्रित किया जाना था। मैं स्पष्टीकरण मांगूंगा।
एलेक्स ए

आह ... उस टिप्पणी या आवश्यकता को नहीं देखा
मिकी

2

पायथन 2, 37

@Ygramul की बदौलत 1 बाइट कम हो गई।

print'"%s"'%' '.join(input().split())

मूल संस्करण:

print'"'+' '.join(input().split())+'"'

परीक्षण के मामलों:

टेस्ट केस स्क्रीनशॉट


मैं वास्तव में उपयोग करना चाहता था print" ".join(raw_input().split()), लेकिन यह अंतिम उद्धरण चिह्न के अंदर एक अनुगामी स्थान होगा यदि अंतिम शब्द के बाद रिक्त स्थान थे ...
mbomb007

आप% फ़ॉर्मेटिंग का उपयोग करके एक अतिरिक्त बाइट को शेव कर सकते हैं: प्रिंट करें ""% s "'%' '.join (इनपुट () स्प्लिट ())
ygramul

2

जावास्क्रिप्ट (ईएस 6), 49 52 58

6 बाइट्स कम संपादित करें , @Optimizer के लिए धन्यवाद

2 -3 को संपादित करें , @nderscore को धन्यवाद

पॉपअप के माध्यम से इनपुट / आउटपुट। स्ट्रिंग स्ट्रिंग में 1 बाइट काटने के लिए टेम्पलेट स्ट्रिंग का उपयोग करना।

फ़ायरफ़ॉक्स में परीक्षण करने के लिए स्निपेट चलाएं।

alert(`"${prompt().match(/[^ "]+/g).join(" ")}"`)


alert(`"${eval(prompt()).match(/\S+/g).join(" ")}"`) - 52
ऑप्टिमाइज़र

@ ऑप्टिमाइज़र thx ध्यान दें, कि सिर्फ उद्धरण के बारे में अंतिम स्पष्टीकरण के बाद काम करता है: eval ('' "" ") दुर्घटनाग्रस्त हो जाएगा।
edc65

जब मैंने चौथे परीक्षण मामले (क्रोम का उपयोग करके) का परीक्षण किया, तो कोई पॉपअप (जो परिणाम दिखाता है) देखा जाता है। क्यों?
स्पिकट्रिक्स

@CoolGuy शायद इसलिए क्योंकि Chrome ES6 नहीं चलता है? मैं क्रोम के साथ ES6 का परीक्षण कभी नहीं करता। वैसे भी मैंने इसे अब अपने क्रोम (42.0.2311.152) में आज़माया और मेरे लिए काम करता है।
edc65

-3:alert(`"${prompt().match(/[^ "]+/g).join(" ")}"`)
अंडरस्कोर


1

मैथेमेटिका, 75 बाइट्स

a=" ";b=a...;Print[InputString[]~StringReplace~{b~~"\""~~b->"\"",a..->a}]

1

केडीबी (क्यू), 28 बाइट्स

" "sv except[;enlist""]" "vs

व्याख्या

                       " "vs    / cut string by space
      except[;enlist""]         / clear empty strings
" "sv                           / join back with space

परीक्षा

q)" "sv except[;enlist""]" "vs"12 34  ~5 6   (7, 8) - 9 -  "
"12 34 ~5 6 (7, 8) - 9 -"

1

जावा 8, 43 बाइट्स

s->'"'+s.replaceAll(" +|\""," ").trim()+'"'

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

s->                           // Method with String as parameter and return-type
  '"'                         //  Return a leading quote
  +s.replaceAll(" +           //  + Replace all occurrences of multiple spaces
                   |\"",      //     and all quotes
                        " ")  //    with a single space
    .trim()                   //  And remove all leading and trailing spaces
  +'"'                        //  And add the trailing quote
                              // End of method (implicit / single-line return statement)



1

Jq 1.5 , 42 बाइट्स

split(" ")|map(select(length>0))|join(" ")

नमूना चलाना

$ jq -M 'split(" ")|map(select(length>0))|join(" ")' < data
"this is a string"
"blah blah blah"
"abcdefg"
""
"12 34 ~5 6 (7, 8) - 9 -"

$ echo -n 'split(" ")|map(select(length>0))|join(" ")' | wc -c
  42

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


मैंने पहले आउटपुट का मुद्दा पकड़ा (देखें 5 संपादित करें) लेकिन इनपुट मुद्दे पर ध्यान नहीं दिया। कमान अब तय हो गई है। धन्यवाद!
jq170727

1

Tcl , 69 बाइट्स

puts [string map {{ "} \" {" } \"} [regsub -all \ + [gets stdin] \ ]]

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

Tcl , 79 बाइट्स

puts \"[string trim [regsub -all \ + [string range [gets stdin] 1 end-1] \ ]]\"

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


@ केविनक्रूजसेन फिक्स्ड। दुर्भाग्य से, कई बाइट्स की कीमत पर। मुझे बताने के लिए Tks।
सेरगिल


0

गोल्फुआ, 42 बाइट्स

L=I.r():g('%s*\"%s*','"'):g('%s+',' ')w(L)

साधारण पैटर्न मिलान प्रतिस्थापन: \"0 या अधिक स्थानों से घिरा कोई भी दोहरा उद्धरण ( ) ढूंढें %s*और एकल उद्धरण लौटाएं, फिर सभी 1 या अधिक स्थानों ( %s+) को एक स्थान से बदलें ।

एक लुआ समकक्ष होगा

Line = io.read()
NoSpaceQuotes = Line:gsub('%s*\"%s*', '"')
NoExtraSpaces = NoSpaceQuotes:gsub('%s+', ' ')
print(NoExtraSpaces)

0

कोबरा - 68

एक अनाम फ़ंक्शन के रूप में:

do
    print'"[(for s in Console.readLine.split where''<s).join(' ')]"'

0

उद्देश्य-सी 215

-(NSString*)q:(NSString*)s{NSArray*a=[s componentsSeparatedByString:@" "];NSMutableString*m=[NSMutableString new];for(NSString*w in a){if(w.length){[m appendFormat:@"%@ ",w];}}return[m substringToIndex:m.length-1];}

असम्पीडित संस्करण:

-(NSString*)q:(NSString*)s{
    NSArray *a=[s componentsSeparatedByString:@" "];
    NSMutableString *m=[NSMutableString new];
    for (NSString *w in a) {
        if (w.length) {
            [m appendFormat:@"%@ ",w];
        }
    }
    return[m substringToIndex:m.length-1];
}

0

बैश, 14 बाइट्स

read f;echo $f       # assume f="this  is  a    string   "

1
"फू * बार" या वाइल्डकार्ड चरित्र के साथ कुछ और क्या है?
मैनेटवर्क

0

पॉवर्सशैल, 40 बाइट्स

"`"$(($args-Replace' +'," ").trim())`""

बहुत सीधे आगे और बहुत प्रभावशाली नहीं।

व्याख्या

(पूर्वनिर्धारित) आर्ग-वेरिएबल के माध्यम से इनपुट पैरामीटर लें, सभी मल्टीपल स्पेस को एक के साथ बदलें, ट्रिम () - मेथड को जोड़ते हुए ट्रिम () विधि का उपयोग करते हुए ट्रिमिंग और लीडिंग ट्रिम करें। Powershell डिफ़ॉल्ट व्यवहार के रूप में कंसोल को स्ट्रिंग्स प्रिंट करेगा।


0

k4, 23 बाइट्स

" "/:x@&~~#:'x:" "\:0:0

                    0:0  / read from stdin
             x:" "\:     / split string on spaces and assign to x
        ~~#:'            / boolean true where string len>0, bool false otherwise
     x@&                 / x at indices where true
" "/:                    / join with spaces

0

Zsh , 15 बाइट्स

<<<\"${(Qz)1}\"

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

इनपुट स्ट्रिंग में एम्बेडेड कोट्स हैं। 14 बाइट्स के Qलिए निकालें यदि इनपुट स्ट्रिंग में एम्बेडेड कोट्स नहीं हैं, जैसा कि यहां कुछ अन्य उत्तरों में किया गया है।

पैरामीटर विस्तार झंडे: Qdequotes, फिर zशब्दों में विभाजित होता है जैसे शेल करता है। शब्द तो स्पष्ट रूप से रिक्त स्थान से जुड़े हुए हैं।


0

व्रेन , 56 बाइट्स

रुको। प्रतिस्थापित केवल एक बार करता है ? अब मुझे स्प्लिट-जॉइन कॉम्बो का उपयोग करना होगा।

Fn.new{|x|x.trim().split(" ").where{|i|i!=""}.join(" ")}

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

व्याख्या

Fn.new{|x|                                             } // New anonymous function with the operand x
          x.trim()                                       // Trim out whitespace from both sides of the string
                  .split(" ")                            // Split the string into space-separated chunks
                             .where{|i|i!=""}            // Keep all of those that aren't the null string (due to two consecutive spaces)
                                             .join(" ")  // Join the replaced list together


-1

पायथन 2, 28 बाइट्स

lambda s:" ".join(s.split())

व्याख्या

lambda s

अनाम फ़ंक्शन जो इनपुट s के रूप में लेता है।

s.split()

स्ट्रिंग एस के शब्दों की एक सूची लौटाता है (जो व्हाट्सएप पात्रों के मनमाने ढंग से तार द्वारा अलग किया जाता है)।

" ".join(...)

एक स्ट्रिंग में सूची में शामिल हो जाता है, जिसमें प्रत्येक शब्द एक स्थान ("") द्वारा अलग होता है।


2
यह अग्रणी और अनुगामी रिक्त स्थान के संबंध में गलत परिणाम देता है। ध्यान दें कि चुनौती राज्य आपको दोहरे उद्धरणों के साथ इनपुट लेना चाहिए, और उन्हें दोहरे उद्धरण चिह्नों के साथ आउटपुट भी करना चाहिए। जब तक मैंने चुनौती को दोबारा नहीं पढ़ा, मुझे भी यह गलत लगा।
केविन क्रूज़सेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.