नाइट-एक ग्रिड भरें


15

एक शूरवीर भराव, शूरवीर शतरंज के टुकड़े की कनेक्टिविटी का उपयोग करके बाढ़ भराव है। विशेष रूप से:

 1 1
1   1
  0
1   1
 1 1

(प्रारंभिक बिंदु है, 1 s जुड़ा कोशिकाओं को दिखाता है)

चुनौती

रिक्त स्थान और दीवारों के 2 डी ग्रिड और एक प्रारंभिक स्थान को देखते हुए, ग्रिड पर एक नाइट-फिल प्रदर्शन करें। सबसे छोटा कोड जीतता है।

नियम

  • आप इनपुट ले सकते हैं और अपनी पसंद के किसी भी प्रारूप में उत्पादन कर सकते हैं (छवि, स्ट्रिंग, सरणी, जो भी हो)। आप इनपुट ग्रिड के हिस्से के रूप में या एक अलग समन्वय के रूप में प्रारंभिक स्थान ले सकते हैं। इस स्पष्टीकरण के उद्देश्य के लिए, निम्नलिखित प्रारूप का उपयोग किया जाएगा:

    ########    # = wall
    ########    x = initial location
    ## x  ##
    ##    ##
    ########
    ##    ##
    ########
    ########
    
  • आउटपुट इनपुट ग्रिड की एक प्रति है जिसमें नाइट-फिल परिणाम जोड़ा गया है

  • आपका भरण स्थान या दीवारों के समान "रंग" में नहीं होना चाहिए, लेकिन प्रारंभिक स्थान मार्कर के समान हो सकता है। उदाहरण के लिए ऊपर दी गई छवि, एक मान्य आउटपुट होगा:

    ########    # = wall
    ########    @ = fill (could also have been x)
    ## @ @##
    ## @ @##
    ########
    ##@ @ ##
    ########
    ########
    
  • आप मान सकते हैं कि इनपुट ग्रिड में हमेशा सभी तरफ 2-सेल की दीवार होगी

  • आप मान सकते हैं कि प्रारंभिक स्थान एक दीवार के अंदर कभी नहीं होगा
  • आप मान सकते हैं कि ग्रिड कभी भी 1000x1000 से बड़ा नहीं होगा
  • बिल ठीक हैं
  • सबसे छोटा कोड (बाइट्स में) जीतता है

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

सभी परीक्षण मामलों में, #एक दीवार को दर्शाता है , खाली स्थान को दर्शाता है, और xभरण के प्रारंभिक स्थान को दर्शाता है। @उत्पादन भरण को दर्शाता है।

Input 1:

########
########
## x  ##
##    ##
########
##    ##
########
########

Output 1:

########
########
## @ @##
## @ @##
########
##@ @ ##
########
########

Input 2:

############
############
## ##    x##
## ##     ##
#####     ##
##        ##
############
############

Output 2:

############
############
## ##@@@@@##
##@##@@@@@##
#####@@@@@##
## @@@@@@@##
############
############

Input 3:

####################
####################
##  ##            ##
##  ##            ##
##  ##  ########  ##
##  ##  ########  ##
##  ##  ##    ##  ##
##  ##  ##    ##  ##
##  ##  ##    ##  ##
##  ##  ##    ##  ##
##  ##  ########  ##
##  ##  ########  ##
##  ##        ##  ##
##  ##       x##  ##
##  ############  ##
##  ############  ##
##                ##
##                ##
####################
####################

Output 3:

####################
####################
##@@##@@@@@@@@@@@@##
##@@##@@@@@@@@@@@@##
##@@##@@########@@##
##@@##@@########@@##
##@@##@@##    ##@@##
##@@##@@##    ##@@##
##@@##@@##    ##@@##
##@@##@@##    ##@@##
##@@##@@########@@##
##@@##@@########@@##
##@@##@@@@@@@@##@@##
##@@##@@@@@@@@##@@##
##@@############@@##
##@@############@@##
##@@@@@@@@@@@@@@@@##
##@@@@@@@@@@@@@@@@##
####################
####################

Input 4:

