আপনার গাড়িটি কেবল ডানদিকে ঘুরবে!


49

ভূমিকা

আপনার কোনও দুর্ঘটনা আছে যে কোনও বাধা কোর্সে পালিয়ে যাওয়া গাড়িতে আটকা পড়ে যান। গাড়ির সমস্ত বৈশিষ্ট্য অ-প্রতিক্রিয়াশীল, স্টিয়ারিং সিস্টেমের জন্য সংরক্ষণ করুন, যা ক্ষতিগ্রস্থ হয়েছে। এটি সরাসরি চালনা করতে পারে, বা এটি ডানদিকে ঘুরতে পারে। গাড়িটি কি সুরক্ষার পথে পরিচালিত হতে পারে?

বলবিজ্ঞান

আপনার গাড়িটি 8x8 মানচিত্রের উপরের-বাম কোণে শুরু হয় এবং নীচের ডানদিকে কোণায় সুরক্ষিত হওয়ার চেষ্টা করছে। 90-ডিগ্রি বৃদ্ধিতে পরিমাপ করা গাড়ির একটি ওরিয়েন্টেশন (শুরুতে ডানদিকে) রয়েছে। গাড়ি দুটি ক্রয়ের মধ্যে একটি সম্পাদন করতে পারে:

  1. এক স্কোয়ার এগিয়ে চালান, বা
  2. 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘুরুন, তারপরে এক বর্গক্ষেত্র এগিয়ে যান

নোট করুন যে গাড়িটি একটি একক স্কোয়ারে 180-ডিগ্রি টার্ন সম্পাদন করার জন্য পর্যাপ্ত পরিমাণে ঘুরতে অক্ষম।

কিছু স্কোয়ার বাধা। গাড়ি যদি কোনও বাধা স্কোয়ারে প্রবেশ করে তবে এটি ক্র্যাশ হয়ে যায়। 8x8 কোর্সের বাইরের সমস্ত কিছু বাধা হিসাবে ধরে নেওয়া হয়, সুতরাং কোর্সটি চালানো ক্রাশের সমতুল্য।

নীচের-ডান বর্গক্ষেত্রটি নিরাপদ বর্গক্ষেত্র, যা গাড়ীটিকে বাধা কোর্স থেকে বাঁচতে দেয়। প্রারম্ভিক বর্গক্ষেত্র এবং সুরক্ষিত বর্গক্ষেত্রকে বাধা না বলে ধরে নেওয়া হয়।

কার্য

আপনাকে অবশ্যই এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা তার ইনপুট হিসাবে 8x8 অ্যারে (ম্যাট্রিক্স, তালিকাগুলির তালিকা ইত্যাদি) গ্রহণ করবে, যা বাধা কোর্সের প্রতিনিধিত্ব করবে। প্রোগ্রামটি একটি বুলিয়ান, বা অনুরূপ সত্যবাদী কিছু প্রত্যাবর্তন করে বা প্রিন্ট করে। যদি গাড়িটি ক্র্যাশ না করে নিরাপদ স্কোয়ারে পরিণত করা সম্ভব হয় (যেমন, মানচিত্রটি সমাধানযোগ্য হয়) তবে আউটপুটটি Trueঅন্যথায়, তা False

স্কোরিং

স্ট্যান্ডার্ড কোড গল্ফ নিয়ম - বিজয়ী হ'ল সর্বনিম্ন বাইট সহ কোড।

বোনাসেস:

  • যদি, একটি দ্রবণযোগ্য মানচিত্রের জন্য, আপনার কোডটি ড্রাইভার ইনপুটগুলির একটি বৈধ সিরিজ আউটপুট দেয় যা গাড়িটিকে নিরাপদ স্কোয়ারের দিকে পরিচালিত করে, আপনার স্কোর থেকে 10 শতাংশ পয়েন্ট বাদ দেয়। উদাহরণ আউটপুট ফর্ম্যাট হতে পারে SRSSR(সরল, ডান, সরল, সরল, ডান নির্দেশ করে)। এই আউটপুট মান Trueআউটপুট প্রতিস্থাপন করবে ।

  • যদি, অবিস্মরণযোগ্য মানচিত্রের জন্য, আপনার কোডের আউটপুট এমন পরিস্থিতিগুলির মধ্যে পার্থক্য করে যেখানে ক্রাশটি অনিবার্য, এবং পরিস্থিতি যেখানে বাধা কোর্সে চিরতরে গাড়ি চালানো সম্ভব, আপনার স্কোর থেকে 10 শতাংশ পয়েন্ট বাদ দিন। উদাহরণস্বরূপ আউটপুট হতে পারে Crashযদি ক্র্যাশ অনিবার্য হয় বা Stuckগাড়ি চিরতরে বাধা কোর্সে আটকে থাকে। এই আউটপুটগুলি Falseঅদৃশ্যযোগ্য মানচিত্রের জন্য স্ট্যান্ডার্ড আউটপুট প্রতিস্থাপন করবে ।

