रिक्त स्थान जोड़कर एक पाठ का औचित्य सिद्ध करें


10

इस पाठ को दिया

लॉरेम इप्सम डोलर अमेट, कंसेटेटुर एडिपिसिलेटिंग इलीट, सेड इइसमोड अस्थायी इनिडिडंट यूट लैबर एट डोलोर मैग्ना एलिका। यूट एनिम एड मिनिमम वेनियम, क्विस नॉस्ट्रुड एक्सरसाइज ullamco laboris nisi ut aliquip ex eaodo resultat। ड्यूस ऑटे यूरेअर डोलर रीप्लेन्ड्रिट इन वॉलपेक्टेट वेलिट एसेल सिलम डोलोर यूआर फुगिया नुल्ला पैराइटुर। असाधारण सिंट ऑवकासैट कपिडैटैट नॉन एक्सीडेंट, सूपा इन सुपापा क्यू ऑफ़िसिया डिसेरंट मोलिट एनीम आईडी इस्ट लेबरम।

सबसे छोटा प्रोग्राम लिखें जो 80 अक्षरों पर एक ही पाठ का उत्पादन करता है। उपरोक्त पाठ बिल्कुल वैसा ही दिखना चाहिए:

Lorem ipsum dolor sit amet,  consectetur adipisicing 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.

नियम:

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

विजेता: सबसे छोटा कार्यक्रम।

नोट: इनपुट स्ट्रिंग STDIN पर एक लाइन (कोई लाइन फ़ीड या गाड़ी वापसी) के रूप में प्रदान की जाती है

अपडेट करें:

इनपुट स्ट्रिंग शब्द लंबाई युक्त कोई भी पाठ हो सकता है (जैसे कि 20 ~ 25 चार्ट से अधिक नहीं) जैसे:

लॉरेम इप्सम डोलर अमेट, कंसेटेटुर एडिपिसिंग एलीट। सेड नॉन रिसस। सस्पेंडिस लेक्टस टॉर्चर, डिग्निसिम सिट एमेट, एडिपिसिंग नेक, परफेक्टसीड सेड, डोलर। Cras एलिमेंट अल्ट्रिसेस डायम। मायकेनस लिगुला मास, वेरियस ए, सेम्पर कोन, यूरोपिस्म नॉन, मील। प्रिन पोर्टरिटर, ओरसी नेक नॉनमी मोलेस्टी, एनिम इस्ट एलिफेंड मील, नॉन फेरमेंटम डायम निस्ले अमेट एराट। डूइस सेम्पर ड्यूस अर्कू मस्सा, स्कैलिसेक विटे, परिणामी इन, प्रेटियम ए, एनिम। पेल्केसेक का तर्क। यूट इन राइसस वुल्लपट्ट लिबरो फेटरा अस्थायी। Cras vestibulum bibendum augue। पेडेसेंट में प्रेशेंट एक्स्टेस लेओ। प्रेज़ेंट ब्लंडिट ओडियो यूरोप एनिम। पेल्केसेक सीडब्लूएस ईडी यू अगे ब्लंडिट सॉडेल्स। वेस्टिबुलम एन्टी इप्सम प्राइमिस इन फौसीबस ओरीस लिक्टस एट अल्ट्राइस पॉस्यूअर क्यूबिला क्यूरा; अलिकम निब। मौरिस एसी मोरिस सेड पे पाइलेसीक फेरमेंटम। मेकेनस एडिपिसिंग एन्टे नॉन डायम सॉडल्स हेन्ड्रेरिट। यूट वेलिट मौरिस, एसेस्टस सेड, ग्रेविडा एनईसी, ऑर्नारे यूट, एमआई। एनेन यूटी ओरसी वेल मस्सा सुस्पिलिट पुल्विनार। Nulla sollicitudin। फ्यूज़ वेरियस, लिगुला नॉन टेंपस एलिकम, ननक टर्पिस ऑलमॉर्कर नीब, टेम्पप सेपियन एरोस विटे लिगुला में। पेल्केसेक रोनकस नून एट एगु। इंटीजर आईडी फेलिस। करैबितुर एलिकेट पेलेरसेक डैम। इंटेगर क्विस मेटस विटे एलीट लॉबॉर्टिस एनेस्टस। लॉरेम इप्सम डोलर अमेट, कंसेटेटुर एडिपिसिंग एलीट। मोरबी वेल एराट नॉन मौरिस कांटलिस व्हीकलिकुला। Nulla et sapien। इंटेगर टॉर्चर टेलुस, एलिकम फौसीबस, कांटलिस आईडी, कॉन्ग यूरोप, क्वम। मॉरिस ullamcorper फेलिस विटेट एराट। प्रिन फ़्यूगियाट, एग्यू नॉन एलिमेंट पॉज़्यूयर, मेटस पुरस इयुकुलिस लेक्टस, एट ट्रिस्टिक लिगुला जस्टो वीटा मैग्ना। अलिक्कम कांलिसिस सॉलिसिट्यूडिन पुरस। प्राइसेन्ट अलिकम, एरीम एट फेरमेंटम मोलिस, लिगुला मस्सा एडिपिस्किंग निसल, एसी युरिस्मॉड निब निल यू लेक्टस। सपियन में फुसफुसाते हुए वीर्य। विवामस लेओ। अलिकम युरिस्मोड लिबरो युर एनिम। Nulla nec felis sed leo placerat इम्पीडिएट। जस्टो में एनीन सुस्पिलिट नाला। सस्पेंडिस कर्सस रट्रम ईग्यू। Nulla टिंसीडंट tincidunt mi। करैबिटूर इयाकुलिस, लॉरेम वेल रोनकस फौसीबस, फेलिस मैग्ना फेरमेंटम ईग्यू, एट अल्ट्रिबिस लैक्सस लॉरेम वेरियस पुरस। करबैतुर यूरोप अमेट।


