একটি গ্রিড নাইট-ফিল


15

একটি নাইট ফিল ভরা নাইট দাবা টুকরো সংযোগ ব্যবহার করে একটি বন্যা পূরণ। বিশেষ করে:

 1 1
1   1
  0
1   1
 1 1

(0 প্রাথমিক বিন্দু, 1 গুলি সংযুক্ত ঘরগুলি দেখায়)

চ্যালেঞ্জ

স্পেস এবং দেয়ালের 2D গ্রিড এবং একটি প্রাথমিক অবস্থান দেওয়া, গ্রিডে একটি নাইট-ফিল করুন- সংক্ষিপ্ততম কোড জিতেছে।

বিধি

  • আপনি ইনপুট নিতে এবং আপনার পছন্দ মতো কোনও ফর্ম্যাটে আউটপুট উত্পাদন করতে পারেন (চিত্র, স্ট্রিং, অ্যারে যাই হোক না কেন) আপনি ইনপুট গ্রিডের অংশ হিসাবে বা পৃথক স্থানাঙ্ক হিসাবে প্রাথমিক অবস্থান নিতে পারেন। এই ব্যাখ্যাটির উদ্দেশ্যে, নিম্নলিখিত ফর্ম্যাটটি ব্যবহার করা হবে:

    ########    # = 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

অনলাইন ডেমো!

রেক্সটেস্টারে চালানোর জন্য কিছু পরিবর্তন প্রয়োগ করা হয়েছে।

একটি ফাংশন যা দেয়াল হিসাবে 0 ও 2 এর 2 ডি অ্যারে এবং প্রাথমিক অবস্থান হিসাবে 0 এবং 1 এর অ্যারে নেয় এবং 0 এবং 1 এবং 2 এর অ্যারে আউটপুট করে।


দেখতে দুর্দান্ত দেখাচ্ছে, কিন্তু pkg load ...পরীক্ষার কাঠামোর বাইরে চলে যাওয়ার সময় কি এই দরকার নেই ? যদি imdilate& de2biসুস্পষ্ট আমদানি ছাড়াই উপলব্ধ থাকে তবে তা ঠিক।
ডেভ

@ ডেভ অষ্টাওয়ার পূর্ববর্তী সংস্করণগুলিতে, টিও-তে ইনস্টল করা সংস্করণ সহ, কোনও প্যাকেজ ইনস্টল করা সম্ভব হয়েছিল যাতে এটি স্বয়ংক্রিয়ভাবে লোড হতে পারে তবে এখন আমি লক্ষ্য করেছি যে এই বৈশিষ্ট্যটি অষ্টক থেকে সরানো হয়েছে! দয়া করে দেখুন এই
rahnema1

যথেষ্ট ফর্সা। যতক্ষণ আপনি কোনও সংস্করণটিকে -autoমুছে ফেলার আগে চিহ্নিত করেছিলেন ততক্ষণ কোনও সমস্যা নেই এবং আমি অনুমান করছি যে এই উত্তরটি কোনও নতুন বৈশিষ্ট্য ব্যবহার করে না।
ডেভ

3

জাভাস্ক্রিপ্ট (ES6), 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 বাইট এবং আই / ও ফর্ম্যাট সম্পর্কিত ফাংশনটি নয়
  • 7 টি বাইট সংরক্ষণ করেছেন: @ জ্যাকোবলা এবং @ মিঃ এক্সকোডারকে ধন্যবাদ: except:0
  • ২৮ বাইট সংরক্ষিত !!!: @ ওভিএসকে ধন্যবাদ: try: exceptব্লক এবং অন্যান্য বেশ কয়েকটি গল্ফ থেকে মুক্তি পেয়েছে
  • সুন্দর পরীক্ষার মডিউলটির জন্য ডেভকে ধন্যবাদ Thanks
  • 6 বাইট সংরক্ষণ করা হয়েছে: g[(a,b)]ঠিক হিসাবেg[a,b]
  • @Nore 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
@ জ্যাকোব্লা আরও উন্নত:except:0
মিঃ এক্সকোডার


1
এখানে টিআইওর একটি সামান্য সহজ-পরীক্ষার সংস্করণ: এটি অনলাইনে চেষ্টা করুন!
ডেভ

1

গণিত, 117 বাইট

সাধারণ গল্প: শক্তিশালী বিল্ট-ইনগুলি তবে দীর্ঘ নামগুলি ...

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

ওল্ফ্রাম স্যান্ডবক্সে এটি ব্যবহার করে দেখুন!

এটি দুটি ইনপুট লাগে: প্রথমটি ইনপুট গ্রিডটি হ'ল অ্যারের 0(দেয়ালের জন্য) এবং 1গুলি (স্পেসগুলির জন্য) হিসাবে, তারপরে শুরু অবস্থানের জন্য একটি একক পূর্ণসংখ্যার, উপরের থেকে নীচে পর্যন্ত সারিগুলির সাথে গ্রিডকে সংখ্যায়িত করে পাওয়া যায় eg

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](প্রথম পরীক্ষার ক্ষেত্রে) এর সাথে ফাংশনটি শুরু করতে পারেন । আমি প্রশ্নটিতে এটি সম্পাদনা করেছি - দুঃখিত এটি শুরু করার মতো ছিল না!
কোনও গাছ নয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.