एक साधारण शब्द आवरण बनाओ


22

(नोट: यह मेरा अब तक का पहला गोल्फ सवाल है, लेकिन जहां तक ​​मैं बता सकता हूं, किसी और ने बिल्कुल ऐसा नहीं किया है, इसलिए मुझे अच्छा करना चाहिए।)

आपका कार्य एक प्रोग्राम या फ़ंक्शन करना है जो एक स्ट्रिंग sऔर एक पूर्णांक में लेता है n, और उस पाठ को कई लाइनों में लपेटकर रिटर्न या आउटपुट करता है। प्रत्येक शब्द एक पंक्ति में पूर्ण होना चाहिए; यानी कोई शब्द बीच में नहीं फूटा। प्रत्येक पंक्ति nवर्णों से अधिक लंबी नहीं हो सकती है, और आपको प्रत्येक पंक्ति में यथासंभव अधिक से अधिक शब्द फिट करने होंगे।

उदाहरण:

s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat." 
n = 50

output:
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Sed eget erat lectus. Morbi mi mi, fringilla
sed suscipit ullamcorper, tristique at mauris.
Morbi non commodo nibh. Pellentesque habitant
morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Sed at iaculis mauris.
Praesent a sem augue. Nulla lectus sapien, auctor
nec pharetra eu, tincidunt ac diam. Sed ligula
arcu, aliquam quis velit aliquam, dictum varius
erat.

आपका आउटपुट स्ट्रिंग्स की एक सरणी या लाइन ब्रेक के साथ एक सिंगल स्ट्रिंग हो सकता है। इसके अलावा, आप मान सकते हैं कि कोई शब्द इससे अधिक लंबा नहीं होगा n, इसलिए अजीब मामलों से निपटने के बारे में चिंता न करें।

मानक I / O नियम लागू होते हैं, और मानक कमियां निषिद्ध हैं। ट्रेलिंग रिक्त स्थान की अनुमति है।

चूंकि यह , बाइट्स में शॉर्ट्स समाधान जीतता है।

यहाँ पायथन में एक उदाहरण कार्यक्रम है जो काम करेगा।



3
n अधिकतम लाइन की लंबाई है? या लाइन ब्रेक से पहले हमें कितनी लंबाई तक पहुंचना है?
डेविड

1
@ डेविड, या लाइनों की संख्या?
पीटर टेलर

1
28 बाइट्स पायथन क्या यह प्रासंगिक है?
डेविड

3
nअधिकतम लाइन की लंबाई है, खेद है कि यह स्पष्ट नहीं था। मैं स्पष्ट कर दूंगा। इसके अलावा, नियमों को अब अपडेट किया गया है ताकि एक साधारण विभाजन काम न करे।
ATMunn

जवाबों:


7

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

from textwrap import*
fill

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

मेह ... बिल-इन बोरिंग हैं ... इसके बजाय, यहाँ एक अच्छा 87-बाइट समाधान है:

s,n=input()
x=''
for i in s.split():c=n<len(x+i);exec'print x'*c;x=x*-~-c+i+' '
print x

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

आउटपुट ट्रेलिंग स्पेस।


5

PHP , 8 बाइट्स

निश्चित रूप से सबसे मूल समाधान नहीं है, लेकिन PHP का एक मूल कार्य है जो आपकी आवश्यकताओं से पूरी तरह मेल खाता है!

wordwrap:

string wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = FALSE ]]] )

एक स्ट्रिंग ब्रेक वर्ण का उपयोग करके दिए गए वर्णों की एक स्ट्रिंग को लपेटता है।

ऐसे उपयोग करें:

$str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat.";
echo wordwrap($str, 50);

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


5

जावास्क्रिप्ट (ईएस 6),  75 73  72 बाइट्स

के रूप में इनपुट लेता है (string)(n)

s=>n=>s.split` `.map(w=>r=(u=r?r+' '+w:w)[n]?(o+=r+`
`,w):u,o=r='')&&o+r

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

चर

स्वरूपित आउटपुट को (नीचे हरे रंग में) में संग्रहीत किया जाता है ।

