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


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.