एन-बाय-एन बोर्ड पर एक नाइट का ग्राफ


20

शतरंज में, एक नाइट केवल अपनी वर्तमान स्थिति के सापेक्ष एक्स के साथ चिह्नित पदों पर जा सकता है, ♞ के साथ चिह्नित:

जहां एक नाइट चल सकता है


एक नाइट के ग्राफ़ एक ग्राफ कि बिसात पर नाइट शतरंज का टुकड़ा के सभी वैध चालों का प्रतिनिधित्व करता है। इस ग्राफ का प्रत्येक शीर्ष शतरंज के एक वर्ग का प्रतिनिधित्व करता है, और प्रत्येक किनारे दो वर्गों को जोड़ता है जो एक दूसरे के अलावा एक नाइट चाल है।

यह ग्राफ मानक 8 बाई 8 बोर्ड के लिए इस तरह दिखता है।

यहां छवि विवरण दर्ज करें


चुनौती:

पूर्णांक N को देखते हुए , जहां 3 ≤ N output 8 , एक बोर्ड का प्रतिनिधित्व करते हुए N-by-N मैट्रिक्स का उत्पादन करता है, जहां प्रत्येक स्थिति से संभावित चालों की संख्या दिखाई जाती है। के लिए एन = 8 , उत्पादन ऊपर ग्राफ में प्रत्येक शिखर के मूल्यों को दर्शाने वाला एक मैट्रिक्स हो जाएगा।

आउटपुट स्वरूप लचीला है। सूचियों की सूची या यहां तक ​​कि एक चपटी सूची आदि को स्वीकार किए जाते हैं।


परीक्षण मामलों का पूरा सेट:

--- N = 3 ---
2 2 2
2 0 2
2 2 2
--- N = 4 ---
2 3 3 2
3 4 4 3
3 4 4 3
2 3 3 2
--- N = 5 ---
2 3 4 3 2
3 4 6 4 3
4 6 8 6 4
3 4 6 4 3
2 3 4 3 2
--- N = 6 ---
2 3 4 4 3 2
3 4 6 6 4 3
4 6 8 8 6 4
4 6 8 8 6 4
3 4 6 6 4 3
2 3 4 4 3 2
--- N = 7 ---
2 3 4 4 4 3 2
3 4 6 6 6 4 3
4 6 8 8 8 6 4
4 6 8 8 8 6 4
4 6 8 8 8 6 4
3 4 6 6 6 4 3
2 3 4 4 4 3 2
--- N = 8 ---
2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
3 4 6 6 6 6 4 3
2 3 4 4 4 4 3 2

यह इसलिए प्रत्येक भाषा में सबसे कम समाधान जीतता है। स्पष्टीकरण को प्रोत्साहित किया जाता है!


1
संबंधित चुनौती एक 8 * 8 बोर्ड पर एक वर्ग से नाइट चाल की संख्या को क्वेरी करने के लिए।
xnor

क्या आउटपुट n * n तत्वों की एक फ्लैट सूची हो सकती है?
xnor

13
यह शाब्दिक रूप से सिर्फ किनारे-मामले हैं! :)
जोनाथन एलन

जवाबों:


13

MATL , 17 16 बाइट्स

t&l[2K0]B2:&ZvZ+

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

(-1 बाईट मेन्डो के लिए धन्यवाद।)

K

K=(0101010001000001000101010)

(मैट्रिक्स के केंद्र के सापेक्ष, प्रत्येक 1 एक वैध नाइट की चाल है।)

t&l- सभी 1s (जहां n इनपुट है) का एक nxn मैट्रिक्स तैयार करें। बता दें कि यह एम।

[2K0] - ढेर पर [2, 4, 0] युक्त एक सरणी धक्का

B - बाइनरी में कनवर्ट करें, आवश्यकतानुसार 0s के साथ पैडिंग करें

0 1 0
1 0 0
0 0 0

2:&Zv- अंतिम आयाम / कॉलम ("सममित श्रेणी अनुक्रमण") को दोहराए बिना, दोनों आयामों पर दर्पण। यह हमें आवश्यक मैट्रिक्स के।

0 1 0 1 0
1 0 0 0 1
0 0 0 0 0
1 0 0 0 1
0 1 0 1 0

