আমাকে একটি বেড়া করুন!


15

চ্যালেঞ্জ

এটি একটি সহজ চ্যালেঞ্জ। প্রদত্ত দুটি ধনাত্মক পূর্ণসংখ্যা w এবং hপ্রস্থে একটি ASCII বেড়া তৈরি wএবং উচ্চতা h। নিম্নলিখিত নিয়ম ব্যবহার করে বেড়াটি তৈরি করা উচিত:

  • +চরিত্র একটি পোস্ট উপস্থাপিত করবে।
  • -চরিত্র বেড়া প্রস্থ প্রতিনিধিত্ব করতে ব্যবহার করা হবে।
  • |বেড়া উচ্চতা প্রতিনিধিত্ব করতে ব্যবহার করা হবে।
  • ঠিক তিনটি -অক্ষর আউটপুট হওয়ার পরে একটি +অক্ষর অবশ্যই আউটপুট করা উচিত । চারটি কোণ বাদে অন্য যে কোনও সময় আপনি আউটপুট +অবৈধ হবেন। বাম বা ডান (উদাহরণ দেখুন) থেকে শুরু করে আপনাকে এই নিয়মটি অনুসরণ করার অনুমতি দেওয়া হয়েছে তবে আপনাকে অবশ্যই ধারাবাহিক হতে হবে।
  • ঠিক দুটি |অক্ষর আউটপুট হওয়ার পরে একটি +অক্ষর অবশ্যই আউটপুট করা উচিত । চারটি কোণ বাদে অন্য যে কোনও সময় আপনি আউটপুট +অবৈধ হবেন। উপরের বা নীচ থেকে শুরু করে আপনাকে এই বিধি অনুসরণ করার অনুমতি দেওয়া হয়েছে (উদাহরণগুলি দেখুন) তবে আপনাকে অবশ্যই ধারাবাহিক হতে হবে।
  • প্রতিটি বেড়াতে ঠিক চারটি কোণ থাকবে এবং প্রতিটি কোণটি একটি দিয়ে উপস্থাপিত হবে +

অন্য কথায়: প্রতি তিনটি -অক্ষরে, আপনাকে অবশ্যই আউটপুট করতে হবে +। এবং প্রতি দুটি |অক্ষরে, আপনাকে অবশ্যই আউটপুট করতে হবে +

আপনি ধরে নিতে পারেন যে বেড়াটি সর্বদা একটি আয়তক্ষেত্র হবে এবং এটি উভয়ই wএবং hকখনই এর চেয়ে বড় 100বা কম হবে না 1। ট্রেলিং এবং / বা পূর্ববর্তী সাদা স্থান অনুমোদিত।

উদাহরণ / পরীক্ষার কেস

w = 1
h = 1

+-+ 
| |
+-+


w = 3
h = 2

+---+
|   |
|   |
+---+


w = 5
h = 7

+---+--+ or +--+---+
|      |    |      |
|      |    +      +
+      +    |      |
|      |    |      |
|      |    +      +
+      +    |      |
|      |    |      |
|      |    +      +
+      +    |      |
|      |    |      |
+---+--+    +--+---+

w = 10
h = 5

+---+---+---+-+  or +-+---+---+---+
|             |     |             |
|             |     +             +
+             +     |             |
|             |     |             |
|             |     +             +
+             +     |             |
|             |     |             |
+---+---+---+-+     +-+---+---+---+


w = 4
h = 4

+---+-+ or +-+---+
|     |    |     |
|     |    |     |
+     +    +     +
|     |    |     |
|     |    |     |
+---+-+    +-+---+

বিধি



3
আমি কি বুঝতে পারি যে সেখানে দু'জনের +স্পর্শ নাও থাকতে পারে ?
xnor

@ এক্সনর হ্যাঁ, এটি সঠিক।
খ্রিস্টান ডিন

3
দারুণ প্রথম চ্যালেঞ্জ।
xnor

