L-Shaped Trominoes के साथ 2 ^ N बाय 2 ^ N ग्रिड पर टाइलिंग


14

जब छात्रों को पहली बार गणितीय प्रेरण की प्रूफ तकनीक के बारे में पढ़ाया जाता है , तो एक सामान्य उदाहरण एल आकार वाले ट्रोमिनो के साथ 2 एन × 2 एन ग्रिड को टाइल करने की समस्या है , जिससे एक पूर्व निर्धारित ग्रिड स्थान खाली हो जाता है। (एन कुछ nonnegative पूर्णांक है।)

यदि आप पहले से ही इसे नहीं जानते हैं तो मैं आपको प्रमाण पर जाने के लिए इसे छोड़ दूंगा। कई संसाधन हैं जो इस पर चर्चा करते हैं।

आपका काम यहां एक प्रोग्राम लिखना है जो N के लिए एक मूल्य लेता है, साथ ही ग्रिड स्पेस के निर्देशांक खाली छोड़ने के लिए, और परिणामस्वरूप ट्रॉमिनो टाइल के ग्रिड के ASCII प्रतिनिधित्व को प्रिंट करता है।

चरित्र Oखाली जगह को भर देगा, और हमारे ट्रोमिनो के 4 घुमाव इस तरह दिखाई देंगे:

|
+-

 |
-+

-+
 |

+-
|

(हां, यह अस्पष्ट हो सकता है जो कि कुछ व्यवस्थाओं के लिए और +जिसके साथ जाता है , लेकिन यह ठीक है।)-|

आपका प्रोग्राम N = 0 (1 × 1 ग्रिड के लिए) के लिए कम से कम N = 8 (256 × 256 ग्रिड के लिए) तक काम करना चाहिए। इसे x और y मान दिए जाएंगे जो इसके लिए निर्देशांक हैं O:

  • x क्षैतिज अक्ष है। x = 1 बाईं ग्रिड एज है, x = 2 N दायां ग्रिड एज है।
  • y ऊर्ध्वाधर अक्ष है। y = 1 शीर्ष ग्रिड एज है, y = 2 N निचला ग्रिड एज है।

X और y दोनों हमेशा [1, 2 N ] श्रेणी में होते हैं।

तो किसी दिए गए N, x, और y के लिए, आपके प्रोग्राम को 2 N × 2 N ग्रिड प्रिंट करना चाहिए , L- आकार के ट्रोमिनो के साथ पूरी तरह से टाइल किया हुआ होगा, x को छोड़कर, y ग्रिड समन्वय करेंगे जो कि एक होगा O

उदाहरण

यदि N = 0 है, तो x और y दोनों का 1 होना चाहिए। आउटपुट बस है

O

यदि N = 1, x = 1, और y = 2, तो आउटपुट होगा

-+
O|

N = 2, x = 3, y = 2:

+--+
||O|
|+-|
+--+

N = 2, x = 4, y = 1:

+-|O
||+-
|+-|
+--+

N = 3, x = 3, y = 6 ( इस पृष्ठ पर चित्र ):

+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+

विवरण

  • आप एक फंक्शन लिख सकते हैं जो पूरे प्रोग्राम को लिखने के बजाय 3 पूर्णांक लेता है। इसे ग्रिड स्ट्रिंग को प्रिंट या वापस करना चाहिए।
  • स्टड, कमांड लाइन से इनपुट लें, (या फ़ंक्शन लिखता है तो फ़ंक्शन आर्गन्स)।
  • आउटपुट में वैकल्पिक रूप से एक एकल प्रशिक्षण नई पंक्ति हो सकती है।
  • आपको उस टाइलिंग विधि का उपयोग करने की आवश्यकता नहीं है जो सामान्य रूप से सुझाव देती है। यह केवल मायने रखता है कि ग्रिड एल के आकार के ट्रोमिनो से भर जाता है O। (ट्रोमिनो को ग्रिड सीमा से काटा या नहीं जा सकता है।)

बाइट्स में सबसे छोटा कोड जीतता है। टाईब्रेकर पहले की पोस्ट है। ( हैंडी बाइट काउंटर। )