3
लोगों को अपने कार्यक्रम का आउटपुट प्रदान करने के लिए क्यों कहें? क्या आप पोस्टिंग से पहले अपने परिणामों की जांच करने में असफल लोगों के बारे में चिंतित हैं?
पीटर टेलर

1
मैं एक php प्रोग्राम प्रदान करने के लिए ललचाता हूँ जिसमें आउटपुट टेक्स्ट होता है। ;-) गंभीर रूप से, हालांकि आउटपुट टेक्स्ट की दूसरी पंक्ति के रिक्त स्थान रिक्त स्थान पर जोड़े गए हैं? कि मैं नहीं दिखाई दे रहा है, और नहीं तो, हम कैसे उत्पादन की उम्मीद की जा सकती है वहाँ यह करने के लिए कुछ पैटर्न है वास्तव में दिए गए इनपुट के लिए है कि उत्पादन?
गैरेथ

@ गैरेथ: माफ करना, मेरा बुरा। मैंने एक गलती की है, कॉमा के बाद है, ना कि इंसिडिडंट के बाद। प्रश्न संपादित किया गया।
टोटो

@Peter टेलर: सिर्फ इसलिए कि मैं सभी भाषाओं का परीक्षण नहीं कर पा रहा हूं।
टोटो

1
@ इल्मारी करोनेन: हाँ, इनपुट स्ट्रिंग कुछ भी हो सकती है।
टोटो

जवाबों:


5

पर्ल, 94 चार्ट

for(/(.{0,80}\s)/g){$i=1;$i+=!s/^(.*?\.|.*?,|(.*? )??\S{$i}) \b/$1  /until/
|.{81}/;chop;say}

के साथ भागो perl -nM5.01। ( nचरित्र की गिनती में शामिल है।)