1
পছন্দ করুন এটি আমার বিধি তৈরি করার সময় আমার মনে ছিল না। আমি কেন +-+-+-+-+-+অবৈধ তা জানিয়ে একটি বিধি যুক্ত করেছি । বিভ্রান্তির জন্য দুঃখিত.
খ্রিস্টান ডিন

উত্তর:


9

সি, 131 বাইট

#define L for(i=0,j=w;j;)putchar(i++%4?--j,45:43);puts("+")
f(w,h,i,j,c){L;for(j=1;h;printf("%c%*c\n",c,i,c))c=j++%3?--h,124:43;L;}

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

ব্যাখ্যা:

// The first and the last line are always similar, so let's use a macro
// to avoid code duplication.
#define L

// Let's initialize 'i' and 'j'. 'i' will be used to keep track of which
// character ('+' or '-') we should print, whereas 'j' starts from the
// input width and the loop terminates when 'j' reaches zero.
for(i=0,j=w;j;)

// We post-increment 'i' and take a modulo 4 of its previous value.
// If i%4 == 0, we print '+' (ASCII 43), otherwise we decrement 'j'
// and print '-' (ASCII 45).
putchar(i++%4?--j,45:43);

// After the loop we print one more '+' and newline.
puts("+")

// The function declaration which takes the two input parameters, and
// also declares three integer variables. These three variables could
// also be declared as global variables with the same bytecount.
f(w,h,i,j,c)

// The start of the function body. We use the macro 'L' to print the 
// first line along with a newline.
{L;

// This loop prints all the lines between the first and the last. 'j'
// keeps track of when we should output a '+' instead of a '|'. 'h',
// which is the input parameter for height, serves as a terminator
// for the loop as it reaches zero.
for(j=1;h;<stuff missing from here>)

// We post-increment 'j' and check if its previous value is divisible
// by three, and if it isn't, we decrement 'h' and assign 124 (ASCII
// value for '|') to 'c'. Otherwise we assign '+' (ASCII 43) to 'c'.
c=j++%3?--h,124:43;

// The following is inside the 'increment' part of the 'for' loop.
// We print the character corresponding to the value of 'c', then
// the same character again, but padded with i-1  spaces before it 
// ('i' hasn't been touched since the first loop, so it still stores
// the length of the first line), then a newline.
printf("%c%*c\n",c,i,c)

// Lastly we print the first line again using the same macro 'L'.
L;}

5

পাইথন 3 , 140 137 128 119 106 105 বাইট

def f(w,h):a=~-w//3-~w;b=("+---"*w)[:a]+'+';print(b,*[i+' '*~-a+i for i in"||+"*h][:h+~-h//2],b,sep='\n')

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


2
এটি এখন দীর্ঘ তবে সমস্যাটি স্থির হয়েছে।
গ্যারেথপিডাব্লু

1
আপনি শেষ অংশের মধ্যে inএবং মধ্যবর্তী স্থান সরিয়ে একটি বাইট সংরক্ষণ করতে পারেন [w+1+(w-1)//3]]
খ্রিস্টান ডিন

1
পিপিসিজিতে আপনাকে স্বাগতম! আপনি স্থানটিও সরাতে পারেন '\n') for। এছাড়াও, আপনি পরিবর্তন করতে পারেন (w-1)থেকে ~-wযা থেকে ইউনারী অপারেটর বাইনারি বেশী চেয়ে বেশি প্রাধান্য আপনি প্রথম বন্ধনী অপসারণ করতে পারবেন। (h-1)-> ~-hএবং (a-1)-> এর জন্য একই ~-aঅনলাইনে এটি ব্যবহার করে দেখুন - 128 বাইট
musicman523

1
আপনার সমস্ত আউটপুট মুদ্রিত হওয়ার পরে, def f(w,h)একই দৈর্ঘ্যের সমান lambda w,h, তবে আপনাকে যদি আপনার কোডটি আরও গল্ফ করতে সহায়তা করে তবে আপনাকে একাধিক লাইন ব্যবহার করতে দেয়
musicman523

