র‌্যান্ডম এএসসিআইআই আর্ট অফ দি ডে # 5: ডায়মন্ড টিলিংস


21

ম্যাশ আপ টাইম!

এটি আমার র‌্যান্ডম গল্ফ অফ দিবা এবং অপ্টিমাইজারের এএসসিআইআই আর্ট অফ দ্য সিরিজের উভয়েরই কিস্তি # 5 । এই চ্যালেঞ্জে আপনার জমা (গুলি) উভয় লিডারবোর্ডের (যা আপনি লিঙ্কযুক্ত পোস্টগুলি সন্ধান করতে পারেন) এর পক্ষে গণ্য হবে। অবশ্যই, আপনি এটি অন্য কোনও কোড গল্ফ চ্যালেঞ্জের মতো আচরণ করতে পারেন এবং কোনও সিরিজ সম্পর্কে মোটেই চিন্তা না করেই এর উত্তর দিতে পারেন।

হোল 5: ডায়মন্ড টিলিংস

একটি নিয়মিত ষড়্ভুজ সর্বদা এর মতো হীরা দিয়ে টাইল করা যেতে পারে:

আমরা এই টিলিংগুলির একটি ASCII শিল্প উপস্থাপনা ব্যবহার করব। পার্শ্ব-দৈর্ঘ্য 2 এর ষড়্ভুজ্যের জন্য, এখানে 20 টি রকম টিলিং রয়েছে:

   ____     ____     ____     ____     ____     ____     ____     ____     ____     ____  
  /\_\_\   /\_\_\   /\_\_\   /\_\_\   /_/\_\   /_/\_\   /\_\_\   /_/\_\   /_/\_\   /_/\_\ 
 /\/\_\_\ /\/_/\_\ /\/_/_/\ /\/_/\_\ /\_\/\_\ /\_\/_/\ /\/_/_/\ /\_\/\_\ /\_\/_/\ /_/\/\_\
 \/\/_/_/ \/\_\/_/ \/\_\_\/ \/_/\/_/ \/\_\/_/ \/\_\_\/ \/_/\_\/ \/_/\/_/ \/_/\_\/ \_\/\/_/
  \/_/_/   \/_/_/   \/_/_/   \_\/_/   \/_/_/   \/_/_/   \_\/_/   \_\/_/   \_\/_/   \_\/_/ 
   ____     ____     ____     ____     ____     ____     ____     ____     ____     ____  
  /_/_/\   /\_\_\   /_/\_\   /_/_/\   /_/\_\   /_/\_\   /_/_/\   /_/_/\   /_/_/\   /_/_/\ 
 /\_\_\/\ /\/_/_/\ /_/\/_/\ /\_\_\/\ /\_\/_/\ /_/\/_/\ /_/\_\/\ /\_\_\/\ /_/\_\/\ /_/_/\/\
 \/\_\_\/ \/_/_/\/ \_\/\_\/ \/_/\_\/ \/_/_/\/ \_\/_/\/ \_\/\_\/ \/_/_/\/ \_\/_/\/ \_\_\/\/
  \/_/_/   \_\_\/   \_\/_/   \_\/_/   \_\_\/   \_\_\/   \_\/_/   \_\_\/   \_\_\/   \_\_\/ 

পাশের দৈর্ঘ্য দেওয়া N, Nএলোমেলোভাবে আপনার পাশের দৈর্ঘ্যের ষড়্ভুজগুলির জন্য এই জাতীয় একটি টাইলিং তৈরি করা উচিত । সঠিক বিতরণে কিছু আসে যায় না, তবে প্রতিটি টাইলিং অবশ্যই শূন্য-সম্ভাব্যতার সাথে ফিরে আসতে হবে।