जवाबों:


2

हास्केल, 250 240 236 बाइट्स

c=cycle
z o(#)(x,y)=zipWith o(1#x)(2#y)
f n x y=unlines$(z(+)(\m w->[c[0,m]!!div(w-1)(2^(n-k))|k<-[1..n]])(x,y),"O")%n
(_,x)%0=[x]
((p:o),x)%k=z(++)(\_ q->((o,x):c[(c[3-q],[" |-+| +--+ |+-|"!!(4*p+q)])])!!abs(p-q)%(k-1))=<<[(0,1),(2,3)]

यह समस्या के प्रेरक समाधान का बारीकी से अनुसरण करता है। अंक को 0 से 3 तक की संख्या के अनुक्रम द्वारा दर्शाया गया है जो यह दर्शाता है कि प्रत्येक ज़ूम स्तर पर कौन सा चतुर्थ बिंदु रखता है; यह शुरू में z (+) से शुरू होने वाले एक्सप्रेशन द्वारा गणना की जाती है। ऑपरेटर (%) एक चित्र में चार चतुर्भुजों के लिए चित्रों को जोड़ता है। चिन्हित किए गए चतुर्भुजों के लिए चित्र बीच के निशान के साथ चिह्नित क्वाड्रंटों को खींचकर उत्पन्न होते हैं, जो "- -" के निशान के साथ खींचे जाते हैं। केंद्रीय एल टाइल बनाने के लिए उपयुक्त है।

मजेदार व्यवसाय: गोल्फ कारणों के लिए, उपसंचाई

\m w->[c[0,m]!!div(w-1)(2^(n-k))|k<-[1..n]]

(जो किसी संख्या के लिए बिट क्रम को कम या ज्यादा गणना करता है) प्रफुल्लित करने वाला अक्षम है --- यह निर्धारित करता है कि w / 2 ^ p विषम है या यहां तक ​​कि किसी सूची के (w / 2 ^ p) वें तत्व को देखकर।

संपादित करें: बिट गणना की गणना करके और अगर / फिर / एक अनुक्रमण ऑपरेशन के साथ एक और की जगह 10 बाइट्स सहेजे गए।

Edit2: किसी फ़ंक्शन को वापस किसी ऑपरेटर पर स्विच करके चार और बाइट्स सहेजे गए। @randomra, दौड़ जारी है!

डेमो:

λ> putStr $ f 4 5 6
+--++--++--++--+
|+-||-+||+-||-+|
||+--+||||+--+||
+-|+-|-++-|-+|-+
+-||-+-++--+||-+
||+-O||||-+|-+||
|+-||-+|-+|||-+|
+--++--+||-++--+
+--++-|-+|-++--+
|+-|||+--+|||-+|
||+-|+-||-+|-+||
+-||+--++--+||-+
+-|+-|-++-|-+|-+
||+--+||||+--+||
|+-||-+||+-||-+|
+--++--++--++--+

8

सी, 399 बाइट्स

char*T=" |-+ | +-| ",*B;w;f(N,x,y,m,n,F,h,k,i,j){w=B?F=0,w:1<<N|1;char b[N?w*w:6];for(k=w;k--;)b[k*w-1]=10;B=!B?F=1,m=0,n=0,x--,y--,b:B;if(N>1){h=1<<N-1;i=x>--h,j=y>h;while(++k<4)if(k%2-i||k/2-j)f(N-1,!(k%2)*h,!(k/2)*h,m+k%2*(h+1),n+k/2*(h+1));f(1,h&i,h&j,m+h,n+h);h++;f(N-1,x-h*i,y-h*j,m+h*i,n+h*j);}else while(++k<4)B[w*(n+k/2)+m+k%2]=T[5*x+2*y+k];if(F)B[y*w+x]=79,B[w*w-w-1]=0,puts(N?B:"O"),B=0;}

अभी तक किसी के साथ कुछ भी सामने नहीं आया है, इसलिए मैं एक घोल समाधान पेश करूंगा। मेरे शब्दों को चिह्नित करें, यह अंत नहीं है। यह छोटा हो जाएगा।

हम एक फ़ंक्शन को परिभाषित करते हैं fजो 10 तर्क लेता है, लेकिन आपको केवल इसके साथ कॉल करने की आवश्यकता है f(N, X, Y)। आउटपुट स्टडआउट जाता है।

यहाँ एक पठनीय संस्करण है:

char*T=" |-+ | +-| ",*B;
w;
f(N,x,y,m,n,F,h,k,i,j){
    w=B?F=0,w:1<<N|1;
    char b[N?w*w:6];
    for(k=w;k--;)
        b[k*w-1]=10;
    B=!B?F=1,m=0,n=0,x--,y--,b:B;
    if(N>1){
        h=1<<N-1;
        i=x>--h,j=y>h;
        while(++k<4)
            if(k%2-i||k/2-j)
                f(N-1,!(k%2)*h,!(k/2)*h,m+k%2*(h+1),n+k/2*(h+1));
        f(1,h&i,h&j,m+h,n+h);
        h++;
        f(N-1,x-h*i,y-h*j,m+h*i,n+h*j);
    }
    else
        while(++k<4)
            B[w*(n+k/2)+m+k%2]=T[5*x+2*y+k];
    if(F)B[y*w+x]=79,B[w*w-w-1]=0,puts(N?B:"O"),B=0;
}

के लिए उत्पादन का स्वाद f(3, 2, 7):

+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
|-+|-+||
|O|||-+|
+--++--+

यह ग्रिड को भरने के लिए एक काफी सरल पुनरावर्ती एल्गोरिदम है। क्योंकि मुझे लगता है कि यह बहुत साफ है, मैं एल्गोरिथ्म ड्रॉइंग ट्रोमिनो का एनीमेशन अपलोड कर सकता हूं। हमेशा की तरह, बेझिझक सवाल पूछें और अगर मेरा कोड टूट गया तो मुझ पर चिल्लाओ!

इसे ऑनलाइन आज़माएं !


8

पायथन 3, 276 265 237 बाइट्स

मेरा पहला पायथन गोल्फ इसलिए मुझे यकीन है कि सुधार के लिए बहुत जगह है।

def f(n,x,y,c='O'):
 if n<1:return c
 *t,l,a='x|-+-|',2**~-n;p=(a<x)+(a<y)*2
 for i in 0,1,2,3:t+=(p-i and f(n-1,1+~i%2*~-a,1+~-a*(1-i//2),l[p+i])or f(n-1,1+~-x%a,1+~-y%a,c)).split(),
 u,v,w,z=t;return'\n'.join(map(''.join,zip(u+w,v+z)))

10 बाइट्स ने @xnor की बदौलत और 6 और बाइट की बदौलत @ Sp3000 को बचाया।

फ़ंक्शन एक स्ट्रिंग लौटाता है। उदाहरण का उपयोग:

>>>print(f(3,3,6))    
+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+

1
पायथन गोल्फिंग में एक प्रभावशाली पहला रन! कुछ जल्दी चरस। आप पहले स्थान को काट सकते हैं if p!=i; अंदर की सूची की .join()जरूरत नहीं है []; (1-i%2)के रूप में किया जा सकता है ~i%2; आप के t,l,a=[],...रूप में लिखने के लिए iterable unpacking का उपयोग कर सकते हैं *t,l,a=...; क्योंकि नकारात्मक नहीं हो सकता के if n==0रूप में जाँच की जा सकती है ; फाइनल शायद प्रत्येक तत्व को प्रिंट करके किया जा सकता है, क्योंकि सामान्य नियम रिटर्न के स्थान पर प्रिंटिंग की अनुमति देते हैं; हो सकता है क्योंकि नॉनजरो वैल्यूज़ ट्रू हैं। if n<1n"\n".joinif p!=iif p-i
xnor

@xnor सुझावों के लिए धन्यवाद! एक अंतर्निहित खाली सूची प्राप्त करने के लिए unpacking बहुत साफ है। मैं fएक पुनरावर्ती कार्य के रूप में प्रिंट के बजाय रिटर्न का उपयोग करता हूं । मुझे वास्तव में split()प्रत्येक स्वयं-कॉल के बाद आउटपुट स्वरूपण को वापस करना होगा ।
रैंडमरा

कुछ और: अंतिम पंक्ति के रूप में लिखा जा सकता है A,B,C,D=t;return'\n'.join(map("".join,zip(A+C,B+D))), t+=[...]दूसरी-अंतिम पंक्ति के रूप में लिखा जा सकता है t+=...,(किसी सूची के बजाय टुपल जोड़ना) और मुझे यकीन नहीं है कि यह काम करता है लेकिन A if B else Cइसे B and A or C(इस पर भी) लिखा जा सकता है दूसरी-अंतिम पंक्ति), लेकिन केवल अगर A कभी गलत नहीं है (जो मुझे नहीं लगता कि वह है?)
Sp3000

4

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

गोल्फ के लिए बहुत सारे काम, लेकिन अभी भी काफी लंबा है।

T=(b,x,y)=>
  (F=(d,x,y,f,t=[],q=y<=(d>>=1)|0,
      b=d?x>d
       ?q
         ?F(d,x-d,y,0,F(d,1,1,2))
         :F(d,1,d,2,F(d,x-d,y-d))
       :F(d,1,d,1-q,F(d,1,1,q)):0,
      r=d?(x>d
         ?F(d,d,d,1-q,F(d,d,1,q))
         :q
           ?F(d,x,y,1,F(d,d,1,2))
           :F(d,d,d,2,F(d,x,y-d))
      ).map((x,i)=>x.concat(b[i])):[[]]
    )=>(r[y-1][x-1]='|+-O'[f],r.concat(t))
  )(1<<b,x,y,3).join('\n').replace(/,/g,'')

परीक्षण करने के लिए स्निपेट चलाएं (यूनिकोड ब्लॉक वर्णों का उपयोग करके बेहतर देखें - लेकिन थोड़ा लंबा भी)


1

आईडीएल 8.3+, 293 बाइट्स

यह बहुत लंबा है, मैं इसे काटने की कोशिश कर रहा हूं, लेकिन मैं अभी तक वहां नहीं पहुंचा हूं।

function t,n,x,y
m=2^n
c=['|','+','-']
b=replicate('0',m,m)
if m eq 1 then return,b
h=m/2
g=h-1
k=[1:h]
o=x gt h
p=y gt h
q=o+2*p
if m gt 2then for i=0,1 do for j=0,1 do b[i*h:i*h+g,j*h:j*h+g]=t(n-1,i+2*j eq q?x-i*h:k[i-1],i+2*j eq q?y-j*h:k[j-1])
b[g+[1-o,1-o,o],g+[p,1-p,1-p]]=c
return,b
end

आउटपुट:

IDL> print,t(1,1,2)
- +
0 |
IDL> print,t(2,3,2)
+ - - +
| | 0 |
| + - |
+ - - +
IDL> print,t(2,4,1)
+ - | 0
| | + -
| + - |
+ - - +
IDL> print,t(3,3,6)
+ - - + + - - +
| + - | | - + |
| | + - - + | |
+ - | - + | - +
+ - - + | | - +
| | 0 | - + | |
| + - | | - + |
+ - - + + - - +

और, उह ... सिर्फ मनोरंजन के लिए ...

IDL> print,t(6,8,9)
+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - +
| + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + |
| | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | |
+ - | + - | - + + - | - + | - + + - | + - | - + + - | - + | - + + - | + - | - + + - | - + | - + + - | + - | - + + - | - + | - +
+ - | | + - - + + - - + | | - + + - | | + - - + + - - + | | - + + - | | + - - + + - - + | | - + + - | | + - - + + - - + | | - +
| | + - | + - | | - + | - + | | | | + - | + - | | - + | - + | | | | + - | + - | | - + | - + | | | | + - | + - | | - + | - + | |
| + - | | | + - - + | | | - + | | + - | | | + - - + | | | - + | | + - | | | + - - + | | | - + | | + - | | | + - - + | | | - + |
+ - - + + - | - + | - + + - - + + - - + + - | - + | - + + - - + + - - + + - | + - | - + + - - + + - - + + - | - + | - + + - - +
+ - - + + - | 0 | | - + + - - + + - - + + - - + | | - + + - - + + - - + + - | | + - - + + - - + + - - + + - - + | | - + + - - +
| + - | | | + - - + | | | - + | | + - | | - + | - + | | | - + | | + - | | | + - | + - | | - + | | + - | | - + | - + | | | - + |
| | + - | + - | | - + | - + | | | | + - - + | | | - + | - + | | | | + - | + - | | | + - - + | | | | + - - + | | | - + | - + | |
+ - | | + - - + + - - + | | - + + - | - + | - + + - - + | | - + + - | | + - - + + - | + - | - + + - | - + | - + + - - + | | - +
+ - | + - | - + + - | - + | - + + - - + | | - + + - | - + | - + + - | + - | - + + - | | + - - + + - - + | | - + + - | - + | - +
| | + - - + | | | | + - - + | | | - + | - + | | | | + - - + | | | | + - - + | | | | + - | + - | | - + | - + | | | | + - - + | |
| + - | | - + | | + - | | - + | - + | | | - + | | + - | | - + | | + - | | - + | | + - | | | + - - + | | | - + | | + - | | - + |
+ - - + + - - + + - - + + - - + | | - + + - - + + - - + + - - + + - - + + - - + + - - + + - | - + | - + + - - + + - - + + - - +
+ - - + + - - + + - - + + - | - + | - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + | | - + + - - + + - - + + - - +
| + - | | - + | | + - | | | + - - + | | | - + | | + - | | - + | | + - | | - + | | + - | | - + | - + | | | - + | | + - | | - + |
| | + - - + | | | | + - | + - | | - + | - + | | | | + - - + | | | | + - - + | | | | + - - + | | | - + | - + | | | | + - - + | |
+ - | + - | - + + - | | + - - + + - - + | | - + + - | - + | - + + - | + - | - + + - | - + | - + + - - + | | - + + - | - + | - +
+ - | | + - - + + - | + - | - + + - | - + | - + + - - + | | - + + - | | + - - + + - - + | | - + + - | - + | - + + - - + | | - +
| | + - | + - | | | + - - + | | | | + - - + | | | - + | - + | | | | + - | + - | | - + | - + | | | | + - - + | | | - + | - + | |
| + - | | | + - | + - | | - + | | + - | | - + | - + | | | - + | | + - | | | + - - + | | | - + | | + - | | - + | - + | | | - + |
+ - - + + - | | + - - + + - - + + - - + + - - + | | - + + - - + + - - + + - | - + | - + + - - + + - - + + - - + | | - + + - - +
+ - - + + - | + - | - + + - - + + - - + + - | - + | - + + - - + + - - + + - - + | | - + + - - + + - - + + - | - + | - + + - - +
| + - | | | + - - + | | | - + | | + - | | | + - - + | | | - + | | + - | | - + | - + | | | - + | | + - | | | + - - + | | | - + |
| | + - | + - | | - + | - + | | | | + - | + - | | - + | - + | | | | + - - + | | | - + | - + | | | | + - | + - | | - + | - + | |
+ - | | + - - + + - - + | | - + + - | | + - - + + - - + | | - + + - | - + | - + + - - + | | - + + - | | + - - + + - - + | | - +
+ - | + - | - + + - | - + | - + + - | + - | - + + - | - + | - + + - - + | | - + + - | - + | - + + - | + - | - + + - | - + | - +
| | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | - + | - + | | | | + - - + | | | | + - - + | | | | + - - + | |
| + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | - + | | | - + | | + - | | - + | | + - | | - + | | + - | | - + |
+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + | | - + + - - + + - - + + - - + + - - + + - - + + - - + + - - +
+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - | - + | - + + - - + + - - + + - - + + - - + + - - + + - - + + - - +
| + - | | - + | | + - | | - + | | + - | | - + | | + - | | | + - - + | | | - + | | + - | | - + | | + - | | - + | | + - | | - + |
| | + - - + | | | | + - - + | | | | + - - + | | | | + - | + - | | - + | - + | | | | + - - + | | | | + - - + | | | | + - - + | |
+ - | + - | - + + - | - + | - + + - | + - | - + + - | | + - - + + - - + | | - + + - | - + | - + + - | + - | - + + - | - + | - +
+ - | | + - - + + - - + | | - + + - | | + - - + + - | + - | - + + - | - + | - + + - - + | | - + + - | | + - - + + - - + | | - +
| | + - | + - | | - + | - + | | | | + - | + - | | | + - - + | | | | + - - + | | | - + | - + | | | | + - | + - | | - + | - + | |
| + - | | | + - - + | | | - + | | + - | | | + - | + - | | - + | | + - | | - + | - + | | | - + | | + - | | | + - - + | | | - + |
+ - - + + - | + - | - + + - - + + - - + + - | | + - - + + - - + + - - + + - - + | | - + + - - + + - - + + - | - + | - + + - - +
+ - - + + - | | + - - + + - - + + - - + + - | + - | - + + - - + + - - + + - | - + | - + + - - + + - - + + - - + | | - + + - - +
| + - | | | + - | + - | | - + | | + - | | | + - - + | | | - + | | + - | | | + - - + | | | - + | | + - | | - + | - + | | | - + |
| | + - | + - | | | + - - + | | | | + - | + - | | - + | - + | | | | + - | + - | | - + | - + | | | | + - - + | | | - + | - + | |
+ - | | + - - + + - | + - | - + + - | | + - - + + - - + | | - + + - | | + - - + + - - + | | - + + - | - + | - + + - - + | | - +
+ - | + - | - + + - | | + - - + + - | + - | - + + - | - + | - + + - | + - | - + + - | - + | - + + - - + | | - + + - | - + | - +
| | + - - + | | | | + - | + - | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | - + | - + | | | | + - - + | |
| + - | | - + | | + - | | | + - | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | - + | | | - + | | + - | | - + |
+ - - + + - - + + - - + + - | | + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + | | - + + - - + + - - + + - - +
+ - - + + - - + + - - + + - | + - | - + + - - + + - - + + - - + + - - + + - - + + - - + + - | - + | - + + - - + + - - + + - - +
| + - | | - + | | + - | | | + - - + | | | - + | | + - | | - + | | + - | | - + | | + - | | | + - - + | | | - + | | + - | | - + |
| | + - - + | | | | + - | + - | | - + | - + | | | | + - - + | | | | + - - + | | | | + - | + - | | - + | - + | | | | + - - + | |
+ - | + - | - + + - | | + - - + + - - + | | - + + - | - + | - + + - | + - | - + + - | | + - - + + - - + | | - + + - | - + | - +
+ - | | + - - + + - | + - | - + + - | - + | - + + - - + | | - + + - | | + - - + + - | + - | - + + - | - + | - + + - - + | | - +
| | + - | + - | | | + - - + | | | | + - - + | | | - + | - + | | | | + - | + - | | | + - - + | | | | + - - + | | | - + | - + | |
| + - | | | + - | + - | | - + | | + - | | - + | - + | | | - + | | + - | | | + - | + - | | - + | | + - | | - + | - + | | | - + |
+ - - + + - | | + - - + + - - + + - - + + - - + | | - + + - - + + - - + + - | | + - - + + - - + + - - + + - - + | | - + + - - +
+ - - + + - | + - | - + + - - + + - - + + - | - + | - + + - - + + - - + + - | + - | - + + - - + + - - + + - | - + | - + + - - +
| + - | | | + - - + | | | - + | | + - | | | + - - + | | | - + | | + - | | | + - - + | | | - + | | + - | | | + - - + | | | - + |
| | + - | + - | | - + | - + | | | | + - | + - | | - + | - + | | | | + - | + - | | - + | - + | | | | + - | + - | | - + | - + | |
+ - | | + - - + + - - + | | - + + - | | + - - + + - - + | | - + + - | | + - - + + - - + | | - + + - | | + - - + + - - + | | - +
+ - | + - | - + + - | - + | - + + - | + - | - + + - | - + | - + + - | + - | - + + - | - + | - + + - | + - | - + + - | - + | - +
| | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | | | | + - - + | |
| + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + | | + - | | - + |
+ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - +

0

रूबी Rev 1, 288

एक अनाम लंबोदर के रूप में। परीक्षण कार्यक्रम में दिखाया गया (लंबोदर शाब्दिक है ->(n,a,b){...})

g=
->(n,a,b){
$x=a-1
$y=b-1
$a=Array.new(m=2**n){"|"*m}
def t(u,v,m,r,f)
(m/=2)==1?$a[v+1-r/2%2][u,2]='-+-'[r%2,2]:0
if m>1 
4.times{|i|i==r ?t(u+m/2,v+m/2,m,r,0):t(u+i%2*m,v+i/2*m,m,3-i,0)}
f>0?t(u+r%2*m,v+r/2*m,m,2*$x/m&1|$y*4/m&2,1):0
end
end
t(0,0,m,2*$x/m|$y*4/m,1) 
$a[$y][$x]='O'
$a
}

n=gets.to_i
a=gets.to_i
b=gets.to_i
puts(g.call(n,a,b))

रूबी रेव 0, 330 असभ्य

वर्तमान में एकमात्र गोल्फिंग जो मैं दावा कर रहा हूं वह टिप्पणियों, अनावश्यक न्यूलाइन्स और इंडेंट का उन्मूलन है।

यह मेरा पहला उचित एल्गोरिथ्म रूबी में एन्कोडेड है और यह कड़ी मेहनत का है। मुझे यकीन है कि कम से कम 50 अक्षर हैं जिन्हें खत्म किया जा सकता है, लेकिन मैंने अभी के लिए पर्याप्त किया है। कुछ वास्तविक भयावहता हैं, उदाहरण के लिए इनपुट। यह शायद एक कार्यक्रम के बजाय एक फ़ंक्शन या लैम्ब्डा द्वारा तय किया जा सकता है, लेकिन tट्रॉमीनो को खींचने वाले आंतरिक फ़ंक्शन को अभी भी वैश्विक चर तक पहुंच की आवश्यकता है। मुझे इसके लिए वाक्य रचना का पता लगाना होगा।

मेरे जवाब की एक विशेषता जो दूसरों में मौजूद नहीं है, वह यह है कि मैं |पात्रों के साथ तार की एक सरणी को आरंभीकृत करता हूं । इसका मतलब है कि मैं केवल राशि आकर्षित करने के लिए +-या -+, जो एक ही लाइन पर एक दूसरे के बगल में हैं।

m=2**gets.to_i                                         #get n and store 2**n in m
$x=gets.to_i-1                                         #get x and y, and...
$y=gets.to_i-1                                         #convert from 1-indexed to 0-indexed
$a=Array.new(m){"|"*m}                                 #array of m strings length m, initialized with "|"

def t(u,v,m,r,f)                                       #u,v=top left of current field. r=0..3= quadrant containing O. f=flag to continue surrounding O
  m/=2
  if m==1 then $a[v+1-r/2%2][u,2] ='-+-'[r%2,2];end    #if we are at char level, insert -+ or +- (array already initialized with |'s)
  if m>1 then                                          #at higher level, 4 recursive calls to draw trominoes of next size down 
    4.times{|i| i==r ? t(u+m/2,v+m/2,m,r,0):t(u+i%2*m,v+i/2*m,m,3-i,0)}
    f>0?t(u+r%2*m,v+r/2*m,m,2*$x/m&1|$y*4/m&2,1):0     #then one more call to fill in the empty quadrant (this time f=1)
  end
end

$a[$y][$x]='O'                                         #fill in O
t(0,0,m,2*$x/m&1|$y*4/m&2,1)                           #start call. 2*x/m gives 0/1 for left/right quadrant, similarly 4*y/m gives 0/2 for top/bottom 

puts $a                                                #dump array to stdout, elements separated by newlines.

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