Z+- पहले के मैट्रिक्स एम ( conv2(M, K, 'same')) के ऊपर के 2 डी कन्वेंशन करें , प्रत्येक स्थिति के लिए कानूनी शूरवीरों के लक्ष्य पर 1s को जोड़ दें

परिणाम मैट्रिक्स को स्पष्ट रूप से प्रदर्शित किया जाता है।


आप कन्वेंशन मैट्रिक्स को सांकेतिक शब्दों में बदलना कर सकते हैं, 11043370BP5eलेकिन यह छोटा नहीं है ...
Giuseppe


8

जावास्क्रिप्ट (ईएस 6), 88 बाइट्स

एक स्ट्रिंग लौटाता है।

n=>(g=k=>--k?[n>3?'-2344-6-6'[(h=k=>k*2<n?~k:k-n)(k%n)*h(k/n|0)]||8:k-4&&2]+g(k):2)(n*n)

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

कैसे?

n=3

20

(222202222)

3<n8

(x,y)0x<n0y<nix,y

मैंएक्स,y=मिनट(एक्स+1,n-एक्स)×मिनट(y+1,n-y)

n=8

(1234432124688642369121296348121616128448121616128436912129632468864212344321)

टी

टी=[0,2,3,4,4,0,6,0,6]

0

(एक्स,y)

{टी(मैंएक्स,y)अगर मैंएक्स,y88अन्यथा

जावास्क्रिप्ट (ईएस 7), 107 बाइट्स

एक भोली कार्यान्वयन जो वास्तव में सभी चाल की कोशिश करता है।

n=>[...10**n-1+''].map((_,y,a)=>a.map((k,x)=>~[...b=i='01344310'].map(v=>k-=!a[x-v+2]|!a[y-b[i++&7]+2])+k))

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


6

जेली ,  23 22 14  10 बाइट्स

²ḶdðạP€ċ2)

एक फ्लैट लिस्ट की पैदावार करने वाला एक विवादास्पद लिंक - पहले पायस के उत्तर में केसाब द्वारा उपयोग किए गए विचार का उपयोग करता है - नाइट की चालों में "पक्ष" 1 और 2 होते हैं, 2 का एकमात्र कारक।

इसे ऑनलाइन आज़माएं! (पाद लेख प्रोग्राम का एकमात्र लिंक कहता है और फिर परिणाम को ग्रिड के रूप में प्रारूपित करता है)

