আমার কারাগার নিরাপদ?


58

আপনার চ্যালেঞ্জটি কারাগারের বিন্যাসের একটি ইনপুট দেওয়া হয়েছে যাতে কোনও বন্দী পালাতে পারে কিনা তা নিয়ে কাজ করে।

ইনপুট

ইনপুট যেমন একটি স্ট্রিং, এরে, অ্যারে ইত্যাদি ইনপুট তিন অক্ষরের গঠিত হবে অ্যারে এই ক্ষেত্রে কোন যুক্তিসংগত ফর্ম্যাটে হতে পারে #, Pএবং স্থান। ইনপুটটিতে অগত্যা তিনটি অক্ষর থাকবে না।

  • #: একটি প্রাচীর
  • P: একজন কারাবন্দী
  • স্থান: একটি খালি স্থান

একটি উদাহরণ ইনপুট দেখতে পাবেন:

#####
#   #
# P #
#   #
#####

আউটপুট

কারাগারটি সুরক্ষিত কিনা তার সত্যতা / মিথ্যা মান। জেলটি কেবল তখনই সুরক্ষিত থাকে যদি এটি সমস্ত বন্দীদের ধরে রাখতে পারে । যদি কোনও বন্দী পালাতে পারে তবে তা নিরাপদ নয়।

কোনও বন্দী যদি প্রাচীর দ্বারা সম্পূর্ণরূপে আবদ্ধ না হয় তবে সে পালাতে পারে। একটি তির্যক যোগদান সম্পূর্ণরূপে বদ্ধ।

পরীক্ষার মামলা

############# Truthy
# P #  P#   #
#   #   # P #
#############

############# Truthy
# P    P    #
#   #   # P #
#############

############# Falsey
# P #  P#   #
#   #   # P #
########## ##

####          Truthy
#   #
 #   #
  # P ####
  ####

P             Falsey

###           Falsey
# #
# #
### P

8
আমার অনুভূতি আছে এটি অনুলিপি বা কমপক্ষে অনুরূপ চ্যালেঞ্জ। যাইহোক ভাল চ্যালেঞ্জ।
জন ডিভোরাক

2
@ জনডভোরাক এটি হতে পারে তবে আমার সীমিত গুগল ফু দিয়ে আমি একটি সদৃশ খুঁজে পেলাম না।
TheLethalCoder

2
সম্পর্কিত (বন্যা ভরাট 2D গ্রিড)
Esolanging ফল

3
অনুভূমিক এবং উল্লম্ব আন্দোলন উভয়ই পালাতে প্রয়োজন যেখানে ফ্যালাসির উদাহরণ দেওয়া ভাল হবে।
xnor

2
@tfbninja সত্যিই একটি সদৃশ নয়। এটি একটি শব্দটি বাক্সে রয়েছে কিনা তা নির্ধারণ করতে প্রদত্ত ডেটা থেকে প্রোগ্রামটি এক্সট্রপোলেট করার চেষ্টা করতে বলে asks চিহ্নিত মানগুলিতে অনিবন্ধিত স্থান রয়েছে কিনা তা দেখার জন্য এটি বিএফএসের বন্যারফিল।
হাইপারনিউট্রিনো

উত্তর:


54

শামুক , 13 বাইট

!(t\P(o\ ),o~

এটি অনলাইন চেষ্টা করুন!

0সুরক্ষিত কারাগারগুলির জন্য সুরক্ষিত কারাগারগুলির প্রিন্টস এবং ইনপুটটির বাউন্ডিং বাক্সের আকার।

ধারণাটি হ'ল এটি নিশ্চিত করা যে আমরা ফাঁকা জায়গাগুলি (orthogonally ( ) কেবল স্থানের মধ্য দিয়ে চলে) Pএকটি থেকে সীমাবদ্ধ ঘরের বাইরে ( ~) বেরিয়ে যেতে পারি না otএকটি টেলিপোর্ট যাতে নির্বিশেষে যেখানে আমরা ম্যাচ প্রচেষ্টা এটা সব সম্ভব শুরুর অবস্থানের চেষ্টা করে একটি খুঁজে পেতে P


23
সঠিক সরঞ্জাম।
জোনাথন অ্যালান

16

সি # (.নেট কোর) , 485 480 474 470 421 408 বাইট

একেবারে ভুল সরঞ্জাম এবং পদ্ধতির, তবুও ...

  • L বাইট (এবং আরও অনেকগুলি) TheLethalCoder এর দরকারী টিপসের সাহায্যে সংরক্ষণ করা হয়েছে।
  • পূর্ণসংখ্যা ফিরে দিয়ে 4 বাইট সংরক্ষণ করা হয়।
  • 4 আরো বাইট প্রতিস্থাপন TheLethalCoder এ সংরক্ষিত ধন্যবাদ (আবার) ' 'সঙ্গে 32তুলনা করেন।
  • কোডটি রিফ্যাক্টর করে প্রচুর বাইট সংরক্ষণ করা হয়েছে।
  • 13 টি বাইটস ধন্যবাদ (কে অনুমান করেন?) TheLethalCoder। :) আমি তার পরামর্শগুলি ভুলে যেতে থাকি এবং সে আমাকে সেগুলি স্মরণ করিয়ে রাখে।