কারণ N ≤ 4, আপনার জমা দেওয়ার সময়টি অবশ্যই কমপক্ষে ৮০% সময়ের মধ্যে এক মিনিটের মধ্যে একটি টাইলিং তৈরি করতে হবে এবং কমপক্ষে ৮০% টিলিংস সম্ভাব্যভাবে 1 মিনিটের মধ্যে তৈরি করতে হবে। বেশিরভাগ পদ্ধতির এই নিয়মটি সম্পর্কে চিন্তা করতে হবে না (এটি খুব লেনিয়েন্ট) - এটি কেবল খুব নিষ্পাপ প্রত্যাখ্যান-ভিত্তিক অ্যালগোরিদমকে বাতিল করে দেওয়া হবে যেগুলি একটি টাইলিং হওয়ার আগ পর্যন্ত স্বেচ্ছাচারী স্ট্রিং উত্পন্ন করে।

আপনি জানতে চাইতে পারেন যে প্রদত্ত N এর জন্য সম্ভাব্য টিলিংয়ের মোট সংখ্যা OEIS A008793 এ পাওয়া যাবে ।

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখে STDIN (বা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিতে পারেন এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে আউটপুট উত্পাদন করতে পারেন।

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

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম জমা (বাইটে) জিতেছে। এবং অবশ্যই, ব্যবহারকারী প্রতি সংক্ষিপ্ততম জমাটিও সিরিজের সামগ্রিক লিডারবোর্ডে প্রবেশ করবে।

লিডারবোর্ড

প্রতিটি সিরিজের প্রথম পোস্ট একটি লিডারবোর্ড উত্পন্ন করে।

আপনার উত্তরগুলি প্রদর্শিত হবে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে প্রতিটি উত্তর শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

(ভাষাটি বর্তমানে দেখানো হয়নি, তবে স্নিপেটের প্রয়োজন এবং এটি বিশ্লেষণ করতে পারে এবং ভবিষ্যতে আমি একটি উপ-ভাষা লিডারবোর্ড যুক্ত করতে পারি))


3
কেবলমাত্র আমিই কে থ্রিডি-তে উদাহরণ চিত্রটি দেখতে থাকি?
LegionMammal978