वैकल्पिक रूप से, 10 बाइट्स के लिए भी, ²Ḷdðạ²§ċ5)(नाइट की चालें दूरी साथ सभी संभव चालें हैं5

कैसे?

²ḶdðạP€ċ2) - Link: integer, n (any non-negative) e.g. 8
²          - square n                                 64
 Ḷ         - lowered range                            [0,    1,    2,    3,    4,    5,    6,    7,    8,    9,    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,   31,   32,   33,   34,   35,   36,   37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63]
  d        - divmod (vectorises) i.e. x->[x//n,x%n]   [[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[2,0],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7],[3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[3,7],[4,0],[4,1],[4,2],[4,3],[4,4],[4,5],[4,6],[4,7],[5,0],[5,1],[5,2],[5,3],[5,4],[5,5],[5,6],[5,7],[6,0],[6,1],[6,2],[6,3],[6,4],[6,5],[6,6],[6,7],[7,0],[7,1],[7,2],[7,3],[7,4],[7,5],[7,6],[7,7]]
   ð     ) - new dyadic chain for each - call that L ( & e.g. R = [1,2] representing the "2nd row, 3rd column" ...-^ )
    ạ      -   absolute difference (vectorises)       [[1,2],[1,1],[1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[0,2],[0,1],[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[1,2],[1,1],[1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[2,2],[2,1],[2,0],[2,1],[2,2],[2,3],[2,4],[2,5],[3,2],[3,1],[3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[4,2],[4,1],[4,0],[4,1],[4,2],[4,3],[4,4],[4,5],[5,2],[5,1],[5,0],[5,1],[5,2],[5,3],[5,4],[5,5],[6,2],[6,1],[6,0],[6,1],[6,2],[6,3],[6,4],[6,5]]
     P€    -   product of €ach                        [2,    1,    0,    1,    2,    3,    4,    5,    0,    0,    0,    0,    0,    0,    0,    0,    2,    1,    0,    1,    2,    3,    4,    5,    4,    2,    0,    2,    4,    6,    8,    10,   6,    3,    0,    3,    6,    9,    12,   15,   8,    4,    0,    4,    8,    12,   16,   20,   10,   5,    0,    5,    10,   15,   20,   25,   12,   6,    0,    6,    12,   18,   24,   30]
       ċ2  -   count 2s                          6:    ^-...1                  ^-...2                                                                  ^-...3                  ^-...4                        ^-...5      ^-...6
           - )                                                                                                     v-...that goes here
           -   ->                                  -> [2,    3,    4,    4,    4,    4,    3,    2,    3,    4,    6,    6,    6,    6,    4,    3,    4,    6,    8,    8,    8,    8,    6,    4,    4,    6,    8,    8,    8,    8,    6,    4,    4,    6,    8,    8,    8,    8,    6,    4,    4,    6,    8,    8,    8,    8,    6,    4,    3,    4,    6,    6,    6,    6,    4,    3,    2,    3,    4,    4,    4,    4,    3,    2]

पिछला 22 बटर

2RżN$Œp;U$+,ḟ€³R¤Ẉ¬Sðþ

एक पूर्ण कार्यक्रम (के कारण ³)।

इसे ऑनलाइन आज़माएं! (पाद लेख प्रोग्राम का एकमात्र लिंक कहता है और फिर परिणाम को ग्रिड के रूप में प्रारूपित करता है)

सभी चालों और गिनती उन जो बोर्ड पर भूमि ढूँढता शायद निश्चित रूप से हराया जा सकता की गणना के द्वारा (शायद तर्क "बोर्ड पर भूमि" को बदल कर हराया जा सकता)।


4

एपीएल (डायलॉग क्लासिक) , 18 बाइट्स

+/+/2=×/¨|∘.-⍨⍳2⍴⎕

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

मूल्यांकन किए गए इनपुट एन

2⍴⎕ एन की दो प्रतियां

⍳2⍴⎕ N × N मैट्रिक्स के सूचक - लंबाई -2 वैक्टर का एक मैट्रिक्स

∘.-⍨ प्रत्येक जोड़ी को प्रत्येक दूसरे जोड़े से सूचकांकों को घटाएं, एक N × N × N × N सरणी प्राप्त करें

| निरपेक्ष मूल्य

×/¨ उत्पाद प्रत्येक

2=2s कहाँ हैं? एक बूलियन (0/1) मैट्रिक्स लौटाएं

ध्यान दें कि एक नाइट एक अक्ष पर on 1 और दूसरे पर the 2 चलता है, इसलिए उन चरणों के उत्पाद का पूर्ण मूल्य 2 है। जैसा कि 2 को किसी अन्य तरीके से फैक्ट नहीं किया जा सकता है, यह केवल नाइट चाल के लिए मान्य है।

+/+/ अंतिम आयाम के साथ, दो बार


3

रेड , 51 46 39 बाइट्स

{+/(⍵∘+¨(⊖,⊢)(⊢,-)(⍳2)(1¯2))∊,W}¨¨W←⍳⍵⍵

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

कैसे?

प्रत्येक वर्ग के लिए वैध नाइट चाल की संख्या को देखकर यह तय करता है कि कौन सी नाइट चालें बोर्ड पर उतरेंगी:

{+/(⍵∘+¨(⊖,⊢)(⊢,-)(⍳2)(1¯2))∊,W}¨¨W←⍳⍵⍵
 +/                                     - The number of ...
                            ∊,W         - ... in-bounds ...
        (⊖,⊢)(⊢,-)(⍳2)(1¯2)             - ... knight movements ...
   (⍵∘+¨                   )            - ... from ...
{                              }¨¨W←⍳⍵⍵ - ... each square

3

ब्रेकीलॉग , 65 40 33 बाइट्स

यह N बड़े के लिए टूट जाता है। 9. तो मुझे खुशी है कि N केवल 8 = पर जा सकता है)

⟦₅⟨∋≡∋⟩ᶠ;?z{{hQ&t⟦₅↰₁;Qz-ᵐ×ȧ2}ᶜ}ᵐ
  • केएसएबी के सूत्र पर स्विच करके -25 बाइट्स
  • -7 बाइट्स समंदर को धन्यवाद देते हुए एरे को फ्लैप करके

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


ब्रेकीलॉग , 44 36 बाइट्स

यह एक नंबर 9 के लिए भी काम करता है

gP&⟦₅⟨∋≡∋⟩ᶠ;z{{hQ&t⟦₅↰₁;Qz-ᵐ×ȧ2}ᶜ}ᵐ
  • -सुंदर के लिए सरणी धन्यवाद समतल करके -8 बाइट्स

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


1
आप ⟨∋≡∋⟩मैट्रिक्स निर्देशांक उत्पन्न करने के लिए जल्दी का उपयोग कर सकते हैं , और कुल मिलाकर 7 बाइट्स बचा सकते हैं (आउटपुट एक फ्लैट सूची है, जिसे ओपी द्वारा अनुमति दी गई है): इसे ऑनलाइन आज़माएं!
सूंदर -

2

रेटिना , 161 बाइट्स

.+
*
L$`_
$=
(?<=(¶)_+¶_+)?(?=(?<=(¶)_*¶_*)__)?(?<=(¶)__+)?(?=(?<=(¶)_*)___)?_(?=(?<=___)_*(¶))?(?=__+(¶))?(?=(?<=__)_*¶_*(¶))?(?=_+¶_+(¶))?
$.($1$2$3$4$5$6$7$8)

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण के मामले शामिल हैं। स्पष्टीकरण:

.+
*

यूनीरी में बदलें।

L$`_
$=

मूल्य _में प्रत्येक के लिए एक बार मूल्य सूची , अर्थात एक वर्ग बनाएँ।

(?<=(¶)_+¶_+)?
(?=(?<=(¶)_*¶_*)__)?
(?<=(¶)__+)?
(?=(?<=(¶)_*)___)?
_
(?=(?<=___)_*(¶))?
(?=__+(¶))?
(?=(?<=__)_*¶_*(¶))?
(?=_+¶_+(¶))?

_रेगेक्स के बीच में शुरू करते हुए, यह निर्धारित करने के लिए पर्याप्त संदर्भ से मेल खाने की कोशिश करें कि क्या आठ में से प्रत्येक की चाल संभव है। यदि मैच सफल होता है तो प्रत्येक पैटर्न एक एकल चरित्र को पकड़ लेता है। मैंने नामित समूहों का उपयोग करने की कोशिश की ताकि कैप्चर की संख्या सीधे वांछित परिणाम के बराबर हो जाए लेकिन लागत 15 बाइट्स।

$.($1$2$3$4$5$6$7$8)

सभी सफल कैप्चर को समेट लें और लंबाई लें।


2

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 34 बाइट्स

फिर भी एक और गणितज्ञ निर्मित में।

VertexDegree@KnightTourGraph[#,#]&

एक चपटी सूची देता है।

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


मैंने वास्तव में इस उत्तर के साथ चुनौती के तहत एक टिप्पणी की (हालांकि मैं डब्ल्यूएलटी को नहीं जानता, क्योंकि मैं सही वाक्यविन्यास नहीं हूं)। मैंने इसे थोड़ा बाद में हटा दिया, क्योंकि मुझे लगा कि कोई और इसे वास्तविक उत्तर के रूप में पोस्ट करना चाहता है।
स्टिव ग्रिफ़िन


1

सी (जीसीसी) , 133 125 बाइट्स

यह समाधान किसी भी आकार के बोर्ड पर काम करना चाहिए।

#define T(x,y)(x<3?x:2)*(y<3?y:2)/2+
a,b;f(i){for(a=i--;a--;)for(b=i+1;b--;)printf("%i ",T(a,b)T(i-a,b)T(a,i-b)T(i-a,i-b)0);}

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


@ceilingcat बेशक, धन्यवाद! लेकिन मैं यह नहीं देखता कि दूसरा सुझाव क्या बदलता है
कर्टिस बेचटेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.