চাইনিজ চেকবোর্ড


21

চাইনিজ চেকারদের খেলাটি একটি বোর্ডে ছয়-দফার নক্ষত্রের মতো ফাঁকা স্থান সহ খেলা হয়:

বোর্ডের চিত্র

উইকিপিডিয়া থেকে চিত্র

.খালি দাগগুলির GYORPBজন্য এবং ছয় রঙিন শুরুর অবস্থানগুলির জন্য চিঠিগুলি ব্যবহার করে আমরা এই বোর্ডের একটি ASCII- শিল্প উপস্থাপনা তৈরি করতে পারি :

            G
           G G
          G G G
         G G G G
B B B B . . . . . Y Y Y Y
 B B B . . . . . . Y Y Y
  B B . . . . . . . Y Y
   B . . . . . . . . Y
    . . . . . . . . .
   P . . . . . . . . O
  P P . . . . . . . O O
 P P P . . . . . . O O O
P P P P . . . . . O O O O
         R R R R
          R R R
           R R
            R

এটিকে আরও আকর্ষণীয় করার জন্য, আমরা আকারও পরিবর্তন করতে পারি। আমরা একটি বোর্ডের ত্রিভুজাকার সূচনা স্থানগুলির পাশের দৈর্ঘ্য দ্বারা মাপবো: উপরের বোর্ডটি আকার 4।

যেহেতু এটি হাত দিয়ে সমস্ত টাইপ করা সত্যিই একটি ব্যথা, তাই এটি করার জন্য একটি প্রোগ্রাম (বা ফাংশন) লিখি!

বিস্তারিত

আপনার কোডটি বোর্ডের আকারকে STDIN, ARGV, বা ফাংশন আর্গুমেন্টের মাধ্যমে প্রতিনিধিত্ব করে এমন একটি ধনাত্মক পূর্ণসংখ্যার উচিত। চেকবোর্ড প্যাটার্নটি স্টডআউটে আউটপুট করুন (আপনার জমা দেওয়ার কোনও ফাংশন থাকলে আপনি পর্যায়ক্রমে স্ট্রিং হিসাবে এটি ফিরিয়ে দিতে পারেন)।

আউটপুট অবশ্যই হয়

  • মোটামুটি কোনও পিছনে স্থান নেই, বা
  • 6 * N + 1 প্রস্থের নিখুঁত আয়তক্ষেত্রে প্যাটার্নটি পূরণ করার জন্য যথাযথ পর্যায়ে ট্রেলিং স্পেস রয়েছে ।

আউটপুট optionচ্ছিকভাবে একটি পিছনে নতুন লাইন থাকতে পারে। অন্য কোনও অতিরিক্ত (শীর্ষস্থানীয়, পিছনে) সাদা স্থানের অনুমতি নেই।

উদাহরণ

আকার 1:

   G
B . . Y
 . . .
P . . O
   R

আকার 2:

      G
     G G
B B . . . Y Y
 B . . . . Y
  . . . . .
 P . . . . O
P P . . . O O
     R R
      R

আকার 4:

            G
           G G
          G G G
         G G G G
B B B B . . . . . Y Y Y Y
 B B B . . . . . . Y Y Y
  B B . . . . . . . Y Y
   B . . . . . . . . Y
    . . . . . . . . .
   P . . . . . . . . O
  P P . . . . . . . O O
 P P P . . . . . . O O O
P P P P . . . . . O O O O
         R R R R
          R R R
           R R
            R

স্কোরিং

এটি : বাইট জেতে সংক্ষিপ্ততম কোড।


আউটপুটে খালি ফাঁকা ফাঁকা রেখা আগে এবং পরে থাকতে পারে?
xnor

আমি না বলতে যাচ্ছি।
ডিএলসাস

আপনি স্থান অনুসরণের স্থান উল্লেখ করেছেন, তবে শীর্ষস্থানীয় স্থানগুলির কী? চিত্রটি কি বামে ফ্লাশ করা দরকার, বা এটি প্রতিটি লাইনে সমান পরিমাণে শীর্ষস্থানীয় স্থান থাকতে পারে?
Sp3000

