এএসসিআইআই রম্বিক গ্রিড


27

নীচের প্যারামিটারগুলি দিয়ে রম্ব্বির সমন্বিত একটি ASCII গ্রিড তৈরি করতে বাইট গণনা দ্বারা পরিমাপ করা সংক্ষিপ্ততম কোডটি লিখুন:

  • মি - এক সারিতে সম্পূর্ণ রোম্বি সংখ্যা
  • n - সারি সংখ্যা
  • s - ক্ষুদ্রতম রম্বসের পাশে
  • আর - নেস্টিংয়ের স্তর - "বেস ওপেনগুলি" (যা গ্রিডের ছেদগুলির মধ্যে fonud হয়) এর মধ্যে কতগুলি রোম্বি রয়েছে?

উদাহরণ

1. Input: 5 3 1 0
Output:

/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/

A 5x3 grid of rhombi with side 1, no nesting

2. Input: 3 2 2 0
Output:

 /\  /\  /\
/  \/  \/  \
\  /\  /\  /
 \/  \/  \/ 
 /\  /\  /\
/  \/  \/  \
\  /\  /\  /
 \/  \/  \/ 

A 3x2 grid of rhombi with side 2, no nesting

3. Input: 5 2 1 2
Output:

///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///

A 5x2 grid of rhombi with side 1 (the smallest rhombus), level of nesting is 2

4. Input: 4 2 2 1
Output:

 //\\  //\\  //\\  //\\ 
///\\\///\\\///\\\///\\\
//  \\//  \\//  \\//  \\
\\  //\\  //\\  //\\  //
\\\///\\\///\\\///\\\///
 \\//  \\//  \\//  \\//   
 //\\  //\\  //\\  //\\ 
///\\\///\\\///\\\///\\\
//  \\//  \\//  \\//  \\
\\  //\\  //\\  //\\  //
\\\///\\\///\\\///\\\///
 \\//  \\//  \\//  \\//   

A 4x2 grid of rhombi with side 2 with level of nesting 1 

5. Input: 4 2 3 3
Output:

  ////\\\\    ////\\\\    ////\\\\    ////\\\\
 /////\\\\\  /////\\\\\  /////\\\\\  /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
/////  \\\\\/////  \\\\\/////  \\\\\/////  \\\\\
////    \\\\////    \\\\////    \\\\////    \\\\
\\\\    ////\\\\    ////\\\\    ////\\\\    ////
\\\\\  /////\\\\\  /////\\\\\  /////\\\\\  /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
 \\\\\/////  \\\\\/////  \\\\\/////  \\\\\/////  
  \\\\////    \\\\////    \\\\////    \\\\////  
  ////\\\\    ////\\\\    ////\\\\    ////\\\\
 /////\\\\\  /////\\\\\  /////\\\\\  /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
/////  \\\\\/////  \\\\\/////  \\\\\/////  \\\\\
////    \\\\////    \\\\////    \\\\////    \\\\
\\\\    ////\\\\    ////\\\\    ////\\\\    ////
\\\\\  /////\\\\\  /////\\\\\  /////\\\\\  /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
 \\\\\/////  \\\\\/////  \\\\\/////  \\\\\/////  
  \\\\////    \\\\////    \\\\////    \\\\////  

A 4x2 grid of rhombi with side 3, level of nesting 3

প্রয়োজনীয় যেখানে প্রান্ত এবং কোণে আংশিকভাবে দৃশ্যমান রম্বি প্রদর্শন নিশ্চিত করুন।


1
@ অ্যাডমবার্কবার্ক "বাসা বাঁধার" দ্বারা আমি বোঝাচ্ছি গ্রিডের ছেদগুলির মধ্যে পাওয়া বেসের মধ্যে রম্ব্বির সংখ্যা লেখা আছে।
— গ্যালেন ইভানভ


@ লুইস মেন্ডো - হ্যাঁ, এটি আমার কাজের সাথে স্পষ্টভাবে সম্পর্কিত।
— গ্যালেন ইভানভ

@ স্টিভি গ্রিফিন: কোডগলফ.স্ট্যাকেক্সেঞ্জাওয়েজ / সেকশনস / 146747/… - তৃতীয় পরীক্ষার কেস
— সার্জিওল

5
ওহ, আমি আমার বালিশটি কীভাবে মিস করছি!
— স্টিভি গ্রিফিন

উত্তর:


17

এসওজিএল ভি0.12 , 20 বাইট

ā.I∫e+H╚╬8}:±№╬8╬¡∙*

