এএসসিআইআই বুকশেল্ভস


27

আপনি জানেন যে সেই স্ট্যাকেবল তাকগুলি যা মূলত কেবল কাঠের বাক্স যা একসাথে স্ট্যাক করা যায়? আমরা কিছু ASCII শিল্পকর্মের মধ্যে কিছু বইয়ের তাক তৈরির অনুকরণ করতে যাচ্ছি।

আমাদের বইগুলি সমস্ত সুবিধামত আকারে অভিন্ন এবং সমস্ত নীচের মত দেখাচ্ছে:

|X|
|X|
|X|

বুক শেল্ফগুলি পৃথক বাক্স, সর্বদা ভিতরে ভিতরে তিনটি অক্ষর থাকে ( |বাম এবং ডানদিকে -অক্ষর সমন্বিত থাকে, উপরের এবং নীচের অংশে অক্ষর থাকে, এবং Xবইয়ের জন্য উপযুক্ত যথেষ্ট প্রশস্ত হয় (যেখানে Xএকটি ইনপুট থাকে পূর্ণসংখ্যা)। উদাহরণস্বরূপ, এখানে আকারের একটি বইয়ের তাক রয়েছে 3:

|---------|
|         |
|         |
|         |
|---------|

কারণ আপনি 3এটির মতো বইগুলিতে ফিট করতে পারেন

|---------|
||X||X||X||
||X||X||X||
||X||X||X||
|---------|

ইনপুটটি দুটি কঠোর ইতিবাচক পূর্ণসংখ্যার হতে চলেছে, Xএবং আমাদের কাছে থাকা তাকগুলির প্রস্থ Yকোথায় X(বইগুলিতে পরিমাপ করা হয়েছে), এবং Yআমাদের কতগুলি বই স্ট্যাক করতে হবে তা। যদি আমাদের একক শেল্ফের চেয়ে ফিটের চেয়ে বেশি বই থাকে তবে আমাদের উপরে আরও তাক লাগানো দরকার। উদাহরণস্বরূপ, এখানে ইনপুট রয়েছে 4 wide / 6 books:

|------------|
||X||X|      |
||X||X|      |
||X||X|      |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|

যদি Y % X > 0, বইয়ের সংখ্যাটি শেল্ফ আকারের পূর্ণসংখ্য একাধিক না হয়, তবে অবশিষ্ট বইগুলি শীর্ষে বাম-সর্বাধিক অবস্থানে (যেমন ক্ষেত্রে 4 6, উপরে রয়েছে) এবং সেই তাকটির অবশিষ্ট অংশটি পূরণ করা উচিত স্পেস।

ইনপুট

  • যে কোনও সুবিধাজনক বিন্যাসে দুটি কঠোর ইতিবাচক পূর্ণসংখ্যা , প্রতিটি >0
  • আপনি উভয় ক্রমে ইনপুট নিতে পারেন (যেমন, প্রথমে তাকের আকার, তারপরে বইয়ের সংখ্যা বা বিপরীতে)। আপনার জমা দেওয়ার ইনপুট অর্ডার দয়া করে লিখুন।
  • আপনি নিরাপদে ধরে নিতে পারেন যে কোনওটিই ইনপুট আপনার ভাষার ডিফল্ট [int]আকারের (বা সমমানের) চেয়ে বড় হবে না ।

আউটপুট

বই এবং পুস্তকাগুলির ফলাফল ASCII শিল্পের উপস্থাপনা।

বিধি

  • নেতৃস্থানীয় বা পিছনে থাকা নতুন লাইনের বা হোয়াইটস্পেসগুলি সমস্ত alচ্ছিক, যতক্ষণ না অক্ষরগুলি নিজেরাই সঠিকভাবে লাইন করে থাকে।
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন হয় তবে আপনি আউটপুটটি মুদ্রণের পরিবর্তে ফিরিয়ে দিতে পারেন।
  • যদি সম্ভব হয় তবে দয়া করে একটি অনলাইন পরীক্ষার পরিবেশের একটি লিঙ্ক অন্তর্ভুক্ত করুন যাতে অন্য লোকেরা আপনার কোডটি চেষ্টা করে দেখতে পারে!
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

আরও উদাহরণ

6 wide / 2 books
|------------------|
||X||X|            |
||X||X|            |
||X||X|            |
|------------------|

2 wide / 6 books
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|

4 wide / 9 books
|------------|
||X|         |
||X|         |
||X|         |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|

আমি কি এটি তৈরি করতে পারি যাতে সর্বনিম্ন পরিমাণ বইয়ের শেল্ফটি নীচে থাকে, যেমন এটি উপরে থেকে নীচে ভরে যায়
গোল্ডেন

1
@ গোল্ডেনেরতিও না, বইগুলি নীচে থেকে উপরে, বাম থেকে ডানদিকের মধ্যে পূর্ণ হতে হবে।
অ্যাডমবর্কবার্ক

উত্তর:


14

জাভাস্ক্রিপ্ট (ES6), 100 99 98 বাইট

বাক্য গঠন সিনট্যাক্সে প্রস্থ wএবং বইয়ের সংখ্যা নেয় ।b(w)(b)

w=>g=(b,s=`|${'-'.repeat(w*3)}|
`,r=s.replace(/---/g,_=>b&&b--?'|X|':'   '))=>(b?g(b)+s:s)+r+r+r+s

ফর্ম্যাট এবং মন্তব্য

w =>                                // main function: takes width 'w' as input, returns 'g'
  g = (                             // g = recursive function with:
    b,                              //   - b = number of books
    s = `|${'-'.repeat(w * 3)}|\n`, //   - s = top/bottom of shell, filled with '-'
    r = s.replace(                  //   - r = pattern of the current row of books,
      RegExp('---', 'g'),           //         using 's' as a template and updating
      _ => b && b-- ? '|X|' : '   ' //         'b' while building it
    )                               // NB: 'r' must be defined in the scope of 'g',
  ) =>                              //     otherwise it would be overwritten by
    (                               //     subsequent calls
      b ?                           // if there are remaining books:
        g(b) + s                    //   do a recursive call and append shell top
      :                             // else:
        s                           //   just append shell top
    ) + r + r + r + s               // append book rows and shell bottom

পরীক্ষার মামলা


9

বাশ (+ ইউটিলিটি), 130, 108, 106 বাইট

আপনার বুকশেল্ফগুলি রেন্ডার করার জন্য একটি একক, অবিচ্ছিন্ন, শেল পাইপলাইন।

পরিবর্তণের:

  • কিছুটা কম, -12 বাইটস (থেক্স @ রিলে!)
  • printf + seqএকটি কাঁচা printf, -10 বাইট দ্বারা প্রতিস্থাপিত
  • দ্বিতীয় সেড এক্সপ্রেশন, -২ বাইট রিফেক্টর করে

Golfed

printf %$2s\\n|fold -$1|sed "s/ /|X|/g;:;/.\{$[$1*3]\}/!s/$/ /;t;h;s/./-/gp;x;p;p;p;x"|sed 's/.*/|&|/'|tac

$./shelf 6 8
|------------------|
||X||X|            |
||X||X|            |
||X||X|            |
|------------------|
|------------------|
||X||X||X||X||X||X||
||X||X||X||X||X||X||
||X||X||X||X||X||X||
|------------------|

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

$./shelf 2 3

printf %$2s\\n- এন হোয়াইটস্পেস অক্ষর তৈরি করুন, প্রতি বইতে একটি করে (হিসাবে দেখানো হয়েছে _)

___

fold -$1 - এগুলি শেল্ফ দৈর্ঘ্যের দ্বারা ভাঁজ করুন

__
_

sed "s/ /|X|/g;"- প্রতিস্থাপন _সঙ্গে X, বই কভার যোগ

|X||X|
|X|

:;/.\{$[$1*3]\}/!s/$/ /;t- স্পেস সহ ডান প্যাড (হিসাবে দেখানো হয়েছে _)

|X||X|
|X|___

h;s/./-/gp;x;p;p;p;x- প্রতিটি লাইনটি তিনবার তৈরি করুন ---এবং এর আগে এবং পরে এটি যুক্ত করুন।

------
|X||X|
|X||X|
|X||X|
------
------
|X|   
|X|   
|X|   
------

sed 's/.*/|&|/'|tac- লাইনগুলি মোড়ানো | |, ট্যাকের সাথে বিপরীতে

|------|
||X|   |
||X|   |
||X|   |
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|

প্রথম সেডে আপনি একটি নামহীন লেবেল ব্যবহার করতে পারেন এবং এর tপরিবর্তে bআপনার প্রয়োজন নেই {}। আপনি এড়িয়ে যেতে পারেন s/./-/gকারণ তারা ইতিমধ্যে -এস। অনলাইনে চেষ্টা করে দেখুন!
রিলে 14

@ রিলে এটি দুর্দান্ত পরামর্শ, আপনাকে ধন্যবাদ!
জেপেলিন

6

পাইথন 2, 133 113 105 বাইট

আমি নিশ্চিত একটি ভাল উপায় আছে ...

X,Y=input()
k='|'+'---'*X+'|'
while Y:g=Y%X or X;print k+'\n'+('|'+'|X|'*g+'   '*(X-g)+'|'+'\n')*3+k;Y-=g

ইনপুট নেওয়া হয় width, books

-20 বাইটগুলি একটি অপ্রয়োজনীয় ল্যাম্বডা ফাংশনটি দেখার জন্য @ ওওএসকে ধন্যবাদ!
-8 বাইট ইনপুটটি সংক্ষিপ্ত করার জন্য @ ওভেসকে ধন্যবাদ।


X,Y=input()মানগুলিতে নেওয়ার জন্য একটি ছোট উপায়।
ovs

ওভস ওহ অপেক্ষা করুন, আমি আমার প্রথম চেষ্টা করার জন্য এটি সেখানে রেখেছি। উপস। ভালো লাগল, ধন্যবাদ!
হাইপারনিউটারিনো

1
@ ওভস ধন্যবাদ, তাই তাহলে ইনপুট হিসাবে নেওয়া হয় X, Y, তাই না?
হাইপারনিউটারিনো

2
আমি মনে করি আপনি '|'ভেরিয়েবল হিসাবে সংজ্ঞা দিয়ে দুটি বাইট সংরক্ষণ করতে পারেন ।
janrjan জোহানসেন

6

ব্যাচ, 261 বাইট

@set/an=~-%1%%%2+1,b=%1-n
@set s=
@set t=
@for /l %%i in (1,1,%2)do @call set t=---%%t%%&if %%i gtr %n% (call set s=%%s%%   )else call set s=%%s%%X
@for %%s in ("|%t%|" "|%s:X=|X|%|" "|%s:X=|X|%|" "|%s:X=|X|%|" "|%t%|")do @echo %%~s
@if %b% gtr 0 %0 %b% %2

প্রচুর অক্ষর সহজেই মুদ্রণের জন্য টেনিস খেলুন আমার ব্যাচের উত্তর থেকে আমার কৌশলটি ব্যবহার করুন |


5

হাস্কেল , 100 বাইট

x#yপ্রস্থ xএবং yবইয়ের জন্য স্ট্রিং প্রদান করে ।

s?n=[1..n]>>s
x#y|x<y=x#(y-x)++x#x|w<-"---"?x,b<-"|X|"?y++"   "?(x-y)=[w,b,b,b,w]>>=('|':).(++"|\n")

এটি অনলাইন চেষ্টা করুন!

মূল ফাংশন / অপারেটর হয় #x<yএটি যখন বইগুলিতে বিভক্ত হয় y-xএবং xতখন পুনরাবৃত্তি হয়। যখন x>=y, wএবং bদুই লাইন ধরনের, বিয়োগ বাইরের হয় |s এবং সম্পর্কে newline।

সহায়ক অপারেটর স্ট্রিংয়ের অনুলিপিগুলি s?nসম্মত nকরে s


5

পাওয়ারশেল , 149 134 বাইট

param($w,$b)$s="|$('-'*$w*3)|"
if($a=$b%$w){,$s+,"|$('|X|'*$a)$(' '*3*($w-$a))|"*3+$s}
if($b-=$a){(,$s+,"|$('|X|'*$w)|"*3+$s)*($b/$w)}

এটি অনলাইন চেষ্টা করুন!

$wআইডিপুট এবং $bলুকগুলি ইনপুট নেয় । $sঅনুভূমিক তাকগুলির একটি হতে স্ট্রিং সেট করে । তারপরে আমাদের দুটি ifবক্তব্য রয়েছে।

আমাদের "বাকী" বই আছে কিনা তা প্রথম পরীক্ষা করে। যদি তা হয় তবে আমরা শেল্ফ, (বইয়ের সংখ্যা এবং স্পেসের সংখ্যা) *3এবং অন্য একটি শেল্ফ আউটপুট করি ।

এরপরে, আমরা দেখতে পাচ্ছি যে আমাদের অবশিষ্ট বাকীগুলি ( $a) অপসারণের পরে এখনও বই রয়েছে । সেটআপের একই ধরণের, আমরা $wবইয়ের সংখ্যা ব্যবহার করছি except যেহেতু এই মুহুর্তে, এর $bএকাধিক হিসাবে গ্যারান্টিযুক্ত $w(কারণ আমরা $aবাকীটি সরিয়ে ফেলেছি), তাই আমাদের বৃত্তাকার সম্পর্কে চিন্তা করার দরকার নেই।

[math]::Floor()15 বাইট সংরক্ষণ করে কলটি সরিয়ে ফেলা হয়েছে

এই সমস্ত স্ট্রিং পাইপলাইনে রেখে গেছে, এবং Write-Outputপ্রোগ্রামের সমাপ্তিতে অন্তর্নিহিত ঘটে।


4

সিজেম , 62 61 বাইট

q~1a*W$/W$f{0e]}{{"|X|"S3*?}%s__'-3*W$*_}%1m>W%"|
|"*"||"\*o;

হিসাবে ইনপুট লাগে width books

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

q~           Read and eval input (pushes width W and books B to the stack)
1a*          Push an array containing  the number 1 B times
W$/          Split it into chunks of size W
W$f{0e]}     Pad each chunk to width W by adding 0's to the right (the last chunk might be 
              shorter than W)
{            Apply the following to each chunk:
 {            Apply the following to each number in the chunk:
  "|X|"S3*?    Push "|X|" if the number is 1, or "   " if it's 0
 }%           (end of block)
 s            Stringify (joins with no separator)
 __           Duplicate twice (each shelf is 3 identical lines)
 '-3*W$*_     Push a string containing '-' repeated 3×W times, then duplicate it
}%           (end of block)
              At this point we have an array containing sequences of 3 identical lines 
              each followed by two lines of -'s
