গোলকধাঁধা সমাধান করা যাবে?


20

ধাঁধা

  • প্রিন্ট করুন 0 যদি কোনও গোলকধাঁধা এন * মি সমাধান করা যায় না
  • যদি কোনও গোলকধাঁধা এন * মি সমাধান করা যায় তবে 1 মুদ্রণ করুন (1 বা আরও বেশি উপায়ে)

(সুতরাং আমি কোনও পথ চাইছি না তবে এটি সমাধান করা যদি সম্ভব হয় !!!)

ইনপুট অ্যারে (2 ডি):

[[0,0,0,0,0,0,1],[0,0,0,0,0,1,0],[0,0,0,0,1,0,0],[1,0,0,0,0,0,0]]

XXXXXXXXX
XS     XX
X     X X
X    X  X
XX     FX
XXXXXXXXX

0 = can pass through
1 = can not pass trough
[0][n] is the last block of the first line
[m][0] is the first block of the last line

নিয়ম শুরুর অবস্থান 0,0 এবং শেষের অবস্থানটি n, m আপনি কেবল অনুভূমিক এবং উল্লম্বভাবে স্থানান্তরিত করতে পারেন সংক্ষিপ্ততম কোড জয়


ইনপুটটি স্ট্রিং বা অ্যারে হওয়া উচিত?
এপসিলাররা

3
(এন, মি) এ যদি 1 (প্রাচীর) থাকে তবে কোডটি 0 ফেরত দেওয়া উচিত?
ট্রিকোপল্যাক্স

3
(একটি দেয়ালের জন্য একই (0,0)?)
মার্টিন এন্ডার

3
আপনি বলছেন এটি একটি × এম গোলকধাঁধা, তবে আপনার সূচকটি বোঝায় যে এটি একটি (n + 1) × (মি + 1) গোলকধাঁধা।
নিক মাত্তিও

উত্তর:


7

সিজেম, 42 41 39 36 35 বাইট

Wq3>~_s,{{[{_2$+0<{e<_}*}*]}%z}*sW=

এই উত্তরের ধারণাগুলির ভিত্তিতে ।

4 বাইট অপ্টিমাইজার ধন্যবাদ।

ছক পূরণ করা:

[[0 0 0 0 0 0 1] [0 0 0 0 0 1 0] [0 0 0 0 1 0 0] [1 0 0 0 0 0 0]]

@ অপ্টিমাইজার এর জন্য ধন্যবাদ। তবে তারপরে আমি আরও একটি ছোট উপায় খুঁজে পেয়েছি ...
jimmy23013