ऊपर दिया गया कोड सबसे छोटा है जिसे मैं बना सकता हूं जो मैं उस पर फेंकने वाले किसी भी कर्लबॉल को संभाल सकता हूं (जैसे कि एक पंक्ति की शुरुआत में एक अक्षर के शब्द, इनपुट लाइनें बिल्कुल 80 चार्ट लंबी, आदि) बिल्कुल कल्पना के अनुसार:

Lorem ipsum dolor sit amet,  consectetur adipisicing 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.

I'm  tempted to  provide a  php  program which consists of  the output text. ;-)
Seriously though,  the spaces on the second line of the output text seem to have
been added to  the spaces at  random? Is  there some pattern to  it that I'm not
seeing,  and if  not,  how can we be expected to produce exactly that output for
the given input?

(अतिरिक्त परीक्षण इनपुट के रूप में उनकी टिप्पणी का उपयोग करने के लिए गैरेथ से माफी के साथ।)

निम्न 75-चार संस्करण नमूना इनपुट से नमूना आउटपुट का उत्पादन करने के लिए पर्याप्त रूप से काम करता है, लेकिन अन्य इनपुट के लिए विफल हो सकता है। साथ ही, यह प्रत्येक आउटपुट लाइन के अंत में एक अतिरिक्त स्पेस कैरेक्टर छोड़ता है।

for(/(.{0,80}\s)/g){s/(.*?\.|.*?,|.*? ..) \b/$1  /until/.{81}/||s/
//;say}

यदि वे इनपुट का सामना करते हैं तो वे दोनों संस्करण हमेशा के लिए लूप कर देंगे कि वे सही तरीके से सही नहीं ठहरा सकते। (लंबे संस्करण में, इसके स्थान पर सात अतिरिक्त वर्णों की लागत को ठीक untilकिया until$i>80||जाएगा।)


आह, मुझे एक पर्ल समाधान के साथ शुरू करना चाहिए;; इस तरह के कार्य के लिए यह भाषा निश्चित रूप से अच्छी है।
हॉवर्ड

मुझे Quantifier in {,} bigger than 32766 in regex; marked by <-- HERE in m/^(.*?\.|.*?,|(.*? )??\S{ <-- HERE 32767}) \b/दूसरे पाठ के लिए मिला ।
टोटो

@ M42: ऐसा इसलिए है क्योंकि दूसरा उदाहरण पाठ नियमों के अनुसार उचित नहीं हो सकता है। अगर मैं $i>80जांच में जोड़ता हूं , तो यह 11 वीं पंक्ति तक फैलता है pede  pellentesque  fermentum.  Maecenas  adipiscing  ante  non  diam  sodales, जो केवल 78 वर्ण लंबा है, और फिर प्रत्येक शब्द (अंतिम को छोड़कर) के बाद से दो स्थान छोड़ देता है।
इल्मरी करोनें

2

रूबी, 146 वर्ण

$><<gets.gsub(/(.{,80})( |$)/){$2>""?(s=$1+$/;(['\.',?,]+(1..80).map{|l|"\\b\\w{#{l}}"}).any?{|x|s.sub! /#{x} (?=\w)/,'\& '}while s.size<81;s):$1}

यह बिल्कुल वांछित आउटपुट प्रिंट करता है (नीचे देखें) यदि दिए गए पाठ को STDIN में खिलाया जाता है।

Lorem ipsum dolor sit amet,  consectetur adipisicing 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.

संपादित करें: अपना पहला समाधान प्रस्तुत करने के ठीक बाद मैंने टिप्पणियों में देखा कि यह आवश्यक है कि किसी भी इनपुट स्ट्रिंग को संसाधित किया जा सकता है। पिछला उत्तर केवल 95 वर्णों का था लेकिन इस आवश्यकता को पूरा नहीं किया:

r=gets.split;l=0;'49231227217b6'.chars{|s|r[l+=s.hex]+=' '};(r*' ').gsub(/(.{,80}) ?/){puts $1}

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

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