এখানে চেষ্টা করুন! তারা উদাহরণগুলিতে যা রয়েছে তার বিপরীত ক্রমে ইনপুট নেয় - r, s, n, m।

ব্যাখ্যা:

ā                     push an empty array - canvas
 .I∫      }           for each in range(input) (1-indexed)
    e+                  add the second input
      H                 decrement
       ╚                create a diagonal of that size
        ╬8              insert into the canvas
           :          create a duplicate of the canvas
            ±№        reverse it vertically and horizotally
              ╬8      insert that into the canvas
                έ    quad-palindromize
                  ∙   multiply vertically by the next input
                   *  multiply horizontally by the next input

2
এটি কেবল আশ্চর্যজনক, আপনি কীভাবে এই জাতীয় প্রোগ্রামকে 20 বাইটে সংকলন করেন।
— এরিক দ্য আউটগল্ফার

1
এই চমকপ্রদ 28 বাইট দ্বারা
— কাঠকয়াল

এটা সত্যিই চিত্তাকর্ষক!
— গ্যালেন ইভানভ

@ মিঃ এক্সকোডার এখন 19 বাইট। তবে তারপরে আমি বিল্টিনগুলির বিরুদ্ধে ∙*...
— নিল

1
ভেক্টরাইজড স্ট্রিং পুনরাবৃত্তি চারকোলে যথাযথভাবে সংক্ষিপ্ত; আমি যদি হীরাটির একটি স্ট্রিং উপস্থাপনা তৈরি করতে পারি তবে এটির পুনরাবৃত্তি করতে আমার কেবল 6 বাইট খরচ পড়বে। দুর্ভাগ্যক্রমে এটি করতে আমার 50 বাইট লাগে। অন্যদিকে, হীরা আঁকতে আমাকে কেবল 17 বাইট লাগে, এসওজিএল থেকে 1 আরও বেশি ... তবে ক্যানভাসকে গুণতে 20 বাইট লাগে takes
— নিল

8

কাঠকয়লা , 48 39 37 বাইট

UO⊕Iε\F⊖IζC¹¦¹‖ML≔⊗⁺IζIεδF⊖NCδ⁰F⊖NC⁰δ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

UO⊕Iε\

আকারের একটি বর্গ আঁকুন r + 1। এটি আকারের নেস্টেড হীরার চতুর্থাংশ।

F⊖IζC¹¦¹

বর্গক্ষেত্র 1 বর্গক্ষেত্রটি ডান এবং নিচে s - 1বারে এটি সঠিক আকারে পেতে কপি করুন ।

‖ML

এটি একটি পূর্ণ নেস্টেড হীরা হয়ে প্রতিফলিত করুন।

≔⊗⁺IζIεδ

এই নেস্টেড ডায়মন্ডের আকার গণনা করুন।

F⊖NCδ⁰

ডায়মন্ডটি সঠিক m - 1সময়ে অনুলিপি করুন ।

F⊖NC⁰δ

হীরাটি নীচের দিকে কপি করুন n - 1।


8

পাইথন 2 , 160 159 158 বাইট

-1 বাইট জোনাথন ফ্রেচের জন্য ধন্যবাদ

m,n,s,r=input()
l=~-s*' '+'/'*(r-~r)+~-s*' '
for x in range(n*2):print'\n'.join(m*(l[i:i+s+r]+l.replace(*'/\\')[i:i+s+r][::-1])for i in range(r+s))[::1-x%2*2]

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

এটি এই সত্যটি ব্যবহার করে যে রম্বসের নীচের অংশটি শীর্ষ বিপরীতমুখী ( [::-1]), পুনরাবৃত্তি range(n*2)এবং ~x%2*2-1এটি শীর্ষ বা নীচের অংশে নিয়ন্ত্রণ করতে ব্যবহার করে ।
উপরের (এবং নীচের অংশের) জন্য ডান দিকটি কেবল বাম দিকটি উল্টানো এবং এর সাথে প্রতিস্থাপন /করা \-> l.replace(*'/\\')..[::-1]
প্যাটার্ন তৈরি করতে / বাসা বাঁধার ~-s*' '+'/'*(1+r*2)+~-s*' 'জন্য একটি স্ট্রিং তৈরি করতে ব্যবহৃত হয় যাতে /// এটি পুনরায় এবং কাটা হবে:

   '|  //|/  '  
  ' | ///|  '  
 '  |/// | '  
'  /|//  |'  