1
q2Wts~_s,{{[{_2$+0<{e<_}*}*]}%z}*sW=- 36. যদিও এটি ধরে নিয়েছে যে ইনপুটটির প্রথম তিনটি অক্ষর হবে[[0
অপটিমাইজার

7

ডায়ালগ এপিএল, 27 টি অক্ষর

⊃⌽∨.∧⍨⍣≡1≥+/¨|∘.-⍨,(~×⍳∘⍴)⎕

মূল্যায়ন ইনপুট। এপিএল একটি ম্যাট্রিক্স এবং ভেক্টরগুলির একটি ভেক্টরের মধ্যে পার্থক্য করে। এই প্রোগ্রামটি অনুমান করে যে ইনপুটটি একটি ম্যাট্রিক্স।

(~×⍳∘⍴)Aসমান একটি কাঁটাচামচ (~A) × ⍳⍴A। এটি দু'বার উল্লেখ করা বা কোনও ভেরিয়েবল প্রবর্তন এড়াতে হবে ।

⍴Aএর আকার A। 4-বাই -7 ম্যাট্রিক্সের জন্য আকারটি 4 7

সূচক জেনারেটর হয়। ⍳4হয় 1 2 3 4। 4-বাই -7 ম্যাট্রিক্সে সজ্জিত ⍳4 7ভেক্টরগুলি (1 1)(1 2)...(4 7)

~A বিট ফ্লিপ A

×⍳⍴Aউল্টানো বিটগুলি দ্বারা গুণ করে আমরা সমস্ত বিনামূল্যে কোষের স্থানাঙ্কগুলি সংরক্ষণ করি এবং সমস্ত দেয়ালকে রূপান্তরিত করি0 0

,স্থানাঙ্ক জোড়াের ম্যাট্রিক্সকে বিকাশ করে, অর্থাৎ একে ভেক্টরে রৈখিক করে তোলে। এক্ষেত্রে ভেক্টর জোড় যুক্ত করে।

∘.-⍨Aবা A∘.-Aজোড়াযুক্ত উপাদানগুলি বিয়োগ করে A। মনে রাখবেন যে এখানে উপাদানগুলি Aনিজেরাই জোড়া হয়।

| পরম মান

+/¨পরম মান প্রতিটি জোড় যোগ। এটি আমাদের প্রাচীরের জন্য সংরক্ষণ করে গোলকধাঁসের প্রতিটি জোড়া কোষের মধ্যে গ্রিড দূরত্ব দেয়।

1≥আমরা প্রতিবেশীদের মধ্যে কেবল 1 এর চেয়ে বেশি দূরত্বে আগ্রহী, এটি দেয়ালও বাদ দেয় না। এখন আমরা একটি গ্রাফ সংলগ্ন ম্যাট্রিক্স আছে।

∨.∧⍨⍣≡ ফ্লয়েড - ওয়ারশালের ট্রানজিটিভ ক্লোজার অ্যালগরিদম

(f⍣n)A(এখানে ব্যবহৃত হয় না) যেখানে nপূর্ণসংখ্যা হয় শক্তি অপারেটর। তা প্রযোজ্য fকরার A nসময়: f f ... f A

(f⍣g)Aযেখানে gএকটি ফাংশন, স্থির পয়েন্ট অপারেটর, ওরফে "পাওয়ার সীমা"। এটা তোলে সিরিজ কম্পিউটিং উপর রাখে A, f A, f f A, ... যতক্ষণ না ((f⍣i)A) g ((f⍣(i+1))A)কিছু সত্য 'ফেরত পাঠায় i। এই ক্ষেত্রে আমরা ম্যাচটি ( ) হিসাবে ব্যবহার করি g

∨.∧⍨Aবা A∨.∧Aফ্লয়েডের অ্যালগরিদমের একটি পদক্ষেপ। f.gম্যাট্রিক্স গুণ (একটি সাধারণীকরণ ছাড়া কিছুই না +.×), এখানে আমরা একত্রে (ব্যবহার ) এবং অসম্বন্ধ ( স্থানে) +এবং ×

⊃⌽⍣≡পদক্ষেপটি পর্যাপ্ত সময় প্রয়োগ করার পরে এবং একটি স্থিতিশীল অবস্থায় পৌঁছানোর পরে , ফলাফলটি পেতে আমাদের অবশ্যই ম্যাট্রিক্সের উপরের-ডান কোণটি সন্ধান করতে হবে, সুতরাং আমরা এটিকে ফ্লিপ করব ( ) এবং প্রথমটি, উপরের-বাম আইটেমটি ( ) নেব ।

⍣≡এর পদক্ষেপের ভিজ্যুয়ালাইজেশন


5

পাইথন, 164 বাইট

def s(a):
 d=[(0,0)]
 while d:i,j=d.pop();a[i][j]=2;d+=[(x,y)for x,y in[(i-1,j),(i,j-1),(i+1,j),(i,j+1)]if len(a[0])>y>-1<x<len(a)and a[x][y]<1]
 return a[-1][-1]>1

আমি এটি পোস্ট করতে নারাজ কারণ এটি প্রায়োগিকভাবে আমি কীভাবে বন্যার ভরাট করতে পারি তা কেবল হালকাভাবে গল্ফ করে। তবে এখানে এটি যাইহোক।


4

পার্ল, 73 বাইট

Code৯ বাইটের কোডের জন্য 4 বাইট -n0E(2014 এর মধ্যে ট্যাগগুলি কীভাবে গণনা করা হয়েছে তা নিশ্চিত নয়, তাই আমি এটি 2 এর পরিবর্তে 4 এর জন্য গণনা করেছি, তবে এটি খুব বেশি গুরুত্ব দেয় না)।

/.*/;s/(^0|A)(.{@{+}})?0/A$2A/s||s/0(.{@{+}})?A/A$1A/s?redo:say/A$/+0

এটি অনলাইন চেষ্টা করুন! (এবং যদি আপনি এর 1111011সাথে লাইনটি প্রতিস্থাপন করেন 1111111তবে গোলকধাঁধাটি আর দ্রবণযোগ্য নয় এবং এর 0পরিবর্তে আউটপুটটি হবে 1: অনলাইনে চেষ্টা করে দেখুন! )

ব্যাখ্যা:

এই কোডটি গোলকধাঁধার প্রতিটি পৌঁছনীয় ঘর খুঁজে পাবে (এবং এটিকে Aএকটি দিয়ে চিহ্নিত করুন): যদি কোনও ঘর একটি দ্বারা চিহ্নিত একটি ঘরের সাথে স্পর্শ করে A, এটি পৌঁছনীয় এবং আমরা এটির সাথে Aখুব বেশি চিহ্নিত করেছি ; এবং আমরা আবার এটি করি ( redo)। এটি দুটি রেজেক্সকে ধন্যবাদ জানিয়েছে: s/(^0|A)(.{@{+}})?0/A$2A/sএকটি স্থান ডান বা একটি এর নীচে রয়েছে কিনা তা পরীক্ষা করে দেখছে A, যখন s/0(.{@{+}})?A/A$1A/sএকটি স্থান বামে বা এ এর ​​শীর্ষে আছে কিনা তা পরীক্ষা করে A। শেষে, যদি সর্বশেষ Aকক্ষটিতে এটি পৌঁছনীয় থাকে তবে তা নয় (তা say/A$/+0যাচাই করে; +0ফলাফলটি খালি স্ট্রিংয়ের পরিবর্তে 0বা 1তার পরিবর্তে এবং তা নিশ্চিত করার জন্য এখানে রয়েছে1 )।
নোটটি /.*/একটি সম্পূর্ণ লাইনের সাথে মিলবে, এইভাবে সেটিংস@+প্রথম রেখার শেষের সূচকটি, যা একটি লাইনের আকার হিসাবে দেখা দেয়, যা কোনও লাইনে রাখতে ব্যবহার দেয়.{@{+}}একটি লাইনে যতগুলি চরিত্র রয়েছে ঠিক তেমনটি মেলে ( @{+}এর সমতুল্য @+, তবে কেবলমাত্র প্রাক্তনটি রেজেক্সে ব্যবহার করা যেতে পারে)


জন্য এই পরীক্ষাটি ক্ষেত্রে আপনার কোড সমাধেয় চূড়ান্ত অবস্থান এমনকি যদি ধাঁধা বিবেচনায় 1
জিতসে

@ জিতস ভাল ক্যাচ আসলে, এটি ছিল কারণ টিআইও লিঙ্কগুলি সঠিক কোডটি ব্যবহার করছে না (আমার ধারণা এটি পূর্ববর্তী সংস্করণ ছিল এবং আমি এটি খুঁজে পাইনি)। উত্তরটি এখনও বৈধ এবং আমি টিআইও লিঙ্কগুলি আপডেট করেছি। আপনার উদাহরণটি ঠিক কাজ করে: অনলাইনে চেষ্টা করে দেখুন!
দাদা

হ্যাঁ সঠিক! স্পষ্টতার জন্য ধন্যবাদ, আমি এই পদ্ধতি পছন্দ করি।
জিতসে

@ জিটস ধন্যবাদ, এটি আমার প্রিয় গল্ফগুলির মধ্যে একটি :)
দাদা

3

রুবি, 133 130 129 টি অক্ষর

a=eval gets
f=->x,y{a[x][y]=1
[[-1,0],[1,0],[0,-1],[0,1]].map{|o|d,e=x+o[0],y+o[1]
f[d,e]if a[d]&&a[d][e]==0}}
f[0,0]
p a[-1][-1]

STDIN, আউটপুট 1বা STDOUT এ ইনপুট 0

বিরক্তিকরভাবে দীর্ঘ। এটি কেবলমাত্র 1এর থেকে বন্যা পূর্ণ করে (0, 0)এবং তারপরে "শেষ" বর্গক্ষেত্রটি কিনা তা পরীক্ষা করে 1


যদি ইতিমধ্যে (এন, মি) এ 1 থাকে তবে কি এই ধাঁধাটিকে দ্রবণীয় হিসাবে বিবেচনা করবে?
ট্রিকোপল্যাক্স

2

জাভা, 418 বাইট

import java.util.Scanner;public class Solvable{static int w,h;public static void main(String[] a){String[]i=new Scanner(System.in).nextLine().split(";");h=i.length+2;w=i[0].length()+2;int[]m=new int[w * h];for(int x=1;x<w-1;x++)for(int y=1;y<h-1;y++)m[y*w+x]=i[y-1].charAt(x-1)<'.'?0:1;f(m,w+1);System.out.println(m[w*h-w-2]>0?0:1);}static void f(int[]m,int i){if(m[i]>0){m[i]--;f(m,i-1);f(m,i+1);f(m,i-w);f(m,i+w);}}}

আমার প্রথম কোড গল্ফ আমি কেন জাভা বেছে নিলাম তা জানি না - এটি গল্ফিং এক্সডির পক্ষে খুব খারাপ

উদাহরণ ধাঁধাটি স্টিডিনের মাধ্যমে এইভাবে ইনপুট করা হবে:

......#;.....#.;....#..;#......

1
প্রো টিপ: আপনার বর্গ কিছু একটি অক্ষর দীর্ঘ নাম, মধ্যে স্থান খানা String[]এবং a, এবং বদলে stdin, যা অনুমোদিত হয় চেয়ে কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নিতে।
পাভেল

1

পাইথন 184 188

def f(a,x=0,y=0,h=[]):s=h+[[x,y]];X,Y=len(a[0]),len(a);return([x,y]in h)==(x>=X)==(y>=Y)==(x<0)==(y<0)==a[y][x]<(x==X-1and y==Y-1or f(a,x-1,y,s)|f(a,x+1,y,s)|f(a,x,y-1,s)|f(a,x,y+1,s))

এটি যেহেতু ভেবেছিল তার চেয়ে অনেক বেশি সময় পেল :( যাইহোক, আমি আরও একবার গল্ফ না করতে পারলে আমি একটি ব্যাখ্যা যুক্ত করব।


1

জে, 75 অক্ষর

সংলগ্ন ম্যাট্রিক্সের শক্তি (খুব সময় এবং স্মৃতি অক্ষম)। (এটিকে ইংরেজীতে শক্তি বলা হয়?)

   ({.@{:@(+./ .*.^:_~)@(+:/~@,*2>(>@[+/@:|@:->@])"0/~@,@(i.@#<@,"0/i.@#@|:)))

কিছু পরীক্ষার কেস:

   m1=. 0 0 0 0 0 0 1,. 0 0 0 0 0 1 0,.  0 0 0 0 1 0 0,. 1 0 0 0 0 0 0
   m2=. 0 1 1 ,. 0 0 0
   m3=. 0 1 0 ,. 1 1 0
   m4=. 0 1 1 0 ,. 0 0 1 0
   ({.@{:@(+./ .*.^:_~)@(+:/~@,*2>(>@[+/@:|@:->@])"0/~@,@(i.@#<@,"0/i.@#@|:))) every m1;m2;m3;m4
1 1 0 0


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