1m>          Rotate the array 1 to the right; brings the final line of -'s to the start
W%           Reverse the array, so that the top shelf is the partially empty one
"|\n|"*      Join the array with the string "|\n|", to build the sides of the shelves
"||"\*       Join the string "||" with the shelf string (adds the first and last | chars)
o            Print the result
;            Pop and discard W

4

পাইথন 3, 142 বাইট

এটির উপর এখনও কাজ করতেছি. bএটি 'বইয়ের সংখ্যা' এবং wশেলফ প্রস্থের জন্য।

def s(b,w):
 R=b%w
 B='|\n'
 I='|'
 X='|X|'
 d=I+3*w*'-'+B
 f=I+X*w+B
 p=I+R*X+3*(w-R)*' '+B
 print(R and d+3*p+d or" ")+b//w*(d+3*f+d))

পিপিসিজিতে আপনাকে স্বাগতম! R=b%wপরবর্তী লাইনে নামানো না হলে এটি আমার পক্ষে কাজ করে না । এছাড়াও, =কিছু বাইট সংরক্ষণ করতে আপনার এই তিনটির চারপাশের সাদা স্থান সরিয়ে ফেলতে সক্ষম হওয়া উচিত ।
বিড়াল বিড়াল

পিপিসিজিতে আপনাকে স্বাগতম!
অ্যাডমবর্কবার্ক