উদাহরণ

প্রোগ্রামটি যদি কোনও 8x8 অ্যারে দেওয়া থাকে তবে:

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

এটি এর মতো একটি মানচিত্র হিসাবে ব্যাখ্যা করা হবে, যেখানে কালো স্কোয়ারগুলি বাধা নির্দেশ করে:

এখানে চিত্র বর্ণনা লিখুন

এবং একটি সম্ভাব্য সমাধান হতে পারে:

এখানে চিত্র বর্ণনা লিখুন

যেহেতু একটি সমাধান বিদ্যমান, প্রোগ্রামটি Trueএই মানচিত্রের জন্য ফিরে / মুদ্রণ করা উচিত । এখানে প্রদর্শিত চালগুলির ক্রমটি হ'ল SSSSRSRRRSRSSRRRSSRSSS


2
আমি এবং এর জন্য কিছু অবিশ্বাস্যরকম সহজ টেস্ট কেস লিখেছিলাম । তারা এখানে দীর্ঘ কারণ তারা এখানে। সারি 2 টি ভরাট, সমস্ত কিছু খালি -> । সারি 7 টি ভরাট, সমস্ত কিছু খালি ->CrashStuckCrashStuck
আন্ডারগ্রাউন্ডোমোনাইল

3
আমি শতাংশ পয়েন্ট সম্পর্কে বিভ্রান্ত (শতাংশের বিপরীতে)। উভয়ই বোনাস পাওয়া আপনার স্কোরকে ০.৯ দ্বারা গুন করে। উভয়ই এটিকে 0.8 বা 0.9 ^ 2 দিয়ে গুণবে?
আন্ডারগ্রাউন্ডোমোনাইল

3
অবশ্যই, এস এবং সি ভাল আছে। আমার ফলাফলগুলি কেবল পরামর্শ ছিল।
ফোসজেন

13
"দুটি ভুল একটি অধিকার দেয় না, তবে তিনটি বামনাই করে।" - বাবা।
hoosierEE

2
"আপনার গাড়িটি কেবল শূন্য বা তিনটি বামন করতে পারে!"
শুক্র

উত্তর:


17

জাভাস্ক্রিপ্ট (ES6) - 122 124 148 162 172 178 177 187 190 193 208 বাইট

এই কোডটি কীভাবে উন্নত করবেন সে সম্পর্কে সহায়ক পরামর্শের জন্য অপটিমাইজার এবং ডকম্যাক্সকে অনেক ধন্যবাদ:

F=a=>(D=(x,y,d)=>!D[i=[x,y,d]]&&(D[i]=1,x-=~d%2,y-=~-~d%2,x*y==49||!((x|y)&8||a[y][x])&&(D(x,y,d)||D(x,y,~-d%4))),D(-1,0))

trueদ্রবণযোগ্য এবং false(মিথ্যা) অবিশ্বাস্যর জন্য ফেরত (সত্যবাদী) ।

জাভাস্ক্রিপ্ট ১.7 বৈশিষ্ট্য সবেমাত্র কেবল ফায়ারফক্সে কাজ করে।

পরীক্ষা বোর্ড


1
এই 193 বাইট: D=(x,y,d,t,a)=>!t[i=x+y*8+d*64]&&(t[i]=1,x+=d==0?1:d==2?-1:0,y+=d==1?1:d==3?-1:0,x==7&&y==7||!((x|y)&~7||a[y][x])&&G(x,y,d,t,a));G=(x,y,d,t,a)=>D(x,y,d,t,a)||D(x,y,d+1&3,t,a);F=a=>G(0,0,0,[],a)
অপ্টিমাইজার 14

