ग्रिड-फिलिंग मेन्डर को पूरा करें


18

ग्रिड-फिलिंग मेन्डेर एक बंद रास्ता है जो एक वर्ग एन×एन ग्रिड के प्रत्येक सेल पर कम से कम एक बार जाता है, कभी भी आसन्न कोशिकाओं के बीच किसी भी किनारे को एक से अधिक बार पार नहीं करता है और कभी भी खुद को पार नहीं करता है। उदाहरण के लिए:

भरे जाने के बाद, ग्रिड के प्रत्येक सेल को निम्नलिखित 8 टाइलों में से एक द्वारा दर्शाया जा सकता है:

इस तरह से गिने गए, ऊपर की मेन्डर्स की टाइलों को इस मैट्रिक्स द्वारा दर्शाया जा सकता है:

5 6 5 6
4 8 3 2
5 7 6 2
4 3 4 3

आपका काम टाइलों के अधूरे सेट को देखते हुए ग्रिड-फिलिंग मेन्डर को पूरा करना है। उदाहरण के लिए, अधूरा मेंडर:

... जिसे 0लापता टाइलों के लिए एस का उपयोग करके दिखाया जा सकता है :

5 0 0 0 6
0 0 7 0 0
0 0 0 0 3
2 4 0 0 0
0 0 3 0 0

... इस तरह पूरा हो सकता है:

...अर्थात:

5 6 5 1 6
4 8 7 6 2
5 7 7 7 3
2 4 8 8 6
4 1 3 4 3

विशेष विवरण

  • इनपुट हमेशा कम से कम करना होगा 1 और अधिक से अधिक एन2 (गैर खाली) टाइल्स, जहां 2एन7
  • जब तक यह आपके उत्तर में निर्दिष्ट है, तब तक आप टाइल्स का प्रतिनिधित्व करने के लिए मूल्यों के किसी भी सेट का उपयोग कर सकते हैं।
  • आपका इनपुट और आउटपुट किसी भी प्रारूप और क्रम में हो सकता है, जब तक कि वह आपके उत्तर में निर्दिष्ट हो।
  • सभी इनपुट के लिए कम से कम एक वैध समाधान मौजूद होगा (यानी आपको अमान्य इनपुट को संभालने की आवश्यकता नहीं है)।
  • मानक I / O नियम लागू होते हैं।
  • मानक खामियों को मना किया जाता है।
  • स्पष्टीकरण, यहां तक ​​कि "व्यावहारिक" भाषाओं के लिए भी प्रोत्साहित किया जाता है।

परीक्षण के मामलों

इनपुट ( Θ ):

0 6
0 0

आउटपुट ( Θ ):

5 6
4 3

इनपुट ( Θ ):

5 6 5 6
4 0 3 2
5 7 6 2
4 3 4 3

आउटपुट ( Θ ):

5 6 5 6
4 8 3 2
5 7 6 2
4 3 4 3

इनपुट ( Θ ):

5 0 0 0 6
0 0 7 0 0
0 0 0 0 3
2 4 0 0 0
0 0 3 0 0

आउटपुट ( Θ ):

5 6 5 1 6
4 8 7 6 2
5 7 7 7 3
2 4 8 8 6
4 1 3 4 3


1
@ अरनल्ड आप सही हैं; यह मान्य नहीं है। एक मेन्डियर एक एकल बंद रास्ता है।
जॉर्डन

1
@Arnauld धन्यवाद, मैंने वह बदलाव किया है। मुझे नहीं पता था कि इस साइट पर MathJax सक्षम था!
जॉर्डन

जवाबों:


11

जावास्क्रिप्ट (ईएस 7),  236 ... 193  185 बाइट्स

इनपुट मैट्रिक्स को संशोधित करके आउटपुट।

m=>(g=(d,x,y,v,r=m[y],h=_=>++r[x]<9?g(d,x,y,v)||h():r[x]=0)=>r&&1/(n=r[x])?x|y|!v?n?g(d='21100--13203-32-21030321'[n*28+d*3+7&31],x+--d%2,y+--d%2,v+=n<7||.5):h():!m[v**.5|0]:0)(0,0,0,0)

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

(परिणाम को मैट्रिक्स के रूप में और ओपी द्वारा प्रदान किए गए विज़ुअलाइज़ेशन टूल के साथ संगत एक फ्लैट सूची के रूप में प्रिंट करने के लिए कुछ पोस्ट-प्रोसेसिंग कोड शामिल हैं )

परिणाम

कैसे?

चर

जी(एक्स,y)v

जी

  • आर

    r = m[y]
  • 18जीजी0

    h = _ => ++r[x] < 9 ? g(d, x, y, v) || h() : r[x] = 0

प्रारंभिक जाँच

n

r && 1 / (n = r[x]) ? ... ok ... : ... failed ...

(0,0)v>0

x | y | !v ? ... no ... : ... yes ...

अभी के लिए, मान लेते हैं कि हम शुरुआती बिंदु पर वापस नहीं आए हैं।

रास्ता खोज रहे हैं

n0

n0

n

d = '21100--13203-32-21030321'[n * 28 + d * 3 + 7 & 31]

अंतिम 8 प्रविष्टियाँ अमान्य और लोप हैं। अन्य 4 अमान्य प्रविष्टियाँ स्पष्ट रूप से हाइफ़न के साथ चिह्नित हैं।

संदर्भ के लिए, नीचे दी गई तालिका, कंपास और चुनौती में प्रदान की गई टाइल-सेट हैं:

   | 1 2 3 4 5 6 7 8
---+-----------------
 0 | 0 - - 1 3 - 3 1          1
 1 | - 1 - - 2 0 2 0        0 + 2
 2 | 2 - 1 - - 3 1 3          3
 3 | - 3 0 2 - - 0 2

जी1/2v781

g(d, x + --d % 2, y + --d % 2, v += n < 7 || .5)

एक्सy

मार्ग को मान्य करना

(0,0)v>0

781/2v

v=एन2v>एन2v<एन2=v

इसलिए जेएस कोड:

!m[v ** .5 | 0]

स्वरूपित स्रोत

m => (
  g = (
    d,
    x, y,
    v,
    r = m[y],
    h = _ => ++r[x] < 9 ? g(d, x, y, v) || h() : r[x] = 0
  ) =>
    r && 1 / (n = r[x]) ?
      x | y | !v ?
        n ?
          g(
            d = '21100--13203-32-21030321'[n * 28 + d * 3 + 7 & 31],
            x + --d % 2,
            y + --d % 2,
            v += n < 7 || .5
          )
        :
          h()
      :
        !m[v ** .5 | 0]
    :
      0
)(0, 0, 0, 0)

अच्छा काम। मुझे कोड का स्पष्टीकरण पढ़ना अच्छा लगेगा।
जॉर्डन

@Arnauld क्या आप इसे या किसी अन्य एल्गोरिथ्म का उपयोग करने के लिए बाध्य कर रहे हैं?
योना

1
@ जोनाह मैं वर्तमान में एक स्पष्टीकरण लिख रहा हूं। मूल रूप से, हाँ, यह एक क्रूर-बल दृष्टिकोण है, लेकिन जैसे ही कुछ असंगतता का पता चलता है, हर संभव बोर्ड की कोशिश करने के बजाय एल्गोरिथ्म का पता चलता है।
अरण्युलद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.