আপনি প্রতিস্থাপন করতে পারেন d+3*p+d if R!=0 else ''সঙ্গেR and d+3*p+d or''
shooqie

@ শুকী আমি কৌতূহলী, এটি কীভাবে ফলাফলের মূল্যায়ন করতে পারে d+3*p+d?
হুয়ান মেলিরো

1
সেমিকোলন ব্যবহার করে সমস্ত সংজ্ঞা এক লাইনে রেখে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন।
L3viathan

3

এএইচকে, 208 বাইট

AutoTrim,Off
w=%1%
b=%2%
f:=Mod(b,w)
Loop,%w%
s=%s%---
s=|%s%|`n
If (f>0) {
Loop,%f%
t=%t%|X|
Loop,% w-f
t=%t% ` ` `
t=|%t%|`n
t:=s t t t s
}
Loop,%w%
r=%r%|X|
r=|%r%|`n
Loop,% (b-f)/w
t:=t s r r r s
Send,%t%

গল্ফ করা থেকে আমাকে হতাশ করার জন্য কয়েকটি বিষয় রয়েছে:

  • অটোহটকি একটি অন্তর্নির্মিত পুনরাবৃত্তি ফাংশন নেই
  • আপনি গণিতের ক্রিয়াকলাপগুলিতে সরাসরি পাস হওয়া যুক্তি ( %1%এবং %2%) ব্যবহার করতে পারবেন না কারণ তারা পরিবর্তনশীল বা সংখ্যা ইনপুট প্রত্যাশা করে এবং এটি অক্ষরযুক্তকে পরিবর্তকের 1নামের পরিবর্তে এক নম্বর হিসাবে ধরে নেবে
  • আমি গল্ফ করতে খুব একটা ভাল না