1
a=~-w//3-~w;1 বাইট সংরক্ষণ করতে
ফিলিপ নারদী বাটিস্তা

4

গণিত, 165 বাইট

v=Column;d[w_,y_,m_,n_]:=Table[If[Mod[i,y]==0&&i!=w,m,n],{i,w}];(a="+"<>d[#,3,"-+","-"]<>"+";b=v@d[#2,2,"|\n+","|"];v[{a,Row[{b,""<>Table[" ",#+Floor[#/3]],b}],a}])&

4

পিপ , 38 বাইট

কোডের 37 বাইট, -nপতাকাটির জন্য +1 ।

Ph:'-Xa<>3JW'+PsX#h-2WR:'|Xb<>2J'+^xh

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

ব্যাখ্যা

                         a,b are cmdline args; s is space; x is empty string (implicit)
Ph:'-Xa<>3JW'+
   '-Xa                  String of hyphens of length a
       <>3               grouped into substrings of (maximum) length 3
          JW'+           Join on +, also wrapping the result in +
 h:                      Assign that string to h (mnemonic: "header")
P                        and print it (with newline)

PsX#h-2WR:'|Xb<>2J'+^xh
          '|Xb           String of pipes of length b
              <>2        grouped into substrings of (maximum) length 2
                 J'+     joined on +
                    ^x   and split on empty string (i.e. converted to list of chars)
 sX#h-2                  String of len(h)-2 spaces
       WR:               Wrap the spaces with the list of chars
                         Note 1: WR operates itemwise on lists, so the result is a list,
                          each item of which consists of the spaces wrapped in an item
                          from the list of chars
                         Note 2: the : compute-and-assign meta-operator is here abused
                          to give WR: lower precedence than J and ^ and avoid parentheses
P                        Print that list, newline-separated (-n flag)
                      h  Autoprint the header a second time as the footer

4

কাঠকয়লা, 47 45 40 বাইট

F⁴«¿﹪ι³FIη↓⁺×+¬﹪κ²|FIθ⁺×+¬﹪κ³-P+¿⁼ι¹J⁰¦⁰

ব্যাখ্যা: প্রতিটি পক্ষের -গুলি / |গুলি আঁকিয়ে কাজ করে , +যেখানে প্রয়োজন সেখানে সন্নিবেশ করানো , তারপরে একটি দিয়ে সমাপ্তি+ । উপরের এবং ডান দিকগুলি আঁকার পরে, বাম এবং নীচের দিকগুলি কার্যকরভাবে অঙ্কন করে, বিপরীত ক্রমে তাদের আঁকতে শুরুতে পিছনে লাফ দেয়। ঘূর্ণমান প্রতিসাম্য অনুমোদিত কিনা তা আমি জানি না, তবে যদি তা হয় তবে 27 25 বাইটের জন্য:

F⁴«FI⎇﹪ι²ηθ⁺×+¬﹪κ⁻³﹪ι²-⟲T

উপরের দিকটি অঙ্কন করে উপরের দিকটি আঁকুন, বাম দিকে ঘোরান, ডান দিকটি আঁকুন, আবার ঘোরান এবং তারপরে নীচের এবং বাম দিকগুলি বিপরীতে আঁকতে পুনরাবৃত্তি করে চূড়ান্ত দিকে নিয়ে যান।


1
@ ল্যাকিয়ুনুন সর্বশেষে আমি পাইথকে পরাজিত করে কিছু হীরার দ্বিগুণ করছিলাম এবং তারপরেও এটি কেবল ছোট ছিল।
নীল

4

জাভাস্ক্রিপ্ট (ES6), 133 132 বাইট

w=>h=>(a="-".repeat(w).replace(/--?-?/g,"+$&")+`+`)+(`
|`.padEnd(a.length)+`|`).repeat(h).replace(/(\|( +)\|\n)\1/g,`$&+$2+
`)+`
`+a

সংবাহন সিনট্যাক্স ইনপুট লাগে: f(width)(height)

পরীক্ষার স্নিপেট

f=
w=>h=>(a="-".repeat(w).replace(/--?-?/g,"+$&")+`+`)+(`
|`.padEnd(a.length)+`|`).repeat(h).replace(/(\|( +)\|\n)\1/g,`$&+$2+
`)+`
`+a
O.innerHTML=f(W.value=5)(H.value=10)
<div oninput="O.innerHTML=f(+W.value)(+H.value)">
W <input id=W type=number min=1> H <input id=H type=number min=1>
</div>
<pre id=O>



2

জাভা (ওপেনজেডিকে 8) , 178 177 বাইট

w->h->{int i=0;String t="",m,r;for(;i<w;)t+=i++%3<1?"+-":"-";r=t+="+\n";m=t.format("|%"+(t.length()-3)+"s|\n","");for(i=0;i<h;)r+=i++%2<1&i>1?m.replace("|","+")+m:m;return r+t;}

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

-1 বাইট @ কেভিন ক্রুজসেনকে ধন্যবাদ thanks


প্যারামিটারগুলি কারি করে আপনি একটি বাইট সংরক্ষণ করতে পারেন: w->h-> এটি এখানে চেষ্টা করে দেখুন।
কেভিন ক্রুইজসেন

হ্যাঁ, আমি ক্রমাগত কারিটিংয়ের কথা ভুলে যাই ... এটি প্রাকৃতিক বলে মনে হয় এমন কিছু নয়: s
অলিভিয়ের গ্রাগোয়ার

1

কাঠকয়লা , 47 45 37 বাইট

A…+---÷⁺²×⁴N³αA…+||÷⁺¹×³N²βPα↓βα+↖↑⮌β

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

  • স্ট্রিং তৈরির লক্ষণগুলি নিয়ে খেলার পরে 2 বাইট সংরক্ষণ করা হয়েছে।
  • 8 বাইট নীলকে বাঁচিয়েছে, যিনি বেড়গুলির দৈর্ঘ্য গণনা করার জন্য আরও সহজ উপায় নিয়ে এসেছেন।

@ নীল এর থেকে আলাদা একটি পদ্ধতির : প্রথমে আমি স্ট্রিংগুলি তৈরি করি αএবং βঅনুভূমিক এবং উল্লম্ব সীমানায় Rangeঅক্ষরগুলি ধারণ করে অপারেটরটি ব্যবহার করে যা কোনও নির্দিষ্ট দৈর্ঘ্য না হওয়া পর্যন্ত একটি স্ট্রিংয়ের পুনরাবৃত্তি তৈরি করে। তারপরে আমি এগুলি যথাযথ ক্রমে মুদ্রণ করেছি:

  • মুদ্রণ moving কার্সার সরানো ছাড়াই।
  • মুদ্রণ করুন β নীচের দিকে।
  • মুদ্রণ α।
  • একটি "+" মুদ্রণ করুন।
  • কার্সারটিকে উপরে এবং বামে সরান।
  • মুদ্রণ β উপরের দিকে, বিপরীত।

একটি ভার্বোজ সংস্করণে লিঙ্ক ।


1
আমার সম্পর্কে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ Range, যে আমার দ্বিতীয় পদ্ধতির উপর 3 বাইট সঞ্চয়!
নীল

@ নিল এটি দুর্দান্ত কারণ আমি আপনাকে কেবল ছাপিয়েছি এবং আমি এটি বিশ্বাস করতে পারি না। :-)
চার্লি

1
আরও ভালো হয়, আমি তোমার এক্সপ্রেশন নিখুত, 8 বাইট সংরক্ষণ পরিচালিত ছিল: A…+---÷⁺²×⁴N³αA…+||÷⁺¹×³N²βPα↓βα+↖↑⮌β
নিল

নিল ওয়া যেমন অপ্টিমাইজেশন। খুব কাঠকয়লা।
চার্লি

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