अपडेटेड लाइन यू को निम्नलिखित के रूप में परिभाषित किया गया है:

  • वर्तमान लाइन आर (नीचे काले रंग में)
  • एक स्थान यदि आर खाली नहीं है, या कुछ और नहीं तो (नीचे नारंगी में)
  • नया शब्द w (नीचे नीला में)

जब भी u का n -वर्ण सेट किया जाता है तो यू एक लाइन ब्रेक सम्मिलित करना होगा (0-अनुक्रमित, नीचे लाल रंग में)।

उदाहरण

n=16 औररों = "LOREM IPSUM DOLOR"

"LOREM" जोड़ना:

00010203040506070809101 11213141516एलहेआरएम

जोड़ना "ipsum":

00010203040506070809101 11213141516एलहेआरएममैंपीएसयूएम

जोड़ना "मातम":

00010203040506070809101 11213141516एलहेआरएममैंपीएसयूएमडीहेएलहेआर

00010203040506070809101 11213141516एलहेआरएममैंपीएसयूएमडीहेएलहेआर


ट्रेलिंग रिक्त स्थान की अनुमति है। शायद r+w+' '?
l4m2

5

पर्ल 6 , 46 29 बाइट्स

{;*.comb(/.**{1..$_}[\s|$]/)}

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

रेगेक्स आधारित समाधान जो इनपुट क्यूरेड लेता है, जैसे f(n)(s)लाइनों की सूची लौटाता है। अंतिम को छोड़कर प्रत्येक पंक्ति में एक अनुगामी व्हाट्सएप है

स्पष्टीकरण:

{;*                         }   # Anonymous code block that returns a Whatever lambda
   .comb(/                /)    # Split the string by
          .**{1..$_}            # Up to n characters
                    [\s|$]      # Terminated by a whitespace char or the end of the string

4

विम, 15 बाइट्स / कीस्ट्रोक्स

DJ:se tw=<C-r>"
gq_

एक पाठ स्वरूपण प्रश्न? मैं नौकरी के लिए सिर्फ उपकरण जानता हूँ! और यह भी पहले दो कीस्ट्रोक्स में मेरा नाम है: डी

<C-r>का मतलब है ctrl-r

यह कभी भी वी में थोड़ा कम हो सकता है , लेकिन मैं जवाब के लिए वेनिला विम में जवाब देना पसंद करता हूं जो वास्तव में दिखाते हैं कि सही चुनौती के लिए संक्षिप्त विम कैसे हो सकता है। और अंतर वैसे भी बहुत छोटा है।

यह 15 बाइट्स के लिए निम्नलिखित भी हो सकता है:

:se tw=<C-r><C-w>
ddgq_

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


1
स्पष्टीकरण: DJ:यह कार्यक्रम डीजे द्वारा बनाया गया है, हमारी पसंदीदा बिल्ली उसके गले में हीरे के साथ है। [...]
१rik से आउटगोल्फ़र एरिक

4

आर , 36 27 बाइट्स

आर में यह एक अंतर्निहित ( strwrap) के रूप में है, हम विभाजित लाइनों के एक वेक्टर को वापस करते हैं।

function(s,n)strwrap(s,n+1)

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


1
हां, इसकी अनुमति दी जानी चाहिए। लाइनों के एरर्स की अनुमति है, इसलिए मुझे नहीं लगता कि यह कोई अलग क्यों होगा।
ATMunn



3

जावा (JDK) , 46 44 बाइट्स

मूल रूप से जावा में शुद्ध रेगेक्स समाधान, लगभग निश्चित रूप से सबसे छोटा मैंने लिखा है।

आगे भी रेगेक्स में बाइट्स में कटौती करने में मदद करने के लिए केविन के लिए चीयर्स!

n->s->s.replaceAll(".{1,"+n+"}( |$)","$0\n")

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

एक करीबी मेमने का उपयोग करते हुए, यह nवर्णों तक लालच से मेल खाता है और उसके बाद एक स्थान या स्ट्रिंग का अंत करता है। इसके बाद उन पात्रों को स्वयं के साथ बदल देता है, उसके बाद एक नई पंक्ति।