উপরের সংস্করণটি পড়ার জন্য আরও সহজ লাগে:

AutoTrim,Off
w=%1%
b=%2%
f:=Mod(b,w)

Loop,%w%
   s=%s%---
s=|%s%|`n

If (f>0) {
   Loop,%f%
      t=%t%|X|
   Loop,% w-f
      t=%t% ` ` `
   t=|%t%|`n
   t:=s t t t s
}

Loop,%w%
   r=%r%|X|
r=|%r%|`n

Loop,% (b-f)/w
   t:=t s r r r s

Send,%t%

যদি কোনও Loopবন্ধনী ব্যবহার না করে {}তবে কেবলমাত্র পরবর্তী লাইনটি লুপের অংশ। :=পরিবর্তে ব্যবহার করে কোনও ভেরিয়েবলের মান সেট করা থাকলে =আপনি শতাংশের চিহ্ন থেকে বাঁচার অক্ষরগুলি ফেলে দিতে পারেন। টিলডে এন নতুন লাইনের চরিত্র।


3

জাভা 7, 230 224 222 বাইট

String c(int w,int b){String r="",n="|\n",z="|";int i=0,j,k,t=b%w<1?w:b%w,x=b/w+(t!=w?1:0);for(;i++<w;z+="---");z+=n;for(i=0;i<x;i++){r+=z;for(j=0;j++<3;r+=n){r+="|";for(k=0;k<w;r+=i<1&k++>=t?"   ":"|X|");}r+=z;}return r;}