আমার মনে হয় (1+r*2)হতে পারে (r-~r)।
— জোনাথন ফ্রেচ

7

জুলিয়া 0.6 , 190 বাইট

g(n,m,s,r)=(s+=r+1;f(i,j,u=mod(i-j+r,2s),v=mod(j+i+r,2s))=(" \\/")[abs(u-r)<abs(v-r)?1+(u<=2r):1+2(v<=2r)];
for i=1:2(s-1)m println((f(i+(i-1)÷(s-1),s+j+(j-1)÷(s-1))for j=1:2(s-1)n)...)end)

এটি একটি কার্যকরী সমাধান যা i,jপ্রতীকটি প্রদর্শিত হবে তা প্রতিটি সূচী জুটির গণনা করে ।

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

চিত্রণ

একটি গ্রিড দিয়ে শুরু করুন

f(i,j,u=mod(i,2s),v=mod(j,2s))=(" -|*")[1+(u==0)+2(v==0)]
for i=1:2(s-1)m println((f(i-1,j)for j=1:2(s-1)n)...)end

---------*---------*----
         |         |    
         |         |    
         |         |    
         |         |    
         |         |    
         |         |    
         |         |    
         |         |    
         |         |    
---------*---------*----
         |         |    
         |         |    
         |         |    
         |         |    
         |         |    

r > 0 ঘন লাইন মানে

f(i,j,u=mod(i+r,2s),v=mod(j+r,2s))=(" -|*")[1+(u<=2r)+2(v<=2r)]
for i=1:2(s-1)m println((f(i,j)for j=1:2(s-1)n)...)end

**-----*****-----*****--
**-----*****-----*****--
||     |||||     |||||  
||     |||||     |||||  
||     |||||     |||||  
||     |||||     |||||  
||     |||||     |||||  
**-----*****-----*****--
**-----*****-----*****--
**-----*****-----*****--
**-----*****-----*****--
**-----*****-----*****--
||     |||||     |||||  
||     |||||     |||||  
||     |||||     |||||  
||     |||||     ||||| 

মূল গ্রিডের কোন লাইনটি নিকটতম তা পরীক্ষা করে কোণগুলি পরিচালনা করুন

f(i,j,u=mod(i+r,2s),v=mod(j+r,2s))=(" -|")[abs(u-r)<abs(v-r)?1+(u<=2r):1+2(v<=2r)]
for i=1:2(s-1)m println((f(i,j)for j=1:2(s-1)n)...)end

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

একটি পরী আমাদের প্রতিটি s-1লাইন অপসারণ করতে বলে

f(i,j,u=mod(i+r,2s),v=mod(j+r,2s))=(" -|")[abs(u-r)<abs(v-r)?1+(u<=2r):1+2(v<=2r)]
for i=1:2(s-1)m println((f(i+(i-1)÷(s-1),s+j+(j-1)÷(s-1))for j=1:2(s-1)n)...)end

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

তির্যক ট্র্যাভারস এবং সম্পন্ন

f(i,j,u=mod(i-j+r,2s),v=mod(j+i+r,2s))=(" \\/")[abs(u-r)<abs(v-r)?1+(u<=2r):1+2(v<=2r)]
for i=1:2(s-1)m println((f(i+(i-1)÷(s-1),s+j+(j-1)÷(s-1))for j=1:2(s-1)n)...)end

 ///\\\  ///\\\  ///\\\ 
////\\\\////\\\\////\\\\
////\\\\////\\\\////\\\\
///  \\\///  \\\///  \\\
\\\  ///\\\  ///\\\  ///
\\\\////\\\\////\\\\////
\\\\////\\\\////\\\\////
 \\\///  \\\///  \\\/// 
 ///\\\  ///\\\  ///\\\ 
////\\\\////\\\\////\\\\
////\\\\////\\\\////\\\\
///  \\\///  \\\///  \\\
\\\  ///\\\  ///\\\  ///
\\\\////\\\\////\\\\////
\\\\////\\\\////\\\\////
 \\\///  \\\///  \\\/// 

3

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

f=
(m,n,s,r)=>[...Array((s+=r)*n*2)].map((_,i)=>[...Array(s*m*2)].map((_,j)=>i/s&1^j/s&1?`\\ `[g(j%s)]:`/ `[g(s-1-j%s)],g=j=>i%s-j>r|j-i%s>r).join``).join`
`
<div oninput=o.textContent=f(+m.value,+n.value,+s.value,+r.value)>
m: <input type=number min=0 id=m><br>
n: <input type=number min=0 id=n><br>
s: <input type=number min=0 id=s><br>
r: <input type=number min=0 id=r></div>
<pre id=o>

