चीनी बिसात


21

का खेल चीनी चेकर्स एक छह पॉइंट वाला तारा के आकार में रिक्त स्थान के साथ एक बोर्ड पर खेला जाता है:

बोर्ड की छवि

विकिपीडिया से छवि

हम इस बोर्ड का उपयोग करके ASCII- कला प्रतिनिधित्व बना सकते हैं . खाली स्थानों और GYORPBछह रंगीन आरंभिक स्थानों के लिए अक्षरों :

            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 या फ़ंक्शन तर्क के माध्यम से बोर्ड के आकार का प्रतिनिधित्व करने वाला एक सकारात्मक पूर्णांक लेना चाहिए। STDOUT के लिए चेकरबोर्ड पैटर्न को आउटपुट करें (यदि आप वैकल्पिक रूप से इसे एक स्ट्रिंग के रूप में लौटा सकते हैं यदि आपका सबमिशन एक फ़ंक्शन है)।

आउटपुट भी होना चाहिए

  • कोई अनुगामी स्थान नहीं है, या
  • चौड़ाई 6 * N + 1 की सही आयत में पैटर्न को भरने के लिए बिल्कुल पर्याप्त स्थान है ।

आउटपुट वैकल्पिक रूप से एक अनुगामी न्यूलाइन हो सकता है। किसी अन्य अतिरिक्त (अग्रणी, अनुगामी) व्हाट्सएप की अनुमति नहीं है।

उदाहरण

आकार 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

मैं ना कहने जा रहा हूँ।
DLosc

आपने रिक्त स्थान का उल्लेख किया है, लेकिन प्रमुख स्थानों के बारे में क्या? क्या छवि को बाईं ओर फ्लश करने की आवश्यकता है, या इसमें प्रत्येक पंक्ति पर प्रमुख रिक्त स्थान के बराबर राशि हो सकती है?
Sp3000

जैसा कि नमूना आउटपुट में दिखाया गया है, फ्लश छोड़ दिया।
DLosc

क्या दाहिने किनारे से परे स्थान हो सकते हैं लेकिन फिर भी एक आयत बन सकता है?
xnor

जवाबों:


2

माणिक, १४१ १२ 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 * n, 3 * n] में करते हैं।


कोड मेरे लिए काम नहीं करता है।
BadAtGeometry


आप कौन सा संस्करण उपयोग कर रहे हैं?
BadAtGeometry

@BadAtGeometry TIO 2.7.15 का उपयोग कर रहा है । जब आप इसे चलाते हैं तो क्या होता है?
xnor

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जब तक केवल एक 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

जावास्क्रिप्ट ( ईएस 6 ) 228

निर्माण लाइन द्वारा लाइन। अविश्वसनीय रूप से @ Sp3000 की तुलना में लंबा है जो ऐसा ही करता है।

नई कहानियों के लिए 3 और बाइट्स को बचाने के लिए टेम्पलेट स्ट्रिंग का उपयोग करना। सभी newlines महत्वपूर्ण और गिने जाते हैं।

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>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.