m=>{var p='P';int a=m.Length,b=m[0].Length,i=0,j,x,y;var c=new System.Collections.Stack();for(;i<a;i++)for(j=0;j<b;j++)if(m[i][j]==p)c.Push(new[]{i,j});while(c.Count>0){var t=(int[])c.Pop();x=t[0];y=t[1];if(x<1|x>a-2|y<1|y>b-2)return 0;foreach(var v in new[]{-1,1}){var z=x>0&x<a-1&y>0&y<b-1;if(z&m[x+v][y]==32){m[x][y]=p;c.Push(new[]{x+v,y});}if(z&m[x][y+v]==32){m[x][y]=p;c.Push(new[]{x,y+v});}}}return 1;}

এটি অনলাইন চেষ্টা করুন!

মূলত আমি পি এর অবস্থানগুলি প্রসারিত করি যখনই কোনও সাদা স্থান চারদিকে থাকে যতক্ষণ না এটি লেআউটের সীমানায় পৌঁছায় (না না)।

কিছু লাইসেন্স:

  • আমি char[][]লেআউটটির জন্য একটি ইনপুট হিসাবে ব্যবহার করি ।
  • ফেরত পাঠায় 0যেমন অনিরাপদ এবং 1যেমন নিরাপদ।

আপনি ফাংশনে অতিরিক্ত ইনপুট নিতে পারবেন না যাতে আপনি মাত্রা ধরে নিতে পারেন ... যদি না আপনি অন্যথায় আমাকে রাজি করার জন্য কোনও মেটা পোস্ট খুঁজে না পান।
TheLethalCoder

1>0এবং 1<0তুলনায় খাটো trueএবং false
TheLethalCoder

1
==0হয়ে যেতে পারে <1? আপনার অপ্রাসঙ্গিক সাদা স্থানের কমপক্ষে 1 বাইট রয়েছে। আপনি এস অপসারণ করতে পারেন new[]? (সর্বদা কাজ করে না তবে কখনও কখনও পছন্দ করে int[] n = {1,2,3};)।
TheLethalCoder