নমুনা আউটপুটে প্রদর্শিত হিসাবে বাম ফ্লাশ করুন।
ডিএলসাস

ডান প্রান্তের বাইরেও ফাঁকা স্থান থাকতে পারে তবে একটি আয়তক্ষেত্র গঠন করে?
xnor

উত্তর:


2

রুবি, 141 127

একটি আয়তক্ষেত্রাকার স্ট্রিং প্রদান করে

->n{(-2*n..2*n).map{|i|j=i.abs
k=j>n ?0:j 
(([i>0??P:?B]*k+[j>n ?i>0??R:?G:?.]*(2*n+1-j)+[i>0??O:?Y]*k)*" ").center(6*n+1)}*$/}

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->n{
  (-2*n..2*n).map{|i|                    #Iterate rows from -2*n to 2*n
    j=i.abs                              #Absolute value of i
    k=j>n ?0:j                           #Value of j up to n: for PBYO
    (                                    #An array of characters forming one line
      ([i>0??P:?B]*k+                    #B or P * (k=j or 0 as appropriate)
       [j>n ?i>0??R:?G:?.]*(2*n+1-j)+    #R,G or . * (2*n+1-j) to form centre diamond
       [i>0??O:?Y]*k                     #O or Y * (k=j or 0 as appropriate)
      )*" "                              #Concatenate the array of characters into a string separated by spaces.
    ).center(6*n+1)                      #pad the string to the full width of the image, adding spaces as necessary.
  }*$/                                   #Concatenate the array of lines into a string separated by newlines.
}

puts f[gets.to_i]

8

পাইথন 2, 140 বাইট

n=input()
for k in range(4*n+1):x=abs(k-2*n);y=2*n-x;p,q,r=" BP G..R YO "[(k-~k)/(n-~n)::4];print(" "*y+" ".join(p*x+q*-~y+r*x)+" "*y)[n:-n]

দুর্দান্ত নয়, তবে এখানে আমার প্রাথমিক বিড।

হোয়াইটস্পেসের নিয়মগুলি প্রচুর বাইট যুক্ত করেছে। তুলনার জন্য, এখানে একটি 120 বাইট পাইথন 3 প্রোগ্রাম রয়েছে যা কেবল দৃষ্টিভঙ্গি অনুসারে সঠিক এবং হোয়াইটস্পেসের নিয়মগুলি অনুসরণ করে না:

