आपको एक पुस्तक मिल गई है!


15

आप एक आभासी, पुराने जमाने के प्रिंटिंग प्रेस में काम करते हैं। अपने मोनोपेस पत्रों को तेज़ी से व्यवस्थित करने में आपकी मदद करने के लिए, आप कम से कम कार्यक्रम को आपकी मदद के लिए संभव बनाने का निर्णय लेते हैं। पाठ के एक पृष्ठ और एक पृष्ठ आकार को देखते हुए, पाठ के प्रत्येक पृष्ठ को उत्पन्न और आउटपुट करते हैं।

उदाहरण

उदाहरण के लिए, पृष्ठ की चौड़ाई 14, ऊंचाई 7 और कुछ पाठ के साथ, यहां आपकी पुस्तक है:

14, 7, "Fruits make an extremely good snack due to their utterly scrumptious sweetness. They are also very healthy for you."
+------------+
| Fruits     |
| make an    |
| extremely  |
| good snack |
| due to     |
+------------+

+------------+
| their      |
| utterly    |
| scrumptio- |
| -us        |
| sweetness. |
+------------+

+------------+
| They are   |
| also very  |
| healthy    |
| for you.   |
|            |
+------------+

यहाँ मूल पृष्ठ सेटअप है:

|---i.e.14---|
+------------+ - 
| Xxxxxxxxxx | |
| Xxxxxxxxxx | i.  
| Xxxxxxxxxx | e. 
| Xxxxxxxxxx | 7
| Xxxxxxxxxx | | 
+------------+ - 

कुछ बातें

  1. पृष्ठ किनारों और पाठ के बीच एक-स्थान का मार्जिन है।
  2. चौड़ाई और ऊंचाई में बॉक्स के किनारे शामिल हैं, अगर यह स्पष्ट नहीं था।
  3. यदि केवल एक लाइन पर कोई शब्द फिट नहीं हो सकता है तो रैपराउंड केवल तब होता है।
  4. कार्यक्रम को जरूरत के रूप में कई पृष्ठों में आउटपुट करने में सक्षम होना चाहिए, और केवल इतना ही।
  5. आपके कार्यक्रम को किसी भी पृष्ठ के आकार का समर्थन करना है, न कि केवल 7 द्वारा 14।
  6. यह कोड गोल्फ है, इसलिए बाइट्स (किसी भी भाषा) में सबसे छोटा समाधान जीत जाता है।
  7. मज़ा बर्बाद मत करो। मानक खामियों को स्पष्ट रूप से अनुमति नहीं है।

ओह, और ऐसा है कि:

+------------+
| May the    |
| best book  |
| publisher  | 
| win. Good  |
| Luck!      |
+------------+

+------------+
| Best       |
| program    |
| so far:    | 
| Charcoal   |
|            |
+------------+

@rod ऊप्स, फिक्स्ड।
I ..

7
यदि आपका मतलब है for example 14किe.g.
FrownyFrog


4
क्या हमें एक शब्द पर 'मल्टी-कट' को संभालने की आवश्यकता है? (जैसे scru-/-mpt-/-ious)
अरनौलड

1
@ अरनल्ड यदि किसी शब्द की अवधि पर्याप्त है, तो हाँ।
I ..

जवाबों:


5

पायथन 2 , 306 304 283 279 बाइट्स

def f(w,h,s):
 b=[];w-=4;h-=2;H='+-'+'-'*w+'-+';x=l='';s=s.split()
 while s:
	W=s.pop(0)
	if W[w:]:W,s=W[:w-1]+'-',['-'+W[w-1:]]+s
	if len(l+W)<=w-(l>x):l+=' '*(l>x)+W
	else:b+=[l];l=W
 b+=[l]+[x]*h
 while any(b):print'\n'.join([H]+['| %-*s |'%(w,b.pop(0))for _ in' '*h]+[H,x,x])

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


मुझे लगता है कि आप L=lenकुल 2 बाइट बचाने के लिए उपयोग कर सकते हैं ...
चास ब्राउन

FYI (निश्चित नहीं कि अगर इसे संबोधित करने की आवश्यकता है) तो परीक्षण का मामला जो मैंने सुझाया है ( 7, 3, "Three Is The Magic Number!") एक अग्रणी खाली पृष्ठ देता है।
जोनाथन एलन