@KevinCruijssen [ $]वास्तव में केवल एक स्थान से मेल खाता है या $अगर मुझे स्ट्रिंग के अंत के बजाय सही ढंग से याद है। हालांकि यह काम करने लगता है, इसलिए ऐसा लगता है कि यह केवल कम बाइट्स के लिए एक ही स्थान पर नीचे गिराया जा सकता है।
ल्यूक स्टीवंस

आह, यह वास्तव में सिर्फ एक स्थान हो सकता है, क्योंकि आप नई कड़ियाँ जोड़ते हैं और अंत में एक अतिरिक्त अनुगामी नई पंक्ति जोड़ने की आवश्यकता नहीं होती है।
केविन क्रूज़सेन

1
आप रेगेक्स में कोष्ठक को हटाने के लिए 2 और बाइट्स को गोल्फ कर सकते हैं, और $0इसके बजाय उपयोग कर सकते हैं $1
केविन क्रूज़सेन

@KevinCruijssen अच्छा लगा! यह सिर्फ एक शर्म की बात है कि replaceAllइतनी वाचालता है!
ल्यूक स्टीवंस 10

2
मेरे लिए यह गलत है, अगर मैं इस तरह से "... डिक्टम वेरियस एरिक एटक" के साथ व्यायाम के लैटिन वाक्यांश को संशोधित करता हूं। C लेटर के बाद एक अनावश्यक नई लाइन है ...
RosLuP

2

गणितज्ञ, 16 बाइट्स

InsertLinebreaks

निर्मित समारोह। एक स्ट्रिंग और एक पूर्णांक को इनपुट के रूप में लेता है और एक स्ट्रिंग को आउटपुट के रूप में देता है।

InsertLinebreaks["string", n]
n वर्णों की  तुलना में कोई रेखा नहीं बनाने के लिए नई रेखा वर्ण सम्मिलित करता है ।


2

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

n=80जोड़ा के साथ टेस्ट केस ।

param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o

टेस्ट स्क्रिप्ट:

$f = {

param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o

}

@(
,(50, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat.",
"Lorem ipsum dolor sit amet, consectetur adipiscing",
"elit. Sed eget erat lectus. Morbi mi mi, fringilla",
"sed suscipit ullamcorper, tristique at mauris.",
"Morbi non commodo nibh. Pellentesque habitant",
"morbi tristique senectus et netus et malesuada",
"fames ac turpis egestas. Sed at iaculis mauris.",
"Praesent a sem augue. Nulla lectus sapien, auctor",
"nec pharetra eu, tincidunt ac diam. Sed ligula",
"arcu, aliquam quis velit aliquam, dictum varius",
"erat.")
,(80, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat.",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus.",
"Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non",
"commodo nibh. Pellentesque habitant morbi tristique senectus et netus et",
"malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue.",
"Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu,",
"aliquam quis velit aliquam, dictum varius erat.")
) | %{
    $n,$s,$expected = $_
    $result = &$f $s $n
    "$result"-eq"$expected"
    # $result   # uncomment this line to dispaly a result
}

आउटपुट:

True
True


धन्यवाद। नकली टर्नरी एक अभिव्यक्ति है। यह स्क्रिप्ट एक अंतर्निहित होता है returnमें elseभाग और में एक बयान thenहिस्सा।
माज़ी


2

जाप , 20 बाइट्स

¸rÈ+Yi[X·ÌY]¸Ê>V?R:S

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

उनकी मदद के लिए बब्बलर और शैगी का धन्यवाद

स्पष्टीकरण:

¸                       #Split into words
 r                      #For each word, add them to the output in this way:
     i                  # Choose a character using this process:
       X·Ì              #  Get the last line of the output
          Y             #  And the current word
      [    ]¸           #  Join them with a space
             Ê>V?       #  If the resulting line is greater than the allowed length:
                ?R      #   Choose "/n" (newline)
                  :S    #  Otherwise choose " " (space)
     i                  # Add the chosen character to the output
  È+Y                   # Add the current word to the output

24 बाइट्स के साथ [X,Y].join(...)
बबलर


