আপনি বানাতে একটি বই পেয়েছেন!


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. প্রোগ্রামটি প্রয়োজনীয় হিসাবে অনেকগুলি পৃষ্ঠা আউটপুট করতে সক্ষম হতে হবে, এবং কেবলমাত্র এটিই many
  5. আপনার প্রোগ্রামটিতে কেবল 14 বাই 7 নয়, কোনও পৃষ্ঠার আকারকে সমর্থন করতে হবে।
  6. এটি কোড গল্ফ, তাই বাইটের (যে কোনও ভাষায়) ক্ষুদ্রতম সমাধানটি জয়ী হয়।
  7. মজা নষ্ট করবেন না। স্ট্যান্ডার্ড লুফোলগুলি স্পষ্টতই অনুমোদিত নয়।

ওহ, এবং, উপায়:

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

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

@ উফ উফ, স্থির fixed
আমি ..

7
যদি এর অর্থ for example 14এটি হয়e.g.
ফ্রাউনফ্রোগ


4
আমাদের কি একক শব্দের 'মাল্টি-কাটস' পরিচালনা করতে হবে? (লাইক scru-/-mpt-/-ious)
আর্নল্ড

1
@ আরনাউল্ড যদি কোনও শব্দ দীর্ঘ হয় তবে হ্যাঁ।
আমি ..

উত্তর:


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 বাইট সংরক্ষণ করতে ব্যবহার করতে পারেন ...
চ্যাস ব্রাউন

এফওয়াইআই (এটির ঠিকানা দরকার কিনা তা নিশ্চিত নয়) আমার প্রস্তাবিত পরীক্ষার 7, 3, "Three Is The Magic Number!"কেসটি একটি অগ্রণী খালি পৃষ্ঠা দেয়।
জোনাথন অ্যালান


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

জাভাস্ক্রিপ্ট (ES8), 242 বাইট

একটি বাগ রিপোর্ট করার জন্য @ টিভিডি 1 কে ধন্যবাদ

(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
@ টিভিডি 1 এই প্রতিবেদন করার জন্য ধন্যবাদ। এটি এখন স্থির করা উচিত ।
আর্নল্ড

1

জেলি , 93 বাইট

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

একটি পূর্ণ তিন আর্গুমেন্ট গ্রহণ প্রোগ্রাম ( text, width, height) পৃষ্ঠাতে ছাপে পারে।

এটি অনলাইন চেষ্টা করুন! Second০ সেকেন্ডের সীমাতে ওপি থেকে উদাহরণ চালাতে এনবি খুব অযোগ্য।

( 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

পিএইচপি, 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>'বা অনলাইনে চেষ্টা করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.