1
@JonathanAllan धन्यवाद, इसे ठीक कर दिया :)
TFeld

3

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

NθNηM⁺η²↑F⪪S «W›Lι⁻θ⁴«⊞υ⁺…ι⁻θ⁵-≔⁺-✂ι⁻θ⁵Lι¹ι»⊞υι»Fυ«¿‹Lι±ⅈ «M⁻⁻⁴ⅈθ¹¿¬﹪ⅉ⊕η«↙↙Bθη↘→»»ι

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज वर्जन के लिए है, जिसे डिलेबोसिफायर एंड निलरी ऑपरेटर्स हैंडल नहीं कर सकता है । यदि प्रमुख रिक्त लाइनें स्वीकार्य थीं, तो मैं इसे 76 बाइट तक ले जा सकता था:

≔⁻N⁴θMθ→NηF⪪S «W›Lιθ«⊞υ⁺…ι⊖θ-≔⁺-✂ι⊖θLι¹ι»⊞υι»Fυ«¿‹⁺ⅈLιθ «F¬﹪ⅉ⊕η«⸿↙↙B⁺θ⁴η»⸿»ι

स्पष्टीकरण:

NθNη

में चौड़ाई qऔर ऊंचाई इनपुट करें h

M⁺η²↑

उस स्थिति में जाएं जो खींचे जाने वाले पहले बॉक्स को ट्रिगर करेगी, लेकिन शीर्ष मार्जिन उत्पन्न किए बिना।

F⪪S «

इनपुट स्ट्रिंग में सभी शब्दों को लूप करें।

W›Lι⁻θ⁴«

किसी शब्द को बॉक्स में फिट करने के लिए बहुत चौड़ा होने पर दोहराएं।

⊞υ⁺…ι⁻θ⁵-

उस शब्द का अधिक से अधिक धक्का दें जो फिट होगा और एक अनुगामी हाइफ़न।

≔⁺-✂ι⁻θ⁵Lι¹ι»

शेष शब्द के लिए एक हाइफ़न उपसर्ग करें।

⊞υι»

शेष शब्द को धक्का दें।

Fυ«

सभी हाइफ़न शब्दों पर लूप करें।

¿‹Lι±ⅈ

जांचें कि क्या शब्द वर्तमान लाइन पर फिट बैठता है।

 «

यदि ऐसा है तो एक स्थान प्रिंट करें।

M⁻⁻⁴ⅈθ¹

अन्यथा अगली पंक्ति के प्रारंभ में जाएं।

¿¬﹪ⅉ⊕η

जांचें कि क्या हमें एक नया बॉक्स चाहिए।

«↙↙Bθη↘→»»

यदि ऐसा है तो बॉक्स को ड्रा करें।

ι

अंत में, शब्द प्रिंट करें।



2

SOGL V0.12 , 92 बाइट्स

Aē:b⁾\&?Q¶oQ}cI@*¼|a31žO■
.⁾:0EHC┌*¼+Q,θK;{⁴D@Κ+lc<‽Xd■Flc<‽ø;c⁾{Kh+;}D┌+■d┌Κ}}}■beb⁾%-⁾{ø■}

यह कोशिश करो!



@ जोनाथन ऑलन ओह। : / मल्टी-कट की अनुमति देने के लिए इसे ठीक करना शायद बहुत सारे बाइट्स हैं ..
dzaima

2

जावास्क्रिप्ट (ईएस 8), 242 बाइट्स

बग की रिपोर्टिंग के लिए @ Tvde1 का धन्यवाद

(s,w,h)=>s.split` `.map(g=s=>l=(l+s)[W=w-5]?s[l&&A(l),l='',w-4]?g('-'+s.slice(W),A(s.slice(0,W)+'-')):s:l?l+' '+s:s,n=o=l='',h-=2,b=`+${'-'.repeat(w-2)}+
`,A=s=>o+=(!n|n++%h?'':b+`
`+b)+`| ${s.padEnd(w-3)}|
`)&&(g=s=>A(s)&&n%h?g(''):b+o+b)(l)

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

टिप्पणी की गई