################
################
##           ###
##     x     ###
##  #######  ###
##  #######  ###
##  ##   ##  ###
##  ##   ##  ###
##  ##   ##  ###
##  ########  ##
##  ########  ##
##        ##  ##
##        ##  ##
################
################

Output 4:

################
################
##   @   @   ###
## @   @   @ ###
##  #######  ###
##@ ####### @###
##  ##   ##  ###
## @##   ##@ ###
##  ##   ##  ###
##@ ########@ ##
##  ########  ##
## @   @  ## @##
##   @   @##  ##
################
################

Input 5:

##############
##############
##         ###
##         ###
##         ###
##   ###   ###
##   #x#   ###
##   ###   ###
##         ###
##         ###
##         ###
##############
##############

Output 5:

##############
##############
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@###@@@###
##@@@#@#@@@###
##@@@###@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##############
##############

जवाबों:


4

ऑक्टेव, 73 बाइट्स

function a=F(s,a)do;b=a;until(a=~s&imdilate(a,de2bi(")0#0)"-31)))==b;a+=s

ऑनलाइन डेमो!

* कुछ परिवर्तन rextester में चलाने के लिए लागू किया।

एक फ़ंक्शन जो दीवार के रूप में 0 और 2 के 2d सरणी और प्रारंभिक स्थान के रूप में 0 और 1 के एक सरणी को लेता है और 0 और 1 और 2 के सरणी को आउटपुट करता है।


अच्छा लगता है, लेकिन क्या pkg load ...टेस्ट फ्रेमवर्क के बाहर चलने पर इसकी आवश्यकता नहीं है? यदि imdilateऔर de2biस्पष्ट आयात के बिना उपलब्ध हैं तो यह ठीक है।
डेव

@Dave के पिछले संस्करणों में, tio में स्थापित संस्करण सहित, यह एक पैकेज स्थापित करने के लिए संभव था ताकि यह स्वचालित रूप से लोड हो सके लेकिन अब मैंने देखा कि इस सुविधा को ओक्टेव से हटा दिया गया है! कृपया देखें इस
rahnema1

काफी उचित। जब तक आप किसी संस्करण को लक्षित कर रहे हैं, तब तक -autoउसे हटा दिया गया है, कोई समस्या नहीं है, और मुझे लगता है कि यह उत्तर किसी भी नई सुविधाओं का उपयोग नहीं करता है।
डेव

3

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

f=(s,l=s.search`
`,t=s.replace(eval(`/(x| )([^]{${l-2}}(....)?|[^]{${l+l}}(..)?)(?!\\1)[x ]/`),'x$2x'))=>s==t?s:f(t)