1
172: D=d=>!t[i=x+y*8+d/4]&&(t[i]=1,x+=d?d^2?0:-1:1,y+=d^1?d^3?0:-1:1,x==7&&y==7||!((x|y)&~7||b[y][x])&&G(x,y,d));G=(X,Y,d)=>D(d,x=X,y=Y)||D(d+1&3,x=X,y=Y);F=a=>G(0,0,0,b=a,t={})- পরীক্ষিত।
অপ্টিমাইজার

1
@ অপ্টিমাইজার আমি এখনও দ্বিতীয় পরীক্ষার ক্ষেত্রে সত্য হয়ে উঠছি [[0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]। যে মিথ্যা দেওয়া উচিত।
আমি এবং আমার বিড়াল

2
কারণ xএবং যেহেতু yউভয় বিশ্বব্যাপী, আপনি পৃষ্ঠাটি পুনরায় লোড করার আগে দুটি টেস্টকেস চালাতে পারবেন না ...
অপ্টিমাইজার

1
আপনি প্রতিস্থাপন 9 আরো একটি মোট সঞ্চয় করতে পারেন x+=d?d^2?0:-1:1সঙ্গে x+=d&1?0:1-dএবং y+=d^1?d^3?0:-1:1সঙ্গে y+=d&1&&2-d
ডকম্যাক্স 4:34

10

পাইথন 2 - 123 125 133 146 148 150 154 160

Trueসাফল্য, Falseব্যর্থতা উপর।

def f(h=1,v=0,b=0,x=0,y=0,c=[]):s=x,y,h,v;a=b,x+h,y+v,c+[s];return(s in c)==(x|y)&8==b[y][x]<(x&y>6or f(h,v,*a)|f(-v,h,*a))

আপনার অবশ্যই ইনপুট সরবরাহ করতে হবে f(b=var_containing_board)

লাম্বদা সংস্করণ - 154

রিটার্নস 0(falsy) ব্যর্থতার জন্য, Trueসাফল্যের জন্য।

F=lambda b,x=0,y=0,h=1,v=0,c=[]:0if[x,y,h,v]in c or x|y>7or x|y<0 or b[y][x]else x&y==7or F(b,x+h,y+v,h,v,c+[[x,y,h,v]])or F(b,x+h,y+v,-v,h,c+[[x,y,h,v]])

লাম্বদার চেয়ে ফাংশনটি আরও ছোট করার জন্য উইল এবং ব্র্যান্ডনের ধন্যবাদ Thanks আরও অনুভূমিক স্ক্রোলিং যুক্ত করার জন্য: ডি

উন্নততর বিট-বাশিং এবং যুক্তির জন্য xnor ধন্যবাদ!

সম্পাদনা দ্রষ্টব্য: আমি যুক্তিযুক্ত আত্মবিশ্বাসী যে b[y][x]সীমার বাইরে যাওয়ার সময় কখনও কার্যকর করা হবে না। যেহেতু আমরা বোর্ডের বাইরে আছি, ইতিহাস চেক s in cহবে False। তারপরে বাউন্ডারি চেক (x|y)&8হবে 8। তারপরে পাইথন এমনকি সর্বশেষ মানটিও পরীক্ষা করবে না ==কারণ প্রথম দুটি ইতিমধ্যে পৃথক।


1
ক্রিয়ামূলক সংস্করণ দুটি আইএফ সংযুক্ত করতে পারে যা উভয়ই ফিরে আসে; যেমন আগমন একা কোনওটিই falsy হয় ফেরৎ, এছাড়াও আপনি প্রত্যুত্তর দেন .just 0. ফিরে যাওয়ার প্রয়োজন হবে না;)
উইল

আপনি চেক টুসকি যদি আপনি খুব উভয় Ifs একত্রিত করতে পারেন
উইল

আপনি উভয় রিটার্ন বিবৃতি একত্রিত করতে পারেন?
ব্র্যান্ডন 18

1
@ উইল থ্যাঙ্কস, আমি জানতাম যে এটি করার আরও ভাল উপায় ছিল: ডি ওম, আমি সরানোর কোনও স্থান খুঁজে পাইনি যা আমার সিনট্যাক্স ত্রুটির কারণ হবে না। আমি কেন সত্যিই x|y>7orকাজ করি না কেন x|y<0orনা ...
FryAmTheEggman