ব্যাখ্যা:

String c(int w, int b){                // Method with two integer parameters and String return-type
  String r = "",                       //  The return-String
         n = "|\n",                    //  Part that's used multiple times in the code
         z = "|";                      //  Shelf part of the book-boxes
  int i = 0, j, k,                     //  Indexes used in the for-loops
      t = b%w < 1 ? w : b%w,           //  Books on top shelf
      x = b/w + (t != w ? 1 : 0);      //  Amount of shelves
  for(; i++ < w; z += "---"); z += n;  //  Create the shelf-part ("|---|"; with w times "---")
  for(i = 0; i < x; i++){              //  Loop over the rows
    r += z;                            //   Append the result with the shelf-part
    for(j = 0; j++ < 3; ){             //   Loop three times (the height of the books & boxes)
      r += "|";                        //    Append the result-String with "|"
      for(k = 0; k < w;                //    Loop over the columns
          r +=                         //     And append the result-String with:
           i < 1                       //      If this is the first row:
           & k++ >= t ?                //      And the current column is larger or equal to the amount of books in the top shelf
             "   "                     //       Use an empty space
           :                           //      Else:
             "|X|"                     //       Use the book-part
            );                         //    End of columns loop
         r += n;                       //    Append the result-String with a "|" and a new-line
       }                               //   End of the loop of three
      r += z;                          //   Append the result-String with the shelf-part
    }                                  //  End of rows loop
    return r;                          //  Return the result-String
 }                                     // End of method

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  static String c(int w,int b){String r="",n="|\n",z="|";int i=0,j,k,t=b%w<1?w:b%w,x=b/w+(t!=w?1:0);for(;i++<w;z+="---");z+=n;for(i=0;i<x;i++){r+=z;for(j=0;j++<3;r+=n){r+="|";for(k=0;k<w;r+=i<1&k++>=t?"   ":"|X|");}r+=z;}return r;}

  public static void main(String[] a){
    System.out.println(c(6, 2));
    System.out.println(c(2, 6));
    System.out.println(c(4, 9));
  }
}

আউটপুট:

|------------------|
||X||X|            |
||X||X|            |
||X||X|            |
|------------------|

|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|

|------------|
||X|         |
||X|         |
||X|         |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|


@ অলিভিয়ারগ্রোগোয়ারের কথা বিবেচনা করে আমি প্রায় 1.5 বছর আগে এটি পোস্ট করেছি, আমি যথেষ্ট আশ্চর্যজনকভাবে এটি গল্ফ করা যেতে পারে তা নিয়ে আমি অবাক হই না। ;)
কেভিন ক্রুইজসেন

ও ... আমি তারিখটি পরীক্ষা করে দেখিনি: আমি কেবল দেখলাম যে এই প্রশ্নটি সক্রিয় ছিল এবং জাভার জন্য একটি সম্পূর্ণ অন্যান্য অ্যালগরিদম সম্ভব ছিল। আমার খারাপ ...
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়ারগ্রোওয়ের কোনও সমস্যা নেই, এবং আপনার উত্তরটি ভালভাবে সম্পন্ন হয়েছে। :) যখন আমি এখনও পরীক্ষার কেস এবং আউটপুট উত্তরে যুক্ত করেছিলাম এবং জাভা in-তে সমস্ত কিছু উত্তর দিয়েছিলাম তখন আমি এই উত্তরটির পিছনে ফিরে তাকানো প্রায় নস্টালজিক অনুভব করি কারণ আমি এখনও জাভা 8 বুঝতে পারি নি। এক্সডি
কেভিন ক্রুইজসেন