আউটপুট এর প্রতিটি ঘরে সরাসরি অক্ষর গণনা করে।


2

সিজেম, 44

q~:R+,_ff{-zR>}{_W%:~\+"\ /"f=}%_W%Wf%+*f*N*

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

ব্যাখ্যা:

q~           read and evaluate the input
:R+          save the last number in variable R, then add the last 2 numbers (s+r)
,_           make an array [0 1 … s+r-1] and duplicate it
ff{…}        make a matrix, calculating for each (x,y) pair from the 2 arrays:
  -z         abs(x-y)
  R>         compared with R (1 if greater, 0 if not)
{…}%         transform each row of the matrix:
  _W%        duplicate and reverse it
  :~         bitwise-NOT each element (0 → -1, 1 → -2)
  \+         prepend to the original row
  "\ /"f=    replace numbers with characters from this string (by index):
              0 → '\'; 1, -2 → ' '; -1 → '/'
              this generates the "/\" part
_W%          duplicate the matrix and reverse the rows
Wf%+         reverse each row, then append (by rows) to the original matrix
              this adds the "\/" part
*            repeat the matrix (by rows) n times
f*           repeat each row m times
N*           join the rows with newlines

2

সি # (.নেট কোর) , 167 বাইট

(c,r,s,n)=>{int w=s+n,i=0,j;var g="";for(;i<r*2*w;i++,g+="\n")for(j=0;j<c*2*w;){int y=i%w,q=(j/w+i/w+1)%2,p=~-w*q+j++%w*(1-2*q);g+=p>y+n|p<y-n?' ':"\\/"[q];}return g;}

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

আমি যে মাপটি পরিচালনা করেছিলাম তা দেখে আমি অবাক; আমি প্রাথমিকভাবে দীর্ঘতর সমাধানের আশা করছিলাম। এটি বলতে গিয়ে, আমি নিশ্চিত যে আমি মিস করেছি এমন অন্যান্য কৌশলও আছে।

DeGolfed

(c,r,s,n)=>{
    int w=s+n, // rhombus quadrant width, and height
        i=0, // string row
        j; // string column

    var g="";

    // go through every character row and column
    for(; i < r*2*w; i++, g += "\n")
        for(j = 0; j < c*2*w;)
        {
            int y = i % w, // vertical position in the quadrant
                q = ( j / w + i / w + 1) % 2, // Get the rhombus quadrant as a 0 or 1
                p = ~-w * q + j++ % w * (1-2*q); // horizontal position in quadrant. the value is either ascending or descending depending on the quadrant

            // select which character to use at this [i,j] position
            g += p > y + n | p < y - n ? ' ' : "\\/"[q];
        }

    return g;
}

1

পাইথন 2 , 201 189 বাইট

def f(m,n,s,r):Z=range(s+r);R=[r-~min(i,s+~i+r,min(s-1,r))for i in Z];L=[m*(' '*(s+~i)+'/'*R[i]+'  '*(i-r)+'\\'*R[i]+' '*(s+~i))for i in Z];print'\n'.join((L+[l[s+r:]+l[:s+r]for l in L])*n)

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

নীচের অংশটি শীর্ষের মতো একই, তবে স্থানান্তরিত হয়েছে:

Top:       /\/\/\
Bottom:     /\/\/\

জোনাথন ফ্রেচের জন্য 22 বাইট সংরক্ষণ করা


s-i-1হতে পারে s+~i, দুটি বাইট সংরক্ষণ করা। r+1+min(...হতে পারে r-~min(..., অন্য একটি সংরক্ষণ করা। L=[(...)*m forহতে পারে L=[m*(...)for, আরও একটি বাইট সংরক্ষণ করা।
— জোনাথন ফ্রেচ

L+=[...];print'\n'.join(L*n)print'\n'.join((L+[...])*n)অন্য বাইট সংরক্ষণ করতে পারে , 196 বাইট ফলস্বরূপ ।
— জোনাথন ফ্রেচ

১৯৫ বাইট , যদি একটিও প্রতিস্থাপন s+r-i-1করে s+~i+r।
— জোনাথন ফ্রেচ


বিকল্প 192 বাইট সংস্করণ বা 191 বাইট সংস্করণ ব্যবহার করে execস্ট্রিং ফর্ম্যাটিং।
— জোনাথন ফ্রেচ

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