(s, w, h) =>                        // given s = string, w = width, h = height
  s.split` `                        // get all words by splitting the string on spaces
  .map(g = s =>                     // for each word s:
    l = (l + s)[W = w - 5] ?        //   if the word is too long for the current line:
      s[ l && A(l),                 //     append the line (if not empty)
         l = '',                    //     clear the line
         w - 4 ] ?                  //     if the word itself doesn't fit:
        g(                          //       do a recursive call with:
          '-' + s.slice(W),         //         a hyphen + the next part
          A(s.slice(0, W) + '-')    //         and append the current part + a hyphen
        )                           //       end of recursive call
      :                             //     else:
        s                           //       initialize a new line with this word
    :                               //   else:
      l ?                           //     if the current line is not empty:
        l + ' ' + s                 //       append a space + the word
      :                             //     else:
        s,                          //       initialize a new line with this word
    n = o = l = '',                 //   n = line counter, o = output, l = line
    h -= 2,                         //   adjust h
    b = `+${'-'.repeat(w - 2)}+\n`, //   b = border + linefeed
    A = s =>                        //   A = function that updates the output o:
      o += (                        //     append to o:
        !n | n++ % h ?              //       if we haven't reached an end of page:
          ''                        //         an empty string
        :                           //       else:
          b + `\n` + b              //         bottom border + linefeed + top border
      ) +                           //       followed by
      `| ${s.padEnd(w - 3)}|\n`     //       left border + padded text + right border
  ) &&                              // end of map()
  (g = s =>                         // g = recursive function taking s:
    A(s) &&                         //   append s
    n % h ?                         //   if we haven't reached an end of page:
      g('')                         //     go on with an empty line
    :                               //   else:
      b + o + b                     //     return top border + output + bottom border
  )(l)                              // initial call to g() with the last pending line

अपने उदाहरण पाठ के साथ प्रयास करें 12और 7, कुछ पंक्तियाँ / शब्द उलटे हैं।
Tvde1

1
@ Tvde1 इसे रिपोर्ट करने के लिए धन्यवाद। इसे अब ठीक किया जाना चाहिए ।
अरनौलद

1

जैली , 93 बाइट्स

1,⁴Ṭị⁾+-W,`
ṣ⁶µḊṖs⁴_6¤j⁾--;@Ḣ;Ṫḟ0s⁴_©4¤µ€ẎŒṖK€€µL€>®ẸµÐḟṪ;€⁶x®¤ḣ€®s⁵_2¤Zz⁶x®¤j@€€⁾| ,U¤j@€¢ẎY

एक पूर्ण तीन तर्कों लेने कार्यक्रम ( text, width, height) पृष्ठों प्रिंट है।

इसे ऑनलाइन आज़माएं! एनबी टू 60 सेकंड की सीमा के भीतर ओपी से उदाहरण को चलाने के लिए अक्षम है।

( 97 बाइट्स यदि पृष्ठों के बीच की खाली लाइन वास्तव में एक आवश्यकता है)

कैसे?

1,⁴Ṭị⁾+-W,` - Link 1, make header & footer: no arguments
  ⁴         - program's 2nd argument, width