3
পছন্দ করুন ;) (এবং সম্ভবত চ্যালেঞ্জের কাছে যাওয়ার জন্য এটিও একটি ভাল উপায়
মার্টিন এন্ডার

For N ≤ 4, your submission must produce a tiling within 1 minute at least 80% of the time.খুব সহজ: ৮০% সময় একই, বেসিক টাইলিং, অন্যথায় আমি যা চাইছি তার মধ্যে আরও একটি টাইলিং পাই
edc65

@ edc65 ভাল পয়েন্ট, আমাকে এটি আবার নতুন করে বলুন।
মার্টিন এন্ডার

উত্তর:


10

সিজেম, 105 বাইট

ri:A" __"e*A,2f*:B,[W1]{J+B:):B,{N1$S*"\/"J%A2*4$-:D*
0{;B{_1&!2mr+J*m1e>D(2*e<}%__:)&}g:B{'_t}/+@J+}*}fJ;

স্ক্রোলিং এড়াতে নিউলাইন যুক্ত হয়েছে। এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

এই দ্রবণটি প্রতিটি লাইনকে জিগজ্যাগ হিসাবে শুরু করে, তারপরে পূর্ববর্তী লাইনের অবস্থান এবং কয়েকটি নিয়মের উপর ভিত্তি করে এন এটির উপর নীচে রাখে। অক্ষরের একটি সরল 2D ম্যাট্রিক্স হিসাবে আউটপুটটি দেখার সময় আমি পর্যবেক্ষণের একটি সিরিজ থেকে এটি পেয়েছি:

  • প্রতিটি লাইনের ঠিক এন আন্ডারস্কোর রয়েছে
  • পুরোপুরি পুনরাবৃত্তি করা জিগজ্যাগ প্যাটার্নটি তৈরি করতে আন্ডারস্কোরগুলি / বা with দিয়ে প্রতিস্থাপন করা যেতে পারে ( /\উপরের অর্ধে, \/নীচের অর্ধেকে)
  • আন্ডারস্কোরগুলি স্পর্শ করতে পারে না এবং অন্য আন্ডারস্কোর সংলগ্ন হতে পারে না
  • পরবর্তী লাইনে যাওয়ার সময়, প্রতিটি আন্ডারস্কোরের অবস্থান -1, 0 বা 1 দ্বারা পরিবর্তিত হয়
  • এর চেয়ে বেশি, /_/কেবল -1 বা 0 \_\দ্বারা পরিবর্তিত হতে পারে এবং কেবল 0 বা 1 দ্বারা পরিবর্তিত হতে পারে
  • প্রাথমিক আন্ডারস্কোর পজিশনের জন্য আমরা হয় কোনও "_ "প্যাটার্ন বা প্যাটার্ন ব্যবহার করতে পারি " _", উভয়ই ভাল
  • উপরের নিয়মগুলি সমস্ত টিলিংগুলি অর্জনের জন্য যথেষ্ট

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

ri:A" __"e*       read the input (A) and generate the top line
A,2f*:B           make an array [0 2 4 ... 2A-2] and store in B
                  these are the initial positions for the underscores
,                 B's length = A, used as the initial number of leading spaces
                  let's call it C
[W1]{…}fJ         for J in [-1 1] (top half, bottom half)
  J+              add J to C
  B:):B           increment the underscore positions (adjustment before each half)
  ,{…}*           repeat A times
    N1$S*         add a newline and C spaces
    "\/"J%        take "\/" and reverse it if J=-1 (zigzag pattern)
    A2*4$-:D*     calculate D=A*2-C and repeat the pattern
    0             dummy value (for the next loop)
    {…}g          do-while
      ;B          pop last value and push B
      {…}%        apply block to each item (say x)
        _1&!      duplicate x and calculate !(x&1) (for /_/ vs \_\)
        2mr+      randomly add 0 or 1
        J*m       multiply by J and subtract from x
        1e>       limit the minimum value to 1
        D(2*e<    and the maximum value to 2*(D-1)
      __:)&       check if the modified array has any adjacent values
    :B            store the new positions in B
    {'_t}/        place underscores over the zigzag pattern
    +@J+          bring C to the top and add J to it
;                 pop C

পুরানো "3 ডি" সংস্করণ, 189 বাইট:

ri:A" __"e*aA4*S*aA2**+[0-2XXW1]:C;"/\_\\\/_/":D;A3m*{{C2/.f*:.+~
A(2*+:V;A+:U;2{UI+1$1$=4{_V+D4/I=@=t}/t}fI}:F~}/[0Y1WWW]:C;
"/_/\\\_\/":D;AaA*:B;A{A[_{_BI=e<)mr}fI]:B;{BQ={[PQR]F}fR}fQ}fPN*

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


অসাধারণ কাজের জন্য +1 এবং আরও একটি ভোট আপনাকে 10 কে রেপিতে রাখে তবে বেশিরভাগই দুর্দান্ত কাজের জন্য। (ওহে ওহে, এটি দেখুন। 10 কে :) অভিনন্দন :))
অ্যালেক্স এ

নিদর্শন উপর একটি দুর্দান্ত বিশ্লেষণ! আমি আমার উত্তরের জন্য এটি ব্যবহার করব।
আনাতলিগ

6

পাইথন 2, 337 335 324 318 311 300 296 বাইট

from random import*
n=input()
R=range(n*2)
b=[]
l=[]
for i in R:o=abs(i-n)-(i<n);b+=[o];l+=[list(' '*o+'\//\\'[i<n::2]*(n*2-o))]
for i in R[:n]:
 o=1;p=n+i*2
 for j in R:r=randint(0,p<n*3+i*2-j);p+=(r or-1)*(o==r);q=p<=b[j];o=r|q;p+=q;l[j][p]='_';b[j]=p+1
for s in[' '*n+'__'*n]+l:print''.join(s)

ধারণাটি হ'ল প্রথমে হিরাকের একটি ষড়ভুজ তৈরি করা উচিত:

  ____
 /\/\/\
/\/\/\/\
\/\/\/\/
 \/\/\/

এবং তারপরে এটি নীচের দিকের আন্ডারস্কোরগুলির পাথ দিয়ে পূর্ণ করুন:

  ____                          ____
 /_/\/\                        /\_\/\
/_/\/\/\    or maybe this:    /\/_/\/\
\_\/\/\/                      \/_/\/\/
 \_\/\/                        \_\/\/

সমস্ত পাথ যুক্ত করে চূড়ান্ত ফলাফলটি এরপরে এমন কিছু দেখবে:

  ____                          ____  
 /_/\_\                        /\_\_\ 
/_/\/_/\    or maybe this:    /\/_/\_\
\_\/_/\/                      \/_/\/_/
 \_\_\/                        \_\/_/ 

বেশিরভাগ কোডই এই পথগুলি সীমানার বাইরে চলে না বা প্রত্যেকে ছাড়িয়ে যায় না তা নিশ্চিত করে চলে।

অবারিত কোড:

# Initialize l with all diamonds
blocked = []
l = [[] for _ in range(n*2)]
for i in range(n*2):
    offset = n-i-1 if i<n else i-n
    blocked.append(offset)
    l[i] += ' '*offset + ('/\\' if i<n else '\/')*(2*n - offset)

# Generate the random _'s
for i in range(n):
    oldright = True
    pos = n + i*2
    for j in range(n*2):
        # Go randomly right (true) or left (false), except when you out of bounds on the right side
        right = randint(0, 1) and pos < n*3 + i*2 - j
        if right == oldright:
            pos += 1 if right else -1
        if pos <= blocked[j]:
            right = True
            pos += 1
        l[j][pos] = '_'
        blocked[j] = pos + 1
        oldright = right

# Print the result
print ' '*n + '__'*n
for s in l:
    print ''.join(s)

1
আমি কেবল লক্ষ্য করেছি যে আপনার আউটপুটটি ভুল বলে মনে হচ্ছে। আপনার দুটি এক্সপেল ফলাফলের মধ্যে আপনি ত্রিভুজ পেয়েছেন (উপরে ডান এবং নীচে ডান)।
মার্টিন ইন্ডার

1
@ মার্টিনএন্ডার উদাহরণগুলি অ্যালগরিদমের ধারণাটি দেখানোর জন্য কেবল একটি 'আন্ডারস্কোরের পথ' দেখিয়েছিল। চূড়ান্ত আউটপুটে সমস্ত পাথ রয়েছে (এই ক্ষেত্রে 2), যা ত্রিভুজগুলি দূর করে। আমি চূড়ান্ত আউটপুট উদাহরণ হিসাবে যোগ।
ম্যাটি

ওহ, আমি দেখতে পাচ্ছি। স্পষ্টির জন্য ধন্যবাদ।
মার্টিন এন্ডার

2
আমার মনে হয় আপনি খাটো করতে পারেন randint(0,1)*(p<n*3+i*2-j)থেকে randint(0,p<n*3+i*2-j)
12

ওহ হ্যাঁ, ধন্যবাদ!
ম্যাটি

4

পার্ল, 174 168 166 161

#!perl -n
for$l(-$_..$_){$t=/_/?join'',map'/_'x($%=rand
1+(@z=/__?/g)).'/\\'.'_\\'x(@z-$%),split/\/\\/:__
x$_;$l>0&&$t!~s!^.(\\.*/).$!$1!?redo:print$"x abs$l-.5,$_=$t.$/}

আমাকে চেষ্টা করুন


এটি সর্বদা একই টাইলিং উত্পন্ন করে বলে মনে হয় (কমপক্ষে আদর্শে)
আদিতু

@ অ্যাডিটসু, আইডিয়ন একটি ক্যাশেড ফলাফল দেখায় যদি আপনি কেবল লিঙ্কটিতে ক্লিক করেন। এটি আবার চালানোর জন্য আপনাকে কাঁটাচামচ করা দরকার।
নটকি

2

জাভাস্ক্রিপ্ট ( ES6 ), 376 416 494

শুধু সেখানে থাকতে ...

এটি সমস্ত টিলিংস তৈরি করে, তারপরে একটি এলোমেলোটি বেছে নিন। আমার ল্যাপটপে N = 4 এর জন্য 232848 টিলিংয়ের জন্য সময়টি 45 ডলার। আমি এন = 5 চেষ্টা করিনি।

ইকামাস্ক্রিপ্ট 6 হওয়ায় এটি কেবল ফায়ারফক্সে চলে।

F=n=>{
  for(i=s=r=b='';i<n;i++)
    s='\n'+b+'/\\'[R='repeat'](n-i)+'_\\'[R](n)+s,
    r+='\n'+b+'\\/'[R](n-i)+'_/'[R](n),
    b+=' ';
  for(h=[t=0],x=[s+r];s=x[t];t++)
    for(d='';!d[n*3];d+='.')
      if(l=s.match(r=RegExp("(\n"+d+"/)\\\\_(.*\n"+d+"\\\\)/_","g")))
        for(j=2<<l.length;j-=2;h[z]||(h[z]=x.push(z)))
          z=s.replace(r,(r,g,h)=>(k+=k)&j?g+'_/'+h+'_\\':r,k=1);
  return b+'__'[R](n)+x[Math.random()*t|0]
}


function go()
{
  var n = N.value | 0,
  t0 = performance.now(),
  r = F(n),
  t1 = performance.now();
  
  O.innerHTML = r+'\n\nTime (msec): '+(t1-t0)
}
N: <input id=N value=3><button onclick="go()">GO</button>
<pre id=O></pre>


ক্রোমিয়াম ৪২ এ আমি "আনকচড সিনট্যাক্স এরিয়ার: অপ্রত্যাশিত টোকেন =>" এবং "আনকচড রেফারেন্স এরিয়ার: গো সংজ্ঞায়িত করা হয়নি"
অ্যাডিটসু

1
@ অ্যাডিতু এটি ইএস 6, ক্রোম: ফায়ারফক্স নেই: হ্যাঁ। এটি কি একটি সুপরিচিত সত্য নয়?
edc65

আমার কোনও ধারণা ছিল না, আমি প্রত্যাশা করেছিলাম যে ক্রোমিয়াম সর্বশেষতম এবং সর্বশ্রেষ্ঠটিকে যাইহোক-যা-তথাকথিত-দৃশ্যত-নয়-জাভাস্ক্রিপ্ট ব্যবহার করবে। ব্যাখ্যা করার জন্য ধন্যবাদ।
অদিতসু

আমি এখন এটি ফায়ারফক্সে চালিয়েছি (৩১.৫.৩) এবং এটি এন = 1, 2 বা 3 এর জন্য কাজ করে তবে এন = 4 এর জন্য এটি প্রায় 10 সেকেন্ড ধরে চলে, শেষ হয় এবং কিছুই দেখায় না (এবং কনসোলে কোনও ত্রুটি নেই) )
অদিতসু

@ এডিটসু নিশ্চিত নন ... সময় সীমা অতিক্রম করলে সম্ভবত একটি স্যান্ডবক্সের জাভাস্ক্রিপ্ট নিঃশব্দে হত্যা করা হবে dom.max_script_run_time। প্রায় একটি বিশ্বব্যাপী অগ্রাধিকার দেওয়া হল: কনফিগ, খনি 30. সেট করা হয়
edc65

1

স্মাইলব্যাসিক, 241 বাইট

INPUT N
T=N*2CLS?" "*N;"__"*N
DIM B[T]FOR I=-1TO N-1O=1P=N+I*2FOR J=0TO T-1IF I<0THEN O=ABS(J0N+.5)<<0B[J]=O?" "*O;MID$("\/\",J<N,2)*(T-O)ELSE R=P<N*3+I*2-J&&RND(2)P=P+(R*2-1)*(O==R)A=P<=B[J]R=R||A:P=P+A:LOCATE P,J+1?"_"B[J]=P+1O=R
NEXT
NEXT

ম্যাটির উত্তরের উপর ভিত্তি করে ভারী

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