def f(n):
 for k in range(4*n+1):x=abs(k-2*n);y=2*n-x;p,q,r=" BP G..R YO "[(k-~k)//(n-~n)::4];print(" "*y,*p*x+q*-~y+r*x)

এবং এখানে আমার কিছুটা দীর্ঘ পুনরাবৃত্তির 149 বাইট পাইথন 3 প্রচেষ্টা:

def f(n,k=0):x=2*n-k;s=" ".join(["B"*x+"."*-~k+"Y"*x,"G"*-~k][k<n]).center(6*n+1);print(s);k<n*2and[f(n,k+1),print(s.translate({71:82,66:80,89:79}))]

7

পাইথন 2, 152

n=input();x=N=2*n
while~N<x:s='';y=n*3;exec"a=x+y;q=[0,a>N,x-y>N,-x>n,-a>N,y-x>N,x>n,1];s+=' BYROPG.'[q.index(sum(q)<~a%2*3)];y-=1;"*(y-~y);print s;x-=1

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

ধারণাটি হল ত্রিভুজাকার স্থানাঙ্ক ব্যবহার করা , যাতে ত্রিভুজাকার জালিয়াখার সাথে পূর্ণসংখ্যার ট্রিপলের (a,b,c)সাথে মিল রয়েছে a+b+c=0

এখানে চিত্র বর্ণনা লিখুন

(এখানে, জাল পয়েন্টগুলি হেক্সাগন হিসাবে আঁকা।

আমরা কার্টেসিয়ান স্থানাঙ্ককে ত্রিভুজাকার হিসাবে রূপান্তর করতে পারি

a = (x+y)/2
b = (x-y)/2
c = -x

এটি লক্ষ করে xএবং yএকই সমতা থাকতে হবে, অথবা অন্যথায় এটি অফ-চেকারবোর্ড এবং আমাদের একটি স্থান মুদ্রণ করা উচিত।

ত্রিকোণ স্থানাঙ্ক, ছয় একতরফা তারার সীমান্ত লাইন সমীকরণ আছে: a==n, b==n, c==n, a==-n, b==-n, c==-n

সুতরাং, আমরা নির্ধারণ করতে পারেন কি অঞ্চল আমরা যার দ্বারা আছেন এর [a,b,c,-a,-b,-c]চেয়ে অনেক বেশী হয় n

  • যদি কেউ না থাকে তবে আমরা কেন্দ্রে থাকি এবং একটি বিন্দু মুদ্রণ করি।
  • ঠিক যদি একটি হয় তবে আমরা ছয়টি বাহ্যিক ত্রিভুজগুলির মধ্যে একটিতে রয়েছি এবং সূচীটির সাথে সম্পর্কিত চিঠিটি মুদ্রণ করব।
  • যদি আরও দুটি বা তার বেশি হয় তবে আমরা বোর্ডের বাইরে থাকি এবং একটি স্থান মুদ্রণ করি।

সীমাবদ্ধ আয়তক্ষেত্রটি আবশ্যক যে আমরা xএটি বন্ধ বিরতি [-2 * n, 2 * n] এবং yবন্ধ বিরতিতে [-3 * এন, 3 * এন] এর জন্য করব।


কোডটি আমার পক্ষে কাজ করে না।
BadAtGeometry

@ ব্যাডএটজিওমিট্রি এটি আমার পক্ষে কাজ করে
এক্সএনওর

আপনি কি সংস্করণ ব্যবহার করছেন?
BadAtGeometry

@ ব্যাডএটজিওমিট্রি টিআইও ২.7.১৫ ব্যবহার করছে । আপনি এটি চালাতে কি হবে?
এক্সএনওর

7

রেটিনা , 234 বাইট

.
P
.+
iP$0$0x$0j$0x$0Px$0kqw
P(?=P*xP*j)
s
P(?=P*j)
R
P(?=P*xP*k)
c
P(?=P*k)
O
x

+`i(s+R+)R
is$1#$1R
+`(s*)P(P*c*)(O*)O(?=k)
$0#s$1$2c$3
j|k
#
s

+`([^#]+#)q(.*)
q$1$2$1
R(?=.*w)
G
P(?=.*w)
B
O(?=.*w)
Y
w[^#]*#|q|i

\w
$0 
c
.
 #
#

আনারি ইনপুট নেয়।

প্রতিটি লাইন তার নিজস্ব ফাইলে যেতে হবে এবং ফাইলের নতুন লাইনে #পরিবর্তন করা উচিত। এটি অযৌক্তিক তবে আপনি -sপতাকাটি সহ একটি ফাইলের মতো কোডটি চালাতে পারেন , #চিহ্নিতকারীদের রেখে এবং সম্ভবত আপনি যদি ইচ্ছা করেন তবে পঠনযোগ্যতার জন্য আউটপুটে তাদেরকে নতুন লাইনে পরিবর্তন করতে পারেন।

কোডটিতে ন্যূনতম রেইগেক্স-জটিলতা রয়েছে। প্রজন্মের প্রধান পদক্ষেপগুলি নিম্নলিখিতগুলি:

  • শেষ Gলাইন এবং প্রথম B.Yলাইন তৈরি করুন (চিহ্নিতকারী ijkএবং প্রকৃত ব্যবহৃত লেটেটর দ্বারা সীমিত RPO)।
  • Gকেবলমাত্র একটি জি না হওয়া পর্যন্ত একটি প্লাস স্পেসের সাথে শীর্ষস্থানীয় লাইনটি নকল করুন , একটি বিয়োগ গ।
  • B.Yএকটি প্লাস স্পেস এবং বিন্দু দিয়ে নীচের রেখার সদৃশ করুন , বিয়োগ একটি Bএবং Yযতক্ষণ না কোনও Bএবং Yবাম না থাকে।
  • বর্তমান স্ট্রিংয়ের পরে বিপরীত ক্রমে সমস্ত লাইন অনুলিপি করুন (মার্কারের সাহায্যে q)। আমরা একটি চিহ্নিতকারী ( w) মাঝখানে রাখি।
  • আমরা চিঠি পরিবর্তন RPOকরতে GBYযদি তারা মার্কার সামনে রয়েছে।
  • অন্তর্ভুক্ত ফাঁকা স্থান যোগ করুন।

উপরের প্রতিটি পয়েন্টের পরে ফলাফলগুলি (এর দ্বারা নির্ধারিত =) ইনপুটটির জন্য 1111 (unary 4):

1111
==============================
isssssssssRRRRjPPPPcccccOOOOkqw
==============================
issssssssssssR
sssssssssssRR
ssssssssssRRR
sssssssssRRRRjPPPPcccccOOOOkqw
==============================
issssssssssssR
sssssssssssRR
ssssssssssRRR
sssssssssRRRRjPPPPcccccOOOO
sPPPccccccOOO
ssPPcccccccOO
sssPccccccccO
ssssccccccccckqw
==============================
qi            R
           RR
          RRR
         RRRR
PPPPcccccOOOO
 PPPccccccOOO
  PPcccccccOO
   PccccccccO
    ccccccccc
w    ccccccccc
   PccccccccO
  PPcccccccOO
 PPPccccccOOO
PPPPcccccOOOO
         RRRR
          RRR
           RR
i            R
==============================
qi            G
           GG
          GGG
         GGGG
BBBBcccccYYYY
 BBBccccccYYY
  BBcccccccYY
   BccccccccY
    ccccccccc
w    ccccccccc
   PccccccccO
  PPcccccccOO
 PPPccccccOOO
PPPPcccccOOOO
         RRRR
          RRR
           RR
i            R
==============================
            G
           G G
          G G G
         G G G G
B B B B . . . . . Y Y Y Y
 B B B . . . . . . Y Y Y
  B B . . . . . . . Y Y
   B . . . . . . . . Y
    . . . . . . . . .
   P . . . . . . . . O
  P P . . . . . . . O O
 P P P . . . . . . O O O
P P P P . . . . . O O O O
         R R R R
          R R R
           R R
            R

4

জাভাস্ক্রিপ্ট ( ES6 ) 228

লাইন দ্বারা নির্মাণ লাইন। @ Sp3000 এর সাথে তুলনামূলকভাবে অবিশ্বাস্যভাবে দীর্ঘ long

নতুন লাইনের জন্য আরও 3 বাইট সংরক্ষণ করতে টেমপ্লেট স্ট্রিং ব্যবহার করা। সমস্ত নতুনলাইন উল্লেখযোগ্য এবং গণনা করা হয়।

f=w=>(i=>{r=(n,s=b=' ')=>s.repeat(n),l=c=>(c='GBYPOR'[c])+r(i,b+c),t=n=>r(w*3-i)+l(n)+`
`,s=n=>r(w-1-i)+l(n)+b+r(w+w-i,'. ')+l(n+1)+`
`;for(o='',q=r(w)+r(w+w,'. ')+`.
`;++i<w;o+=t(0))q+=s(3);for(;i--;o+=s(1))q+=t(5)})(-1)||o+q

// LESS GOLFED

u=w=>{
  r =(n,s=b=' ') => s.repeat(n),
  l = c => (c='GBYPOR'[c])+r(i, b+c),
  t = n => r(w*3-i) + l(n) + '\n',
  s = n => r(w-1-i) + l(n) + b + r(w+w-i,'. ') + l(n+1) + '\n',
  o = '',
  q = r(w) + r(w+w,'. ') + '.\n';
  for(i=0; i<w; i++)
    o += t(0), q += s(3);  
  for(;i--;)
    o += s(1), q += t(5);
  return o+q
}  

go=()=> O.innerHTML=f(I.value|0)

go()
<input id=I value=5><button onclick='go()'>-></button><br>
<pre id=O></pre>

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