1
আপনি একটি অক্টাল আক্ষরিক সাথে শুরু করতে পারেন 0o
feersum

9

সি (জিএনইউ-সি), 163 বাইট * 0.9 = 146.7

# সি (জিএনইউ-সি), 186 বাইট * 0.9 = 167.4

আমার নতুন সংস্করণটি স্বাক্ষরবিহীন পূর্ণসংখ্যার চেয়ে স্বাক্ষরযুক্ত ব্যবহার করে। আগে আমি স্বাক্ষর করা ডান শিফট সম্পর্কে ভয় পেয়েছিলাম, কিন্তু আমি বুঝতে পেরেছি যেহেতু সাইন বিটটি গোল স্কোয়ার, এর পরে কী ঘটে তা বিবেচ্য নয়।

ফাংশনটি 64৪-বিট পূর্ণসংখ্যার আকারে বিটের একটি অ্যারে নেয় (অবরুদ্ধ স্কোয়ারগুলি উপস্থাপন করে)। আপনি কোনও বই পড়তে পারেন ঠিক তেমনভাবে বিটগুলি সর্বাধিক তাৎপর্যপূর্ণভাবে সাজানো হয়। এটি ক্র্যাশের জন্য -১, চিরকালের জন্য গাড়ি চালানোর জন্য 0 বা নীচে ডান কোণে পালানোর জন্য 1 প্রদান করে।

g(long long o) {
    typeof(o) a=0,i=255,r=1,u=0,l=0,d=0,M=~0LLU/i,D;
    for( ;i--;d = D<<8&~o)
        a |= D = d|r,
        r = (r|u)*2&~M&~o,
        u = (u|l)>>8&~o,
        l = ((l|d)&~M)/2&~o;
    return a<0?:-!(d|r|u|l);
}

পরীক্ষা প্রোগ্রাম

f(long long o){typeof(o)a=0,i=255,r=1,u=0,l=0,d=0,M=~0LLU/i,D;for(;i--;d=D<<8&~o)a|=D=d|r,r=(r|u)*2&~M&~o,u=(u|l)>>8&~o,l=((l|d)&~M)/2&~o;return a<0?:-!(d|r|u|l);}
{
    char* s[] = {"Crash", "Stuck", "Escape"};
    #define P(x) puts(s[f(x)+1])
    L ex = 0x4640500C0A034020;
    P(ex);
    L blocked = 0x4040404040404040;
    P(blocked);

    L dead = 0x10002;
    P(dead);

    return 0;
}

আউটপুট

Escape
Stuck
Crash

পাইথন অ্যারে-থেকে-হেক্স রূপান্তরকারী:

a2b=lambda(A):"0x%X"%sum(A[i/8][i%8]<<i for i in range(64))

1
(14 memset(&M,~1,8)টি অক্ষর) দিয়ে (15 টি অক্ষর) প্রতিস্থাপন করুন M=~(-1ULL/255)
আর ..

@ আর .. চমৎকার! -4 বাইট থেকে।
ফেয়ারসাম

2
আমি ইনপুট ফর্ম্যাটটি পছন্দ করি - খুব দুর্দান্ত!
ফসজিন

