टेक्स्ट को किसी ब्लॉक में संरेखित करें


10

कार्य

आपका कार्य पूरे कार्यक्रम को लिखना है, जो दिए गए इनपुट को दिए गए आकार के ब्लॉक में संरेखित करेगा।

इनपुट:

40
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

आउटपुट:

Lorem  ipsum dolor sit amet, consectetur
adipiscing  elit,  sed do eiusmod tempor
incididunt  ut  labore  et  dolore magna
aliqua.  Ut  enim  ad minim veniam, quis
nostrud   exercitation  ullamco  laboris
nisi ut aliquip ex ea commodo consequat.
Duis  aute  irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu
fugiat  nulla  pariatur.  Excepteur sint
occaecat cupidatat non proident, sunt in
culpa  qui  officia deserunt mollit anim
id est laborum.
                <-- note the linebreak

इनपुट विवरण

  • आपको संपूर्ण निष्पादन योग्य / व्याख्यात्मक कार्यक्रम लिखना होगा।
  • आप मान सकते हैं, कि इनपुट में केवल मुद्रण योग्य ASCII वर्ण हैं और इसमें टैब नहीं है \t
  • इनपुट में लाइन ब्रेक हो सकते हैं। यह ऐसा है, तो वे के रूप में दिया जाता है करता है \n, \rया \r\nके आधार पर आप क्या उम्मीद करते हैं। वे हालांकि पूरे इनपुट के दौरान एकजुट हैं।
  • इनपुट STDIN में दिया जा सकता है, या कमांड लाइन तर्क के रूप में दिया जा सकता है। आप दोनों का उपयोग कर सकते हैं यदि यह आपकी आवश्यकताओं के अनुरूप है (उदाहरण के लिए, कमांड आर्ग से ब्लॉक आकार पढ़ें और स्टड के रूप में इनपुट)। हालाँकि, आप अपने प्रोग्राम के इनपुट के किसी भी हिस्से को हार्डकोड नहीं कर सकते हैं।
  • आप मान सकते हैं कि ब्लॉक का आकार वैध धनात्मक ( > 0) संख्या के रूप में दिया गया है ।
  • इनपुट में लाइन ब्रेक को अंतरिक्ष के समान माना जाता है (इस प्रकार शब्द विभाजक)
  • यदि इनपुट में कई समवर्ती स्थान होते हैं तो उन्हें एक माना जाता है।

आउटपुट विवरण

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

जवाब, कुछ समय के बाद कम से कम बाइट्स के साथ, जीतता है।
यदि आपको अतिरिक्त जानकारी की आवश्यकता है, तो एक टिप्पणी छोड़ दें।

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

Input:
10
Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do eiusmod tempor

Output:
Lorem
ipsum
dolor  sit
amet,
consectetur
adipiscing
elit,  sed
do eiusmod
tempor

Input:
20
Lorem     ipsum

dolor  sit amet,

Output:
Lorem   ipsum  dolor
sit amet,

Input:
1
Lorem ipsum dolor sit amet

Output:
Lorem
ipsum
dolor
sit
amet

सम्बंधित। (अंत में मेरे टाइपोग्राफी टैग के लिए एक दूसरी चुनौती जो पहले से ही ऑटो-डिलीट हो गई थी;))
मार्टिन एंडर

@ MartinBüttner मुझे नहीं पता था कि इस तरह का टैग मौजूद है।
Zereges

@ V @ आपको संपूर्ण निष्पादन योग्य / व्याख्यात्मक कार्यक्रम लिखना होगा।
डेनिस


@ppperry दिलचस्प है, किसी कारण से, यह मेरे खोज कौशल से बच गया
ज़ेरेगेस

जवाबों:



1

रूबी, 179 चरस

n=gets.to_i
s=t=''
$<.read.split.map{|w|if(t+w).size>=n
0while t.size<n&&(1..n).any?{|i|t.sub!(/[^ ]#{' '*i}(?=[^ ])/){|x|x+' '}}
s+=t+?\n
t=w
else
t+=' '+w
t.strip!
end}
puts s,t

बहुत लंबा रास्ता...

सेमी-अनगुल्ड संस्करण:

n = gets.to_i
s = t = ''
$<.read.split.map{|w|
    if (t + w).size >= n
        0 while t.size < n && (1..n).any?{|i|t.sub!(/[^ ]#{' '*i}(?=[^ ])/){|x|x+' '}}
        s += t + ?\n
        t = w
    else
        t += ' ' + w
        t.strip!  # this is only necessary because of the very first word >:(
    end
}
puts s,t

0

सीजेएम, 87 बाइट्स

l~:LS*qNSerS%{(2$1$a+_S*,L>{;a\}{\;@;\}?}h;S*a]1>{I1>{LIs,-I,(md1b\aI,(*.+Sf*I.\}I?N}fI

यह अभी भी गोल्फ होना चाहिए। CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।


0

रेटिना , 133 बाइट्स

\s+

+`((1)*1 )((?<-2>.)*\S|\S+) 
:$3<LF>$1
m+`^(?=.(.)+$[^<TB>]*^(?>(?<-1>1)+)1)((.*):(\S+ +)|(\S+ +)(.*):)
$3$4$5 :$6
+`:|<LF>1+| (?= .*$)
<empty>

<empty>एक खाली अनुरेखण रेखा का प्रतिनिधित्व करता है। कोड को चलाने के लिए, प्रत्येक पंक्ति को एक अलग फाइल में रखें, लाइनफीड <LF>अक्षर (0x0A) और <TB>एक टैब (0x09) के साथ बदलें। जब मैं गोल्फ कर रहा होता हूँ तो एक स्पष्टीकरण जोड़ देता हूँ।

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