1
{m[x][y]= p; c.Push(new[]->{m[x][y]=p;c.Push(new[]
দ্য লেথলকোডার

1
আপনি chars এর সাথে তুলনা করতে পারেন intতাই আমার বিশ্বাস আপনি বাইটগুলি সংরক্ষণ ==' 'করার ==32জন্য প্রতিস্থাপন করতে পারেন । আপনার অনুরূপ তুলনাগুলিতেও এটি করতে সক্ষম হওয়া উচিত।
TheLethalCoder

15

পার্ল 5 , 69 বাইট

-10 বাইটস @ গ্রিমিকে ধন্যবাদ ।

-2 ধন্যবাদ বাইট @Neil

77 কোডের -p0পতাকা বাইট ।

/
/;$_=s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s?redo:!/\A.*P|P.*\Z|^P|P$/m

এটি অনলাইন চেষ্টা করুন!

কিছু সংক্ষিপ্ত ব্যাখ্যা:
ধারণাটি হ'ল Pবন্দীরা যেদিকে যেতে পারে সেখানেই রাখুন। যদি কোনও Pপ্রথম / শেষ লাইনে বা প্রথম / শেষ কলামে থাকে তবে বন্দিরা সেখানে যেতে পারে এবং পালাতে পারে, যার অর্থ জেলটি নিরাপদ নয়।
s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/sডানদিকে একটি স্থান প্রতিস্থাপন বা নর্দন Pএকটি সঙ্গে P, অথবা বাম বা উপরে একটি স্থান P
অবশেষে, /\A.*P|P.*\Z|^P|P$/mকোন লাইনটি একটি দিয়ে শুরু হয় বা শেষ হয় Pকিনা, বা সেখানে Pপ্রথম বা শেষ লাইনের একটি আছে কিনা তা পরীক্ষা করে দেখুন।


regexps ব্যবহার করে শীতল পদ্ধতির! (তবে স্থানটি বেড়ে গেলে সম্ভবত খুব ব্যয়বহুল)
অলিভিয়ার ডুলাক

আসলে, এটা না যে অদক্ষ। বিশেষ করে, এটা backtracking না অনেক প্রয়োজন হয় না, সেখানে নেই *বা +, দীর্ঘতম ম্যাচ এটা করতে পারেন একটি লাইন আকার ... এখন অবশ্যই যদি আপনি একটি পদ্ধতির আরো ম্যানুয়াল, উদাহরণস্বরূপ অ্যারে উপর ভিত্তি করে সঙ্গে তুলনা , তবে হ্যাঁ এটি বেশ অদক্ষ!
দাদা

1
দুই বদল মার্জ দ্বারা -6 বাইট: s/P(.{@{-}})? | (.{@{-}})?P/P$1$2P/s
গ্রিমি

1
মার্জ প্রতিকল্পন golfing দ্বারা -2 বাইট: s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
গ্রিমি

2
@ গ্রিমি রেজিএক্সের খুব সুন্দর গল্ফিং! ধন্যবাদ :)
দাদা

7

জাভাস্ক্রিপ্ট (ES6), 134 133 বাইট

অক্ষরের অ্যারের অ্যারে হিসাবে ইনপুট নেয়। রিটার্ন 0( 1নিরাপদ) বা (সুরক্ষিত)।

f=a=>a.map((r,y)=>r.map((c,x)=>c>'O'&&[-1,1,0,0].map((X,i)=>(R=a[y+1-'1102'[i]])&&R[X+=x]?R[X]<'!'?R[o=2,X]=c:0:o=0)),o=1)|o&2?f(a):o

পরীক্ষার মামলা


পারি &&গুলি শুধু হতে &?
TheLethalCoder

@TheLethalCoder প্রথমটি নয়, তবে দ্বিতীয়টি দ্বারা প্রতিস্থাপন করা যেতে পারে |। ধন্যবাদ!
আর্নল্ড

জানেন না স্প্রেড অপারেটর স্ট্রিংয়ে কাজ করেছে। কুল!
এ্যাববিস

6

জাভাস্ক্রিপ্ট (ES6), 121 বাইট

f=s=>s==(s=s.replace(eval('/( |P)([^]{'+s.search`
`+'})?(?!\\1)[ P]/'),'P$2P'))?!/^.*P|P.*$/.test(s)&!/^P|P$/m.test(s):f(s)

একটি নতুন লাইন-সীমাবদ্ধ আয়তক্ষেত্রাকার স্ট্রিং হিসাবে ইনপুট নেয়। নিরাপত্তাহীনতার জন্য 0 এবং নিরাপদে 1 প্রদান করে। ফেইলিং ক্যাসলগুলি সনাক্ত করার আমার জবাবের ভিত্তিতে , যদিও তারা একবার কারাগারের অন্বেষণ শেষ করে দেওয়ার চেয়ে প্রতিটি পদক্ষেপে একজন পালিয়ে যাওয়া বন্দীর জন্য পরীক্ষা করা আরও দক্ষ হবে।


2

অক্টাভা, 64 55 বাইট

@(a,z=padarray(a,[1 1]))~nnz(bwfill(z==35,1,1,4)&z>35);

এটি অনলাইন চেষ্টা করুন!

অথবা

সমস্ত পরীক্ষার কেস যাচাই করুন!

ব্যাখ্যা:

z=padarray(a,[1 1])       %add a boundary(of 0s) around the scene
F = bwfill(z==35,1,1,4)   %flood fill the prison starting from the boundary
~nnz(F&z>35);             %if position of at least a prisoner  is filled then the prison is not secure 

2

এপিএল (ডায়ালগ ক্লাসিক) , 40 বাইট

{⊃2≠(××{1⊃⌈/⍵,⍉⍵}⌺3 3)⍣≡(⌽1,⍉)⍣4'# '⍳⍵}

এটি অনলাইন চেষ্টা করুন!

'# '⍳⍵এনকোড '#', ' ', 'P'0 1 2 যেমন

(⌽1,⍉)⍣4 1s দিয়ে ঘিরে

(××{1⊃⌈/⍵,⍉⍵}⌺3 3)⍣≡ প্রতিবেশী সর্বাধিক-প্রতিবেশী বন্যা শূন্য-কোষে পূর্ণ

⊃2≠ আমাদের উপরের বাম দিকে কি 2 নেই?


1

স্ট্যাক্স , 35 বাইট সিপি 437

ä¬my■╡╤▲l@┤êr*⌠\¶ƒläå─▄¶√¿ [Uy⌠Só4↔

এটি অনলাইন চেষ্টা করুন!

পথ-অনুসন্ধানগুলি পরিচালনা করতে অভ্যন্তরীণ ছাড়া গল্ফিং ভাষা অবশ্যই এটি করতে পারে!

ব্যাখ্যা

ব্যাখ্যায় আনপ্যাক করা বিন্যাস ব্যবহার করে।

zLz]Y+Mys+y+{{{" P|P ""PP"Rm}Y!My!Mgphh' =
zLz]Y+Mys+y+                                  Surround the original matrix with four borders of whitespaces
            {                      gp         Iterate until a fixed point is found, return the single fixed point
             {              }Y!               Store the block in register Y and execute it
              {" P|P ""PP"Rm                  For each row, flood every space adjacent to a P with P.
                               My!            Transpose the matrix and do the flooding again
                                     hh' =    The final matrix has a space on the upper left corner that has not been flooded by P 

1

স্মাইলব্যাসিক, 154 146 বাইট

আমি আশা করছিলাম যে বন্যার ফিল ব্যবহার করে কোনও উত্তর এর চেয়ে কম হবে orter

DEF S P
FOR J=0TO 1X=1Y=1FOR I=0TO LEN(P)-1GPSET X,Y,-(P[I]=="#")GPAINT X,Y,-1,-J*(P[I]>@A)X=X*(P[I]>"31")+1INC Y,X<2NEXT
NEXT?!GSPOIT(0,0)GCLS
END

31সংশ্লিষ্ট ASCII অক্ষরটি প্রতিস্থাপন করুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.