আমি 'ক্র্যাশ' পেয়ে করছি P(0x00fefefefefefefe);। = (উপরের ডান সরাসরি শট, এক পালা, সরাসরি কোণ হতে উচিত একই P(0x00eeeeeeeeeeeeee);। (4 র্থ কর্নেল উপর কানাগলি) আমি তোমাদের দায়িত্ব অর্পণ করা প্রয়োজন মনে করি না aপ্রাথমিকভাবে।

@ টলোস আপনি সারি / কলাম-প্রধান আদেশ স্থানান্তরিত করেছেন। উপরের সারি এবং ডান কলামটি খোলার জন্য এটি হওয়া উচিত 0x7f7f7f7f7f7f7f00। এছাড়াও এটি আরম্ভ করা প্রয়োজন aকারণ পরে এটি কেবল অতিরিক্ত বিটগুলিতে ওরিং দ্বারা সংশোধন করা হয়, তাই আমি প্রাথমিকভাবে অযাচিত বিট সেট করতে পারি না।
ফেয়ারসাম

6

পাইথন, 187 213

207 অক্ষর, মুদ্রণের পথে 10% বোনাস

b=map(ord," "*9+" ".join("".join("o "[i]for i in j)for j in input())+" "*9)
def r(p,d,s):
 p+=(1,9,-1,-9)[d]
 if b[p]&1<<d:b[p]^=1<<d;return(s+"S")*(p==79)or r(p,d,s+"S")or r(p,(d+1)%4,s+"R")
print r(8,0,"")

পরীক্ষার ইনপুটটিতে এটি কিছুটা পৃথক পথ খুঁজে পায়: SSSSRSRSRRSSRSSRRSRSSRSSSSS

সাধারণ পন্থাটি হ'ল প্রথমে ইনপুটটিকে একটি স্পেস এবং এসে রূপান্তর করা o। স্পেসগুলির একটি হেক্সাস রয়েছে 20, সুতরাং চারটি নিম্ন বিটটি সেট করা নেই। oএকটি হেক্স আছে 6F, তাই কম চার বিট সব সেট করা হয়।

oবোর্ডের চারপাশে একটি সীমানা স্থাপন করা হয় যাতে আমাদের খারাপ সূচকগুলি নিয়ে চিন্তা করতে হবে না।

বোর্ডের ওপরে চলার সাথে সাথে আমরা প্রতিটি টাইলের বিটগুলি ব্যবহার করে দেখতে পারি যে সেই দিক থেকে আসার সময় আমাদের পাস হতে দেওয়া হচ্ছে কিনা। এইভাবে, আমরা অসীম লুপগুলি এড়িয়ে চলি। টাইল প্রতি একক বুলিয়ান যথেষ্ট নয়, কারণ আপনার প্রস্থানের দিকটি আপনার প্রবেশের দিকের উপর নির্ভর করে, তাই টাইলগুলি দুবার পরিদর্শন করা যেতে পারে।

তারপরে আমরা নিরাপদ পথের জন্য পুনরাবৃত্তি অনুসন্ধান করি।


3
"আপনার গাড়িটি 8x8 মানচিত্রের উপরের-বাম কোণে শুরু হয়" - আপনি কি ইত্যাদির 9জায়গায় হার্ডকোড করতে পারবেন না w=len(b[0])+1?
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান আপনাকে ধন্যবাদ, আমি কীভাবে এটিকে উপেক্ষা করতে পারি? : ডি
Will

আপনি আপনার ত্রৈমাসিকের বিবৃতিটি বিপরীত করতে এবং এর সাথে প্রতিস্থাপন p==79করতে পারেন p-79। আমি উভয় উপায়ে এটির আগে একটি স্থান ছাড়াই একটি সিনট্যাক্স ত্রুটি পেয়েছি else। আমি মনে করি যে কৌশলটি কেবল তার সাথেই কাজ করে if
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান আমার মনে হয় পুনরাবৃত্তি হওয়ার আগে গভীরতা পরীক্ষাটি করতে হবে? আমি পরিবর্তে বুলিয়ান দ্বারা একটি গুণ সঙ্গে খেলছি।
উইল

7
আমি সবেমাত্র একটি ঝরঝরে কৌশল পেয়েছি। আপনি সম্ভবত এটি জানেন যে -~x== x+1তবে উভয় অ্যানারি অপারেটরের গুন, বিভাগ এবং মডুলাসের চেয়ে বেশি অগ্রাধিকার রয়েছে! তাই (d+1)%4হতে পারে -~d%4! এটি কাজ করে x-1তবে ~-xপরিবর্তে ব্যবহার করবে use
FryAmTheEggman

6

জাভাস্ক্রিপ্ট - 270 - 20% = 216 262 - 20% = 210 বাইট

যেহেতু উভয় বোনাস উপার্জন কমপক্ষে একটি সমাধান হওয়া উচিত (এবং এটি একটি হাস্যকর স্ট্যাকের গভীরতার দিকে না ফেলে;) ...

minified:

V=I=>{n=[N=[0,0,0]];v={};v[N]='';O='C';for(S='';n[0];){m=[];n.map(h=>{[x,y,d]=h;D=i=>[1,0,-1,0][d+i&3];p=v[h];for(j=2;j--;){O=v[c=[X=x+D(j),Y=y+D(3-3*j)),d+j&3]]?'K':O;J=X|Y;J<0||J>7||I[Y][X]||v[c]?O:(m.push(c),v[c]=p+'SR'[j])}S=(x&y)>6?p:S});n=m;}return S||O;};