1

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

.+$
$*
!`(?=\S.*¶(1)+)(?<-1>.)+(?=\s)

इसे ऑनलाइन आज़माएं! लेता है sऔर nअलग लाइनों पर। स्पष्टीकरण:

.+$
$*

nयूनीरी में बदलें ।

(?=\S.*¶(1)+)(?<-1>.)+(?=\s)

गैर-व्हाट्सएप से मिलान करें, फिर आगे देखें nऔर इसे गिनें $#1। फिर वापस जाएं और व्हाट्सएप के बाद आने वाले nवर्णों से मेल खाने के लिए एक संतुलन समूह का उपयोग करें ।

!`

लाइनों की एक सूची के रूप में मैचों का उत्पादन।


क्या रेटिना में पहला इनपुट एक इनपुट है जिसे हम दूसरे इनपुट के साथ प्रयोग करते हैं? तो कुछ इस तरह: .{1,50} और$0¶ , लेकिन 50इनपुट के रूप में कहां से प्राप्त किया जाता है?
केविन क्रूज़सेन

@ केविनक्रूजसेन रेटिना 1 में आप एक समान परिणाम देने के लिए संभवतः एक एवल स्टेज का उपयोग कर सकते हैं, लेकिन यह उबाऊ है, इसलिए मैं परेशान नहीं हुआ।
नील

1

चारकोल , 19 बाइट्स

Nθ←F⪪S «¿‹⁺LιⅈθM→⸿ι

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। अलग लाइनों पर nऔर के इनपुट लेता है s। स्पष्टीकरण:

Nθ

इनपुट n

लूप के पहले पुनरावृत्ति से सही आंदोलन को संतुलित करने के लिए कर्सर को एक वर्ग छोड़ दें।

F⪪S «

रिक्त स्थान पर स्ट्रिंग विभाजित करें और शब्दों पर लूप करें।

¿‹⁺Lιⅈθ

गणना करें कि क्या अगला शब्द दाहिने किनारे तक पहुंच जाएगा।

M→

अगर ऐसा नहीं होगा तो एक वर्ग को दाएं घुमाएं।

⸿

यदि यह तब एक नई लाइन शुरू करेगा।

ι

शब्द का आउटपुट।



1

05AB1E , 18 बाइट्स

õs#vDy«g²›i,}yðJ}?

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

स्पष्टीकरण:

õ                   # Push an empty string "" to the stack
 s                  # Swap to take the (implicit) string input
  #                 # Split it by spaces
   v            }   # For-each `y` over the words:
    D               #  Duplicate the top of the stack
                    #  (which is the empty string in the very first iteration)
     y«             #  Append the current word `y`
       g            #  Get its length
        ²›i }       #  If its lengthy is larger than the second input:
           ,        #   Pop and output the current duplicated value with trailing newline
             yð     #  Push the word `y` and a space " "
               J    #  Join the entire stack together
                 ?  # After the loop, output the last part as well (without newline)

1

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

n->s->{String r="",S[]=s.split(" "),t=r;for(int i=0;i<S.length;)if((t+S[i]).length()>n){r+=t+"\n";t="";}else t+=S[i++]+" ";return r+t;}

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

स्पष्टीकरण:

n->s->{                      // Method with integer & String parameters and String return
  String r="",               //  Result-String, starting empty
         S[]=s.split(" "),   //  Input-String split by spaces
         t=r;                //  Temp-String, starting empty as well
  for(int i=0;i<S.length;)   //  Loop `i` in the range [0, amount_of_words):
    if((t+S[i]).length()>n){ //   If `t` and the word are larger than the integer input:
      r+=t+"\n";             //    Add `t` and a newline to the result
      t="";}                 //    And reset `t` to an empty String
     else                    //   Else:
       t+=S[i++]+" ";        //    Append the word and a space to `t`
                             //    (and then increase `i` by 1 with `i++` for the next word
                             //     of the next iteration)
  return r+t;}               //  Return the result-String appended with `t` as result


1

एपीएल (Dyalog यूनिकोड) , 14 बाइट्स SBCS