1           - literal one
 ,          - pair = [1,width]
   Ṭ        - untruth = [1,0,0,...,0,0,1] (a 1 at index 1 and index width; 0 elsewhere)
     ⁾+-    - literal list of characters = "+-"
    ị       - index into (1-based & modular) = "+--...--+"
        W   - wrap = ["+---...--+']
          ` - use as both arguments of the dyad:
         ,  - pair = [["+---...--+'],["+---...--+']]

ṣ⁶µḊṖs⁴_6¤j⁾--;@Ḣ;Ṫḟ0s⁴_©4¤µ€ẎŒṖK€€µL€>®ẸµÐḟṪ;€⁶x®¤ḣ€®s⁵_2¤Zz⁶x®¤j@€€⁾| ,U¤j@€¢ẎY

 - Main link. This is long so splitting it up into parts like so:
ṣ⁶µ "A" µ€ "B" µ "C" µÐḟ "D"
ṣ⁶                           - split 1st argument (text) at spaces
  µ "A" µ€                   - for €ach resulting word do "A" (get hyphenated parts)
           "B"               - do "B" (all ways to partition those joining with spaces)
                     µÐḟ     - filter discard if:
               µ "C"         -   do "C" (any parts are too long)
                         "D" - do "D" (format the resulting list into the page-format)

"A" = ḊṖs⁴_6¤j⁾--;@Ḣ;Ṫḟ0s⁴_©4¤ - Hyphenate: list, word     e.g. "Something"
      Ḋ                        - dequeue                        "omething"
       Ṗ                       - pop                            "omethin"
            ¤                  - nilad followed by link(s) as a nilad
         ⁴                     -   program's 2nd argument  e.g. 9  (width)
           6                   -   literal six                  6
          _                    -   subtract                     3
        s                      - split into chunks             ["ome","thi","n"]
              ⁾--              - literal list of characters     "--"
             j                 - join                           "ome--thi--n"
                   Ḣ           - head (word)                    "S"
                 ;@            - concatenate (sw@p arguments)   "Some--thi--n"
                     Ṫ         - tail (word)                    "g"
                    ;          - concatenate                    "Some--thi--ng"
                      ḟ0       - filter out zeros (tail yields 0 for words of length 1)
                             ¤  - nilad followed by link(s) as a nilad:
                         ⁴      -   program's 2nd argument      9
                            4   -   literal four                4
                          _     -   subtract                    5
                           ©    -   copy to register & yield    5
                        s       - split into chunks             ["Some-","-thi-","-ng"]

"B" = ẎŒṖK€€ - Line arrangements: list of lists of hyphen-parts / single words
      Ẏ      - flatten by one (make a list of words and hyphen-parts
             - e.g. [["Not"],["hyph-","-ena-","-ted"]] -> ["Not","hyph-","-ena-","-ted"]
       ŒṖ    - partition e.g. [1,2,3]->[[[1],[2],[3]],[[1],[2,3]],[[1,2],[3]],[[1,2,3]]]
         K€€ - join with spaces for €ach for €ach e.g. ["one","two"]->"one two"

"C" = L€>®Ẹ - Any part too long?: one of the list of lines from "B"
      L€    - length of €ach
         ®  - recall from the register (width minus 4)
        >   - greater than (vectorises) - 1 if so 0 if not
          Ẹ - any truthy? (1 if any too long)

"D" = Ṫ;€⁶x®¤ḣ€®s⁵_2¤Zz⁶x®¤j@€€⁾| ,U¤j@€¢ẎY - Format as pages: list of valid arrangements
      Ṫ                                     - tail (last valid partition is greediest)
            ¤                               - nilad followed by links as a nilad:
         ⁶                                  -   literal space character
           ®                                -   recall from register (width minus 4)
          x                                 -   repeat elements
       ;€                                   - concatenate to €ach
               ®                            - recall from register (width minus 4)
             ḣ€                             - head €ach to index
                    ¤                       - nilad followed by links as a nilad:
                 ⁵                          -   program's 3rd argument, height
                   2                        -   literal two
                  _                         -   subtract
                     Z                      - transpose
                          ¤                 - nilad followed by link(s) as a nilad:

                       ⁶                    -   literal space character
                         ®                  -   recall from register (width minus 4)
                        x                   -   repeat elements

                      z                     - transpose with filler (repeated spaces)
                                    ¤       - nilad followed by link(s) as a nilad:
                               ⁾|<space>    -   literal list of characters = "| "
                                   U        -   upend = " |"
                                  ,         -   pair = ["| "," |"]
                           j@€€             - join for €ach for €ach (sw@p arguments)
                                        ¢   - call last link (1) as a nilad
                                     j@€    - join for €ach (sw@p arguments)
                                         Ẏ  - flatten by one
                                          Y - join with line feeds
                                            - implicit print

0

PHP, 299 बाइट्स

for($a=explode(" ",$argv[3]);$y|$e=strlen($d=$a[+$i++]);$x||print"|",$x|$e<$w?$e<$w-$x?$x+=$e+print" $d":$i-=!$x=!$y+=print str_pad("",$w-$x)." |
":$y+=print" ".substr($d,0,$w-2)."- |
".!$a[--$i]="-".substr($d,$w-2),$y>$argv[2]-2&&$y=!print"$t
")$y||$y=print$t=str_pad("+",2+$w=$argv[1]-3,"-")."+
";

के साथ चलाएं php -nr '<code>' <width> <height> '<text>'या ऑनलाइन प्रयास करें

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