সম্প্রসারিত:

V = I => {
    n = [N=[0,0,0]];
    v = {};
    v[N] = '';
    O = 'C';

    for( S = ''; n[0]; ) {
        m = [];
        n.map( h => {
            [x,y,d] = h;
            D = i => [1,0,-1,0][d+i&3];
            p = v[h];
            for( j = 2; j--; ) {
                O = v[c = [X = x+D(j),Y = y+D(3-3*j),d+j&3]] ? 'K' : O;
                J = X|Y;
                J<0 || J>7 || I[Y][X] || v[c] ? O : (
                    m.push( c ),
                    v[c] = p + 'SR'[j]
                );
            }

            S = (x&y) > 6 ? p : S;
        } );
        n = m;
    }
    return S || O;
};

vকীগুলির সাথে একটি হ্যাশটেবল যা (x,y,d)(x, y) স্থানাঙ্ক এবং প্রবেশের দিকের সাথে সম্পর্কিত রাষ্ট্রীয় ট্রিপল d। প্রতিটি কীটির একটি যুক্ত মান রয়েছে যা কী দ্বারা চিহ্নিত অবস্থায় পৌঁছতে প্রয়োজনীয় S(সরল) স্ট্রিং এবং R(ডান দিকে ঘুরিয়ে) সরানো হয়।

কোডটি ত্রিগুনের একটি স্ট্যাকও বজায় রাখে (পরিবর্তনশীল n) যা এখনও প্রক্রিয়া করা হয়নি। স্ট্যাকের শুরুতে কেবল ট্রিপল (0,0,0) থাকে, রাজ্যের সাথে সম্পর্কিত যেখানে গাড়ীটি সরাসরি (0,0) ঘরে প্রদর্শিত হয়। বাইরের লুপে, for( S = ... )কোনও প্রস্রাবিত ট্রিপল বাকি আছে কিনা রুটিনটি পরীক্ষা করে। যদি তা হয় তবে এটি প্রতিটি অভ্যন্তরীণ লুপের মাধ্যমে অপসারণিত ট্রিপল চালায় n.map( ...

অভ্যন্তরীণ লুপটি পাঁচটি কাজ করে:

  1. বর্তমান অবস্থা থেকে বেরিয়ে আসা দুটি সম্ভাব্য পদক্ষেপ (সরাসরি চালনা, ডান দিকে ঘুরিয়ে) গণনা করে
  2. যদি এর কোনও একটি পদক্ষেপ ইতিমধ্যে হ্যাশটেবলে নিবন্ধিত রাষ্ট্রের দিকে পরিচালিত করে, তবে আরও প্রক্রিয়াজাতকরণের জন্য এটি উপেক্ষা করা হবে। আমরা ফলস আউটপুটটিকে K(আটকে) হিসাবে পতাকাঙ্কিত করি , তবে, যেহেতু আমরা কমপক্ষে একটি লুপ পেয়েছি যেখানে গাড়িটি ক্র্যাশ না করে চিরতরে বৃত্তাকারে চালিয়ে যেতে পারে।
  3. যদি কোনও রাষ্ট্র আইনী এবং উপন্যাস হয়, তবে এটি হ্যাশট্যাবলে ( v) এবং mবহিরাগত লুপের পরবর্তী পাসের জন্য প্রস্রাবিত ত্রিগুণগুলির স্ট্যাকের সাথে যুক্ত হবে
  4. যখন নতুন রাষ্ট্রটি নিবন্ধভুক্ত হয় v, তখন এর মানটি উত্পন্ন রাষ্ট্রের (মুভের ক্রম) যোগ Rবা Sবর্তমান পদক্ষেপের উপর ভিত্তি করে সেট করা হয়
  5. যদি xএবং yহয় তবে 7, উত্পন্ন রাষ্ট্রের মান (উত্পন্ন অবস্থায় পৌঁছতে চালিত ক্রমের ক্রম) অনুলিপি করা হয়েছে S, যেহেতু এই সরানো ক্রমটি সমস্যার সমাধান

অভ্যন্তরীণ লুপটি শেষ হওয়ার পরে n(স্ট্যাক) প্রতিস্থাপন করা হবে m(নতুন স্ট্যাক)।

বাহ্যিক লুপটি সমাপ্ত হওয়ার পরে (কোনও নতুন রাজ্যে পৌঁছানো হয়নি), ফাংশনটি তার আউটপুট ফেরত দেয়। যদি (7,7) কক্ষে পৌঁছে যায়, Sতবে এই ঘরের দিকে এগিয়ে যাওয়ার ক্রম থাকবে এবং এটি আউটপুট হবে। যদি কক্ষে পৌঁছানো না যায়, Sখালি স্ট্রিংটি হবে এবং রুটিনটি আউটপুটিংয়ের মধ্য দিয়ে যাবে O, যার মধ্যে Kকেবল একটি আটকে থাকা (আটকে) থাকবে এবং কেবল একটি লুপ পাওয়া গেলে, বা C(ক্র্যাশ) গাড়িটি অনিবার্যভাবে ক্র্যাশ করবে।


1
ওপি থেকে নিশ্চিতকরণ পাওয়া গেছে, আপনি 'ক্র্যাশ' এবং 'স্টক' এর নাম 'সি' এবং 'এস' রেখে দিতে পারেন।
FryAmTheEggman

আহ। তাহলে কিছুটা সাশ্রয় হয়। ধন্যবাদ। ;)
COTO