2

পাওয়ারশেল, 109 বাইট

param($w,$b)for(;$b;$b-=$c){if(!($c=$b%$w)){$c=$w}($l="|$('-'*$w*3)|")
,"|$('|X|'*$c)$(' '*($w-$c)*3)|"*3
$l}

কম গল্ফ পরীক্ষা স্ক্রিপ্ট:

$f = {

param($w,$b)
for(;$b;$b-=$c){
    if(!($c=$b%$w)){$c=$w}
    ($l="|$('-'*$w*3)|")
    ,"|$('|X|'*$c)$(' '*($w-$c)*3)|"*3
    $l
}

}

@(
    ,(6, 2, 
    "|------------------|",
    "||X||X|            |",
    "||X||X|            |",
    "||X||X|            |",
    "|------------------|")

    ,(2, 6,
    "|------|",
    "||X||X||",
    "||X||X||",
    "||X||X||",
    "|------|",
    "|------|",
    "||X||X||",
    "||X||X||",
    "||X||X||",
    "|------|",
    "|------|",
    "||X||X||",
    "||X||X||",
    "||X||X||",
    "|------|")

    ,(4, 9,
    "|------------|",
    "||X|         |",
    "||X|         |",
    "||X|         |",
    "|------------|",
    "|------------|",
    "||X||X||X||X||",
    "||X||X||X||X||",
    "||X||X||X||X||",
    "|------------|",
    "|------------|",
    "||X||X||X||X||",
    "||X||X||X||X||",
    "||X||X||X||X||",
    "|------------|")
) | % {
    $w,$b,$expected = $_
    $result = &$f $w $b
    "$result"-eq"$expected"
    $result
}

আউটপুট:

True
|------------------|
||X||X|            |
||X||X|            |
||X||X|            |
|------------------|
True
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
True
|------------|
||X|         |
||X|         |
||X|         |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|

পাওয়ারশেল, 109 বাইট, বিকল্প

param($w,$b)for(;$b;$b-=$c){($l="|$('---'*$w)|")
,"|$('|X|'*($c=(($b%$w),$w-ne0)[0]))$('   '*($w-$c))|"*3
$l}

1

পাইথন 2 , 120 118 বাইট

i,j=input()
a=j%i
n='|\n'
x='|'+'---'*i+n
print(x+('|'+'|x|'*a+' '*(i-a)*3+n)*3,'')[a<1]+(x+('|'+'|x|'*i+n)*3)*(j/i)+x

এটি অনলাইন চেষ্টা করুন!

গত কয়েকদিন ধরে এটির কাছে যাওয়ার অর্থ হয়েছে। আমি এখন অবশেষে এটি করার সময় পেয়েছি ইতিমধ্যে একটি সংক্ষিপ্ত পাইথন উত্তর রয়েছে। ওহ ভাল, স্রেফ একটি বিকল্প হিসাবে পোস্ট।

প্রস্থ, বই হিসাবে ইনপুট নেওয়া


1

এসওজিএল , by৪ বাইট

be%→M"Q└ƨS‘*ač;┼→S%‘A |e3* -* |++M?tMSeM-9*@*a+┼Ot}be÷:?{teSa┼Ot

ব্যাখ্যা: প্রথম কার্য:

   →M  define function M which pushes
b      the book amount
  %    mod
 e     the bookshelf width

দ্বিতীয় ফাংশন:

           →S  create function S (example input: 3)          [3]
"Q└ƨS‘         push the string "|||XXX|||" (the book)        [3, "|||XXX|||"]
      *        multiply by the number on stack (book count)  ["|||XXX||||||XXX||||||XXX|||"]
       a       push variable A (later defined "|||")         ["|||XXX||||||XXX||||||XXX|||", "|||"]
        č      chop into char array                          ["|||XXX||||||XXX||||||XXX|||", ["|", "|", "|"]]
         ;     swap top 2 on stack                           [["|", "|", "|"], "|||XXX||||||XXX||||||XXX|||"]
          ┼    horizontally append                           [["||X||X||X|", "||X||X||X|", "||X||X||X|"]]

এই ফাংশনটি স্ট্যাকের উপর একটি সংখ্যা (বইয়ের গণনা) প্রত্যাশা করে এবং বুক শেলফের বইগুলি আউটপুট করে

["||X||X||X|",
 "||X||X||X|",
 "||X||X||X|"]

আরও নীচে দেওয়া উদাহরণটি হল ই = 3 (বুকসেল্ফ প্রস্থ) এবং বি = 8 (বইয়ের পরিমাণ)