Infix फ़ंक्शन; बाएं तर्क है n, दायां तर्क है n

CY'dfns'wrap

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

⎕CYd ऑप्स लाइब्रेरी में c op y

 फिर

wrap[c]  रैप [n] फ़ंक्शन काउपयोग करें

[c]  उस फ़ंक्शन का कोड
[n]  उस फ़ंक्शन के लिए नोट्स


की golfed संस्करण wrap, 59 बाइट्स SBCS

{⍺≥≢⍵:⍵⋄(t↑⍵),2↓⎕TC,⍺∇⍵↓⍨t+b⊃⍨t←⊃⌽⍺,g/⍨⍺≥g←⍸(⍺+1)↑b' '=⍵}

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

{} Dfn; बाएं तर्क (चौड़ाई) है, सही तर्क है (स्ट्रिंग)

≢⍵ स्ट्रिंग के टैली (वर्णों की संख्या)

⍺≥... : यदि चौड़ाई उससे अधिक या उसके बराबर है, तो:

   स्ट्रिंग वापस करें

 अन्यथा:

  ' '=⍵ बूलियन मास्क जहां रिक्तियाँ स्ट्रिंग के बराबर होती हैं

  b← में स्टोर करें b( बी lanks के लिए)

  ()↑ उस से निम्नलिखित तत्वों की संख्या लें:

   ⍺+1 चौड़ाई से एक अधिक

  मैं ndices जहां सच है

  g← में स्टोर करें g( जी अप्स के लिए)

  ⍺≥ बूलियन मुखौटा जहां की चौड़ाई उससे अधिक या उसके बराबर है

  g/⍨ उसके द्वारा अंतर सूचकांकों को फ़िल्टर करें

  ⍺, उस चौड़ाई में संलग्न करें

  ⊃⌽ उस के अंतिम तत्व को उठाओ (जलाया (पहले से उल्टा उठाओ))

  t← दुकान में t( टी ake के लिए)

  b⊃⍨b lanks  के मास्क से एक तत्व लेने के लिए उपयोग करें

  t+ उसको जोड़ें t

  ⍵↓⍨ स्ट्रिंग से कई वर्णों को छोड़ें

  ⍺∇ उसी पर छोड़ दिया तर्क के साथ उस पर पुनरावृत्ति

  ⎕TC,अपील  करें कि t erminal c ontrol वर्णों की सूची में (8: HT, 10: NL, 13: CR)

  2↓ उस से पहले दो चरित्र को छोड़ (सिर्फ एक प्रमुख 13 छोड़कर: CR)

  (... ), निम्नलिखित के लिए कहते हैं:

   t↑⍵tस्ट्रिंग  के पहले अक्षर


0

@ एरिक आउट द गोल्फर के लिए धन्यवाद, एक गोल्फ संस्करण:

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

def f(t,n):
 while t:i=n+(t[min(len(t)-1,n)]==" "or-t[n-1::-1].find(' '));print(t[:i]);t=t[i:]

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

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

def f(t,n):
 l=[]
 while len(t):
  i=(n-t[:n][::-1].find(' '),n+1)[t[min(len(t)-1,n)]==" "]
  l.append(t[:i])
  t=t[i::]
 return l

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

इतना गोल्फ संस्करण नहीं ...


1
कुछ गोल्फ। (प्रिंट के लिए प्रिंट, वापस नहीं करता है)।
the:

0

जावास्क्रिप्ट + एचटीएमएल + सीएसएस, 117 64 बाइट्स

-53 बाइट्स @ शिष्टाचार के सौजन्य से

n=50
s="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)