v=(s,l=s.search`
`)=>!/^(#+)\n\1\n[^]*x[^]*\n\1\n\1$/.test(s)|s.split`
`.some(s=>s.length-l|!/^##.+##$/.test(s))&&`Invalid Input`
textarea{font-family:monospace}
<textarea rows=11 cols=33 oninput=o.value=v(this.value)||f(this.value)></textarea><textarea rows=11 cols=33 id=o reaodnly></textarea>

फेलिंग कास्टल्स का पता लगाने के मेरे जवाब के आधार पर । xएस का उपयोग कर भरता है ।


क्या आप एक परीक्षण स्निपेट / लिंक जोड़ सकते हैं?
अधिकारिक

2

पायथन 3 , 394 387 381 356 352 347 319 313 154 139 बाइट्स

  • 154 बाइट्स केवल कोर फ़ंक्शन को गिनने के बाद और I / O फॉर्मेटिंग से संबंधित फ़ंक्शन को नहीं
  • सहेजे गए 7 बाइट्स: @Jacoblaw और @ Mr.Xcoder को धन्यवाद: except:0
  • सहेजे गए 28 बाइट्स !!!: थैंक्स टू @ नोव्स: try: exceptब्लॉक और कई अन्य गोल्फ से छुटकारा मिल गया
  • सुंदर परीक्षण मॉड्यूल के लिए @Dave का धन्यवाद।
  • सहेजे गए 6 बाइट्स: g[(a,b)]जैसे हीg[a,b]
  • @ नूर ने बचाए 15 बाइट !!! :
def x(g,a,b,m):
 if(a,b)in g and"!">g[a,b]or m:
  g[a,b]="@"
  for i in 1,2,-1,-2:
   for j in 3-abs(i),abs(i)-3:g=x(g,a+i,b+j,0)
 return g

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


1
क्या आप इसके except:passबजाय कर सकते हैं ?
जेकोब्ला

1
मुझे पूरा यकीन है कि यह भारी गोल्फ हो सकता है
श्री एक्सकोडर

2
@jacoblaw और भी बेहतर:except:0
मिस्टर एक्सकोडर


1
यहां TiO का थोड़ा आसान-टू-टेस्ट संस्करण है: इसे ऑनलाइन आज़माएं!
डेव

1

मैथेमेटिका, 117 बाइट्स

सामान्य कहानी: शक्तिशाली बिल्ट-इन लेकिन लंबे नाम ...

HighlightGraph[g,ConnectedComponents[h=Subgraph[g=KnightTourGraph@@Dimensions@#,Flatten@#~Position~1],#2]~Prepend~h]&

इसे वुल्फ्राम सैंडबॉक्स पर आज़माएं!

इसमें दो इनपुट लगते हैं: पहला है इनपुट ग्रिड ऑफ 0द एस (दीवारों के लिए) और 1एस (स्पेस के लिए ) के एक सरणी के रूप में , फिर शुरुआती स्थिति के लिए एक पूर्णांक, ग्रिड के ऊपर से नीचे तक पंक्तियों के साथ ग्रिड को क्रमबद्ध करके पाया जाता है, जैसे।

1  2  3  4  5
6  7  8  9  10
11 12 13 14 ...

आप फ़ंक्शन को कॉल कर सकते हैं जैसे HighlightGraph[...~Prepend~h]&[{{0,0,...,0}, {0,0,...,0}, ..., {0,0,...,0}}, 20]

KnightTourGraphसमारोह कोने वैध नाइट चालें करने के लिए इसी ग्रिड में पदों और किनारों के लिए इसी के साथ एक ग्राफ का निर्माण करती है, तो हम ले Subgraphकोने कि दीवारों नहीं हैं, और लगता है ConnectedComponentsशुरू करने शिखर की। आउटपुट एक ग्राफ है (घुमाया हुआ 90º एंटीक्लाकवाइज़ दिखाया गया है) जिसमें गैर-दीवार कोने लाल रंग पर प्रकाश डाला गया है, और भरे हुए कोने पीले रंग का प्रकाश डाला गया है। उदाहरण के लिए, पहले परीक्षण मामले के लिए, आउटपुट जैसा दिखता है:

परीक्षण मामले के लिए आउटपुट 1: कुछ क्षेत्रों के साथ एक ग्राफ पर प्रकाश डाला गया


खैर यह निश्चित रूप से परीक्षण करने के लिए सबसे कठिन की तरह लग रहा है! क्या आप इसका उदाहरण जोड़ सकते हैं कि इसे सैंडबॉक्स में कैसे लाया जाए, हममें से उन लोगों के लिए जिन्होंने हमारे विश्वविद्यालय के दिनों से गणितज्ञों को नहीं छुआ है? मेरे f=... f[{0,...,0;0,...,0}, 19]और इसी तरह के प्रयास बुरी तरह विफल रहे हैं।
डेव

@ दिया, आप HighlightGraph[g,ConnectedComponents[h=Subgraph[g=KnightTourGraph@@Dimensions@#,Flatten@#~Position~1],#2]~Prepend~h]&[{{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,1,1,1,1,0,0},{0,0,1,1,1,1,0,0},{0,0,0,0,0,0,0,0},{0,0,1,1,1,1,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}},20](पहले परीक्षण मामले के लिए) समारोह को लागू कर सकते हैं । मैंने उसे इस प्रश्न में संपादित किया है - खेद है कि इसके साथ शुरुआत नहीं हुई थी!
एक पेड़ नहीं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.