%‘A              var A = "|||"                        
    |            push "|"                      ["|"]                
     e3*         push E * 3                    ["|", 9]             
         -*      push that many "-"es          ["|", "---------"]   
            |+   append "|"                    ["|", "---------|"]  
              +  prepend the "|"               ["|---------|"]      

এটি বুকশেল্ফ শীর্ষ / নীচের লাইন এবং সর্বদা স্ট্যাকের প্রথম অংশে থাকে (অর্ধ-খালি বুকসেল্ফ)

প্রথম প্রধান অংশ

M?               }               if the modulo != 0
  tM                             output the bookshelf top/bottom line
    S                            execute the S function width the modulo
     eM-                         push bookshelf width - modulo (empty space count)
        9*                       multiply by 9 (books are 3x3 so 3x3 spaces)
          @*                     get that many spaces
            a+                   append to that "|||"
              ┼                  horizontally append
               O                 output
                t                output the bookshelf top/bottom line

এবং শেষ অংশ

be÷            floor divide book amout by width (full shelves)
   :?          if not 0 (a bug makes all loops execute once)
     {         repeat
      t        output the bookshelf top/bottom line
       eS      execute S with shelf width (full shelf)
         a┼    horizontally append "|||"
           O   output
            t  output the bookshelf top/bottom line



0

ক্যানভাস , 33 বাইট

|X|3*×⁷3×⇵-×|3*×╫│;22╋P
%?%⁸}÷[⁷⁸

এখানে চেষ্টা করুন!

ব্যাখ্যা (কিছু অক্ষর আরও মনোস্পেস দেখার জন্য প্রতিস্থাপন করা হয়েছে):

|X|3*×⁷3×⇵-×|3*×╫│;22╋P  helper function. Prints a shelf with X books
|X|                      push "|X|"
   3*                    repeat it 3 times vertically
     ×                   repeat that horizontally by the item (X) below on the stack
      ⁷3×                push width * 3
         ⇵               ceiling divide that by 2
          -×             repeat "-" that many times
            |3*          repeat "|" vertically 3 times (aka "|¶|¶|")
               ×         prepend that to the dashes (aka ¼ of a bookshelf)
                ╫│       quad-palindromize with horizontal overlap of the remainder
                           taken before and vertical overlap of 1
                  ;      get the books on top
                   22╋   and at coordinates (2;2) in the shelf, place them in
                      P  print that whole thing

%?%⁸}÷[⁷⁸  
%?  }      if width%amount (!= 0)
  %⁸         execute the helper function with width%amount on the stack
     ÷[    repeat floor(width/amount) times
       ⁷     push width
        ⁸    execute the helper function

0

পিপ -n , 45 বাইট

Wb-:yPPZ['-X3Xa"|X|"X(Yb%a|a).sX3Xa-yRL3]WR'|

কমান্ড-লাইন আর্গুমেন্ট হিসাবে যথাক্রমে প্রস্থ এবং বইয়ের গণনা নেয়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমরা তাক থেকে উপরে থেকে নীচে একে একে মুদ্রণ করতে একটি লুপ চালাই। প্রতিটি পুনরাবৃত্তিতে, আমরা bবিয়োগ করে y( মুদ্রণের জন্য বইয়ের সংখ্যা) আপডেট করি ( সেই পুনরাবৃত্তিতে মুদ্রিত বইয়ের সংখ্যা)। যখন b0, লুপ করে প্রস্থান ছুঁয়েছে।

Wb-:yPPZ['-X3Xa"|X|"X(Yb%a|a).sX3Xa-yRL3]WR'|
                                               a is 1st cmdline arg (shelf width); b is 2nd cmdline
                                                 arg (# books); s is space; y is ""
                                               Note that "" becomes zero in numeric contexts
Wb-:y                                          While b decremented by y is nonzero:
                       b%a|a                    b mod a, or a if that quantity is zero
                      Y                         Yank that value into y
                     (      )                   This is the number of books on the current shelf
               "|X|"                            Book-spine string
                    X                           Repeated y times
                                  a-y           Number of empty slots on the current shelf
                              sX3X              Three spaces for each slot
                             .                  Concatenate to the book-spines string
                                     RL3        Make a list of 3 copies of that string
         '-X3Xa                                 3*a hyphens
        [                               ]       Put that string and the above list in a list
                                         WR'|   Wrap all strings in the nested list in |
      PZ                                        Palindromize the outer list (adding a copy of the
                                                hyphens to the end of it)
     P                                          Print, joining all sublists on newlines (-n flag)

কারণ এটি সামান্য জড়িত, এখানে প্রথম পুনরাবৃত্তির উদাহরণ যখন a = 3, b = 8:

Yb%a|a       2
"|X|"X ^     "|X||X|"
^ .sX3Xa-y   "|X||X|   "
^ RL3        ["|X||X|   ";"|X||X|   ";"|X||X|   "]
['-X3Xa ^ ]  ["---------";["|X||X|   ";"|X||X|   ";"|X||X|   "]]
^ WR'|       ["|---------|";["||X||X|   |";"||X||X|   |";"||X||X|   |"]]
PZ ^         ["|---------|";["||X||X|   |";"||X||X|   |";"||X||X|   |"];"|---------|"]

যা তখন প্রিন্ট করে

|---------|
||X||X|   |
||X||X|   |
||X||X|   |
|---------|

0

পাইথ , 56 বাইট

M++GHGV_fTs*V,]Q1.DEQjCg*5\|smgL\-*L3?d"|X|""   ".[*]1N0

শেল্ফ প্রস্থ, ক্রমের পৃথক যুক্তি হিসাবে বই গণনা গ্রহণ করে। এটি এখানে অনলাইনে চেষ্টা করুন , বা এখানে সমস্ত পরীক্ষার কেস একবারে যাচাই করুন

M++GHGV_fTs*V,]Q1.DEQjCg*5\|smgL\-*L3?d"|X|""   ".[*]1N0Q   Implicit: Q=1st arg, E=2nd arg
                                                            Trailing Q inferred
M                                                           Define a function, g(G,H):
 ++GHG                                                        Return G + H + G
                 .DEQ                                       Divmod E by Q, yields [E//Q, E%Q]
             ,]Q1                                           [[Q], 1]
           *V                                               Vectorised multiply the two previous results
                                                              This yields Q repeated E//Q times, then E%Q
          s                                                 Flatten
        fT                                                  Filter out falsey values (i.e. trailing 0 if present)
       _                                                    Reverse (to put partially filled shelf on top)
      V                                                     For N in the above:
                                                    ]1        [1]
                                                   *  N       Repeat the above N times
                                                 .[    0Q     Pad the above on the right with 0, to length Q
                             m                                Map the above, as d, using:
                                     ?d"|X|""   "               If d != 0, yield "|X|", else "   "
                                  *L3                           Multiply each char by 3
                                                                  Yields ['|||','XXX','|||'] or ['   ','   ','   ']
                              gL\-                              Use g to wrap each element in '-'
                            s                                 Flatten
                       g*5\|                                  Use g to add '|||||' to start and end of the above
                      C                                       Transpose
                     j                                        Join on newlines, implicit print

0

ফোর্থ (গফার্থ) , 22২২ বাইট (কমিয়ে দেওয়া (মন্তব্য, ইনডেন্টেশন, 1- চরিত্রের শব্দের নামগুলি সরিয়ে 303 বাইট))

ফোরথের সাথে আমার প্রথম নাটক :)

: bar 124 EMIT ;

: delimline ( width -- )
    bar
    3 * 0 DO 45 EMIT LOOP
    bar CR
;

: bookline ( width books -- )
    bar
    DUP 0 DO bar 88 EMIT bar LOOP
    2DUP = IF
        DROP DROP
    ELSE
        - 0 do 3 SPACES LOOP
    THEN
    bar CR
;

: shelf ( width books -- )
    DUP 0 = IF
        DROP DROP
    ELSE
        OVER delimline
        3 0 DO OVER OVER bookline LOOP
        DROP delimline
    THEN
;

: stack ( width books -- )
    CR
    OVER OVER OVER MOD shelf
    OVER /
    DUP 0 = IF
        DROP DROP
    ELSE 
        0 DO DUP DUP shelf LOOP
    THEN
;

6 2 stack
2 6 stack
3 5 stack
4 4 stack

এটি অনলাইন চেষ্টা করুন!

আউটপুট

| ------------------ |
|| এক্স || এক্স | |
|| এক্স || এক্স | |
|| এক্স || এক্স | |
| ------------------ |

| ------ |
|| এক্স || এক্স ||
|| এক্স || এক্স ||
|| এক্স || এক্স ||
| ------ |
| ------ |
|| এক্স || এক্স ||
|| এক্স || এক্স ||
|| এক্স || এক্স ||
| ------ |
| ------ |
|| এক্স || এক্স ||
|| এক্স || এক্স ||
|| এক্স || এক্স ||
| ------ |

| --------- |
|| এক্স || এক্স | |
|| এক্স || এক্স | |
|| এক্স || এক্স | |
| --------- |
| --------- |
|| এক্স || এক্স || এক্স ||
|| এক্স || এক্স || এক্স ||
|| এক্স || এক্স || এক্স ||
| --------- |

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