আপনার কোড কী করছে তা আপনি ব্যাখ্যা করতে পারেন? আমি এর মাথা বা লেজ বানাতে পারি না।
ফসজিন

@ ফসজিন: আমি একটি বিস্তারিত ব্যাখ্যা ইনলাইন অন্তর্ভুক্ত করেছি।
COTO

এটি একটি চালাক পদ্ধতি। কিছুই নষ্ট হয় না।
ফসগেইন

4

পাইথন 339 - 10% = 305 বাইট

আমি একটি পুনরাবৃত্তাকার গভীরতা-প্রথম অনুসন্ধান ব্যবহার করেছি, যা সাফল্যের মাধ্যমে তাড়াতাড়ি বন্ধ করা হয় exit। এছাড়াও আকারে সাফল্যের পথ মুদ্রণ 00001010101010101010101110100111001000, 0, সরাসরি জন্য 1ডান জন্য। উত্তরটি সর্বোত্তম হওয়ার চেয়ে দীর্ঘতর হবে since আমি নিশ্চিত অ্যালগরিদমে কিছু অপ্টিমাইজেশন বাইট গণনাটি কিছুটা নিচে আনতে পারে।

b=input()
D=[(-1,0),(0,-1),(1,0),(0,1)]
def a(l):
 x,y=0,0
 v=2
 for d in l:
  if d=='1':v=(v+1) % 4
  x+=D[v][0]
  y+=D[v][1]
  if x<0 or x>7 or y<0 or y>7:return 0,x,y
  if b[y][x]:return -1,x,y
 return 1,x,y
def c(l):
 if len(l) < 39:
  t,x,y=a(l)
  if t==1:
   if (x,y)==(7,7):
    print l;exit(0)
   c(l+"0")
   c(l+"1")
c("")
print 0

3
যেহেতু এই পাইথন 2 হয়, তাহলে আপনি, ইনডেন্ট জন্য ট্যাব এবং স্পেস মিশ্রিত করা যাবে মত aএর forলুপ। আপনার অপারেটরগুলির কাছাকাছি স্থানগুলিরও প্রয়োজন নেই, যেমন (v+1) % 4-> (v+1)%4। এছাড়াও আপনি ব্যবহার করে এক লাইন সম্মুখের দিকে একাধিক বিবৃতি যোগ দিতে পারেন ;যদি কোন ifবা forলাইন, যেমন উপর, ইত্যাদি c(l+"0");c(l+"1")। অন্যান্য বেশ কয়েকটি golfs: x,y,v=0,0,2, x|y>7 or x|y<0, x==y==7। শুভ কামনা :)
FryAmTheEggman
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.