1
कम से कम मेरे ब्राउज़र में आप इसे (n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>` 74 बाइट्स के लिए काट सकते हैं । यदि आप फ़ायरफ़ॉक्स के पुराने संस्करणों को खोदने के लिए तैयार हैं तो आप एक और 8 बाइट्स बचा सकते हैं (n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
नील

@ नील chइकाइयों का अच्छा उपयोग । फ़ायरफ़ॉक्स 65 के 50chरूप में गणना करता है 500px; क्रोमियम 70 गणना के 50chरूप में400px
271314

यह उत्तर गलत है। elit. Sed eget erat lectus. Morbi mi mi, fringilla sed(दूसरी पंक्ति) 50 से अधिक वर्ण हैं। मैं नवीनतम क्रोम का उपयोग कर रहा हूँ।
mbomb007 19

मैं अपने मूल सुझाव को क्रोम में काम करने के लिए <p>अंदर डालकर ट्विक करने में सक्षम था <tt>
नील



0

सी # (.NET कोर) , 162 बाइट्स

string[]t(string n,int a){var g="";for(int i=0;i++<Math.Floor((double)n.Length/a);)g+=$"^.{{{i*a-1}}}|";return Regex.Split(n,$@"(?n)(?<=({g.Trim('|')})\S*)\s");}}

यह फ़ंक्शन एक रेगेक्स का उपयोग करता है जो निकटतम व्हाट्सएप से मेल खाता है जो एनटीटी या मल्टीपल एनटी चरित्र के पास है और इसके आधार पर स्ट्रिंग को विभाजित करता है।

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

TIO लिंक एक पूर्ण कार्यक्रम है, और फ़ंक्शन में एक स्थिर कीवर्ड है इसलिए फ़ंक्शन को मुख्य से बुलाया जा सकता है।

टेस्ट रेग्क्स


यह परीक्षण मामले के लिए सही आउटपुट नहीं देता है - कुछ लाइनें 50 वर्णों से अधिक लंबी होती हैं। आप "पास" "नहीं" से पहले चाहते हैं, और एक बिंदु पर विभाजन को भी इस बात पर निर्भर करना चाहिए कि यह पहले कहाँ विभाजित हुआ था।
अर्जन जोहानसन

0

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 78 बाइट्स

s=>n=>System.Text.RegularExpressions.Regex.Replace(s,".{1,"+n+"}( |$)","$0\n")

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

जावा संस्करण के साथ आने का श्रेय @LukeStevens को जाता है ... स्पष्ट रूप से .NET आपको आयात करता है RegularExpressions प्रतिस्थापित करने के लिए नेमस्पेस :(

यहां मेरा मूल संस्करण है जो अंतरिक्ष वर्ण पर विभाजित है और उन्हें वापस एक साथ जोड़ने के लिए LINQ का उपयोग करता है:

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 91 बाइट्स

s=>n=>s.Split(' ').Aggregate((a,w)=>a+(a.Length-a.LastIndexOf('\n')+w.Length>n?'\n':' ')+w)

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



0

एपीएल (एनएआरएस), 48 चार्ट, 96 बाइट्स

{⊃⍵{⍺≥≢⍵:⊂⍵⋄k←1+⍺-' '⍳⍨⌽r←⍺↑⍵⋄(⊂k↑r),⍺∇k↓⍵}⍨⍺+1}

परीक्षा:

  f←{⊃⍵{⍺≥≢⍵:⊂⍵⋄k←1+⍺-' '⍳⍨⌽r←⍺↑⍵⋄(⊂k↑r),⍺∇k↓⍵}⍨⍺+1}
  s←"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat."
  50 f s
Lorem ipsum dolor sit amet, consectetur adipiscing 
elit. Sed eget erat lectus. Morbi mi mi, fringilla 
sed suscipit ullamcorper, tristique at mauris.     
Morbi non commodo nibh. Pellentesque habitant      
morbi tristique senectus et netus et malesuada     
fames ac turpis egestas. Sed at iaculis mauris.    
Praesent a sem augue. Nulla lectus sapien, auctor  
nec pharetra eu, tincidunt ac diam. Sed ligula     
arcu, aliquam quis velit aliquam, dictum varius    
erat.                                              

मुझे नहीं पता "{⊃⍵ {⍺≥≢⍵: ⊂⍵⋄ ..." अगर यह सही है ≥ या यह वहीं है> ...
RosLuP

0

सी, 63 बाइट्स

b(a,n)char*a;{while(strlen(a)>n){for(a+=n;*a-32;--a);*a++=10;}}

इस एक्सरसाइज b (a, n) का फंक्शन "a" को तोड़ देगा क्योंकि एक्सरसाइज में कहा गया है, जिस तरह से इसकी लंबाई नहीं बदलती है (अगर हम रिजल्ट को एक स्ट्रींग के रूप में देखते हैं) क्योंकि \ n या नई लाइन में कुछ स्पेस बदलते हैं स्थान। इनपुट स्ट्रिंग "a" में b () फ़ंक्शन के लिए कोई \ n वर्ण नहीं होना चाहिए (यह bs () के लिए इनपुट स्ट्रिंग में \ n हो सकता है)

b (a, n) फ़ंक्शन केवल इसलिए ठीक होगा क्योंकि इस अभ्यास का प्रतिबंध, जो "a" स्ट्रिंग के प्रत्येक शब्द को लगाता है लंबाई <n है यदि यह सत्य नहीं है, तो यह फ़ंक्शन
एक अनंत लूप में जा सकता है ... (बहुत मेरे देखने के तरीके में गलत है इसलिए मैं फ़ंक्शन को और अधिक अच्छा कॉपी करता हूं क्योंकि उस स्थिति में -1 वापस आ जाएगा और एक अनंत लूप में नहीं जाएगा; यह bs (ए, एन) नीचे है) मैं बाहर नहीं करता हूं, दोनों फ़ंक्शन खराब हैं .. ।

#define R(x,y) if(x)return y
#define U unsigned
U bs(char*a,U n)
{U c,q,r=1,i,j;
 R(!a||n<1||n++>0xFFFF,-1);
 for(j=c=i=0;;++i,++c)
    {R(i==-1,-1);q=a[i];
     if(q==10)goto l;
     if(c>=n){R(i-j>n,-1);a[i=j]=10;l:c=-1;++r;}
     R(!q,r);
     if(q==32)j=i;
    }
}

बी का परिणाम () एक फ़ंक्शन पर पारित हुआ जो प्रत्येक पंक्ति को लाइन जोड़ देता है

Lorem ipsum dolor sit amet, consectetur adipiscing [50]
elit. Sed eget erat lectus. Morbi mi mi, fringilla [50]
sed suscipit ullamcorper, tristique at mauris. [46]
Morbi non commodo nibh. Pellentesque habitant [45]
morbi tristique senectus et netus et malesuada [46]
fames ac turpis egestas. Sed at iaculis mauris. [47]
Praesent a sem augue. Nulla lectus sapien, auctor [49]
nec pharetra eu, tincidunt ac diam. Sed ligula [46]
arcu, aliquam quis velit aliquam, dictum varius [47]
erat. [5]

@ceilingcat ठीक है, उपरोक्त कोड \ n पर भी विचार करेगा ... एक बग मुझे कोड के साथ मिला था कि अंतिम पंक्ति सही ढंग से प्रिंट नहीं हुई थी ... आप अन्य के रूप में अपना सी उत्तर क्यों नहीं लिखते हैं? यह खदान पर जीत जाएगा क्योंकि यह अधिक छोटा है ... यह कहने के लिए कि मैं केवल इनपुट की जांच के लिए पहली पंक्ति (या कथन ";") का उपयोग करता हूं क्योंकि मेरे लिए इनपुट की जांच की जानी चाहिए, भले ही वह थोड़ी अधिक हो लंबा; मैं एपीएल में फ़ंक्शन लिखने का असफल प्रयास करता हूं ...
RosLuP

अंतिम उत्तर में @ceilingcat ने देखा कि प्रश्न यह नहीं कहता है कि इनपुट स्ट्रिंग में है या नहीं, '\ n' वर्ण में है और यह देखा कि उदाहरण में '\ n' नहीं है, मुझे लगता है कि इनपुट स्ट्रिंग में कोई नई पंक्ति वर्ण नहीं है ...
RosLuP

केवल 83 ... हां मुझे यह देखना है कि क्या मुझे पुराने फंक्शन डेफिनेशन का इस्तेमाल करते हुए 3
चार्ट्स मिलते हैं

सिर्फ 81 .... .... ....
RosLuP

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