সাহায্য করুন, আমি একটি অনন্ত কারখানায় আটকা পড়েছি!


26

এই চ্যালেঞ্জ ঢিলেঢালাভাবে Zachtronics খেলা দ্বারা অনুপ্রাণিত হয় Infinifactory

আপনাকে পরিদর্শনকারীদের একটি আয়তক্ষেত্রাকার গ্রিডের শীর্ষ-দর্শন দর্শন দেওয়া হবে, যার দ্বারা প্রতিনিধিত্ব করা হয়েছে >v<^। কনভেয়রবিহীন কক্ষগুলি থাকতে পারে, স্পেস দ্বারা প্রতিনিধিত্ব করা হয়। এখানে একটি উদাহরণ:

> <vv    <
 v ^ >v v 
  >v^^>vv^
    ^>^ v 
>  v<v  >>
  >v v<^  

এই সেটআপটি স্পষ্টতই অসীম সংখ্যক স্পেস দ্বারা বেষ্টিত।

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

অবশ্যই, কার্গো এক সাথে সাথে বেশ কয়েকটি পরিবাহককে coverেকে দেবে, সুতরাং প্রতিটি পদক্ষেপে কার্গোটির দিক নির্ণয় করার নিয়ম এখানে রইল:

  1. বিপক্ষ পরিবাহকরা একে অপরকে বাতিল করে। সুতরাং যদি 3x2 কার্গো নীচের কোনও প্যাচগুলি আবরণ করে (স্পষ্টতার জন্য হাইফেন এবং পাইপগুলির সাথে বর্ণিত) তবে ফলাফলটি একই হবে:

    +---+   +---+   +---+
    |>>^|   |  ^|   |v^^|
    |^<<|   |^  |   |^^v|
    +---+   +---+   +---+
    

    একই জন্য এইগুলি হয়:

    +---+   +---+   +---+
    |v^<|   |   |   |><>|
    |>>>|   |>> |   |>><|
    +---+   +---+   +---+
    

    যেহেতু কার্গোরের নীচে একটি পরিবাহকের সঠিক অবস্থান অপ্রাসঙ্গিক, তাই আপনি কোন জোড় বাতিল করেন তা বিবেচ্য নয়।

    অন্যান্য নিয়মের আগে এই বাতিলকরণ প্রয়োগ করা হয়। অতএব, অন্যান্য নিয়মের জন্য কেবলমাত্র দুটি দিক থেকে কেবল পরিবহন থাকবে।

  2. কার্গো যদি কোনও পরিবাহককে মোটেই coverেকে না রাখে (হয় তবে সমস্ত পরিবাহক বাতিল করে দেয় কারণ এটি কেবলমাত্র স্পেসগুলি কভার করে বা এটি পুরোপুরি গ্রিডের বাইরে চলে গেছে), এটি বিশ্রামে আসে।
  3. কার্গো অন্য দিকের চেয়ে এক দিকের বেশি বাহককে coversেকে রাখে, কার্গো সেই দিকে চলে moves উদাহরণস্বরূপ, যদি একটি 3x2 কার্গো নিম্নলিখিত প্যাচটি coveredেকে রাখে

    >>
    ^>^
    

    এটি ডানদিকে চলে যাবে, কারণ আরও >কিছু রয়েছে ^। অন্যদিকে, এটি coveredেকে রাখলে

    >>^
      ^
    

    এই নিয়ম প্রযোজ্য হবে না, এর মধ্যে একটি টাই আছে, কারণ >এবং ^

  4. এটি কেবলমাত্র সেই ক্ষেত্রে ছেড়ে দেয় যেখানে সংলগ্ন দিকগুলির মধ্যে একটি টাই থাকে (বিপরীত দিকের মধ্যে একটি টাই বাতিল হয়ে যেত)। এই ক্ষেত্রে, পণ্যসম্ভার অক্ষ এটি আগে থেকেই চলছে বরাবর চলন্ত রাখে। যেমন একটি রাইট চলন্ত বা বাম-চলন্ত 3x2 পণ্যসম্ভার এখন প্যাচ আচ্ছাদন করা হয়

    >>^
    ^  
    

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

বিস্তারিত উদাহরণ

শীর্ষে পরিবাহক গ্রিড এবং একটি 3x2 কার্গো বিবেচনা করুন। নিম্নলিখিতটি প্রক্রিয়াটির ধাপে ধাপে দৃশ্যমান is প্রতিটি পদক্ষেপে গ্রিড সমন্বিত থাকে, যার সাথে কার্গো প্রতিনিধিত্ব করে #, একটি ছোট বাক্স যা কার্গো দ্বারা coveredাকা কনভেয়রকে দেখায়, বাতিল হওয়ার পরে পরিবাহকগুলির সাথে অন্য একটি বাক্স এবং যে নিয়মটি নির্ধারণ করে যে কার্গোটি সরানো হয়:

 ###vv    <    > <vv    <    > <vv    <    > <vv    <    > <vv    <    > <vv    <
 ###^ >v v     ###^ >v v      v ^ >v v      v ^ >v v      v ^ >v v      v ^ >v v 
   >v^^>vv^    ###v^^>vv^    ###v^^>vv^     ###^^>vv^      ###^>vv^      >###>vv^
     ^>^ v         ^>^ v     ### ^>^ v      ###^>^ v       ###>^ v        ###^ v 
 >  v<v  >>    >  v<v  >>    >  v<v  >>    >  v<v  >>    >  v<v  >>    >  v<v  >>
   >v v<^        >v v<^        >v v<^        >v v<^        >v v<^        >v v<^  

+---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+
|> <|  |   |  | v |  | v |  |  >|  |  >|  | >v|  | >v|  |>v^|  |> ^|  |v^^|  | ^^|
| v |  | v |  |  >|  |  >|  |   |  |   |  |   |  |   |  |  ^|  |   |  | ^>|  |  >|
+---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+

   Rule 3        Rule 4        Rule 3        Rule 4        Rule 4        Rule 3

 ================================================================================

 > <vv    <    > <###   <    > <vv    <
  v ###v v      v ###v v      v ###v v 
   >###>vv^      >v^^>vv^      >###>vv^
     ^>^ v         ^>^ v         ^>^ v 
 >  v<v  >>    >  v<v  >>    >  v<v  >>
   >v v<^        >v v<^        >v v<^  

+---+  +---+  +---+  +---+  +---+  +---+
|^ >|  |  >|  |vv |  | v |  |^ >|  |  >|
|v^^|  | ^^|  |^ >|  |  >|  |v^^|  | ^^|
+---+  +---+  +---+  +---+  +---+  +---+

   Rule 3        Rule 4        Rule 3

এই মুহুর্তে, কার্গো শেষ দুটি ফ্রেমের মধ্যে একটি লুপে প্রবেশ করে।

পরিবর্তে একটি 2x3 কার্গো বিবেচনা করুন:

 ##<vv    <    >##vv    <    > <vv    <    > <vv    <    > <vv    <    > <vv    <
 ## ^ >v v      ##^ >v v      ##^ >v v      v ^ >v v      v ^ >v v      v ^ >v v 
 ##>v^^>vv^     ##v^^>vv^     ##v^^>vv^     ##v^^>vv^      ##^^>vv^      >v^^>vv^
     ^>^ v         ^>^ v      ## ^>^ v      ## ^>^ v       ##^>^ v       ##^>^ v 
 >  v<v  >>    >  v<v  >>    >  v<v  >>    >##v<v  >>    > ##<v  >>    > ##<v  >>
   >v v<^        >v v<^        >v v<^        >v v<^        >v v<^        ## v<^  

 +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+
 |> |  |> |    | <|  |  |    |v |  |v |    | >|  | >|    |>v|  |>v|    |  |  |  |
 | v|  | v|    |v |  |v |    | >|  | >|    |  |  |  |    |  |  |  |    | v|  | v|
 |  |  |  |    | >|  |  |    |  |  |  |    |  |  |  |    | v|  | v|    |>v|  |>v|
 +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+

   Rule 4        Rule 3        Rule 4        Rule 3        Rule 3        Rule 3

 ================================================================================

 > <vv    <    > <vv    <    > <vv    <
  v ^ >v v      v ^ >v v      v ^ >v v 
   >v^^>vv^      >v^^>vv^      >v^^>vv^
     ^>^ v         ^>^ v         ^>^ v 
 > ##<v  >>    >  v<v  >>    >  v<v  >>
   ## v<^        ## v<^        >v v<^  
   ##            ##            ##
                 ##            ##
                               ##

 +--+  +--+    +--+  +--+    +--+  +--+
 | v|  | v|    |>v|  |>v|    |  |  |  |
 |>v|  |>v|    |  |  |  |    |  |  |  |
 |  |  |  |    |  |  |  |    |  |  |  |
 +--+  +--+    +--+  +--+    +--+  +--+

   Rule 3        Rule 4        Rule 2

শেষ পদক্ষেপে, বিধি 2 প্রয়োগ হয় কারণ কার্গো গ্রিডটি সরিয়ে নিয়েছে তাই এটি বিশ্রামে আসে এবং কোনও লুপ থাকবে না।

বিধি এবং অনুমান

আপনার ইনপুটটি কার্গোটির প্রস্থ এবং উচ্চতা সহ উপরে বর্ণিত হিসাবে পরিবাহক গ্রিড হবে। আপনি যে কোনও সুবিধাজনক ক্রম এবং ফর্ম্যাটে এই তিনটি পরামিতি নিতে পারেন। গ্রিডের জন্য, এর অর্থ এই যে আপনি পৃথক গ্রিড কোষগুলি অক্ষর দ্বারা উপস্থাপিত হওয়া অবধি যতক্ষণ না পৃথক গ্রিড কোষ অক্ষর দ্বারা প্রতিনিধিত্ব করা হয় ততক্ষণ আপনি নিউলাইন বা অন্যান্য অক্ষর দ্বারা পৃথক করা লাইনের সাথে একটি স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে বা অক্ষরের অ্যারের একটি অ্যারে পড়তে পারেন >v<^and স্পেস।

যদি কমপক্ষে দুটি ফ্রেমের লুপ বা কার্গো বিশ্রামে আসে তবে একটি মিথ্যা মানের সেটআপের ফলাফলের ফলে আপনাকে সত্যবাদী মানের আউটপুট করা উচিত ।

আপনি ধরে নিতে পারেন যে গ্রিডটি ফাঁকা স্থানগুলির সাথে একটি আয়তক্ষেত্রে প্যাড করা হবে এবং শুরুতে কার্গো গ্রিডের সাথে ফিট হবে।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।

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

পরীক্ষার কেসগুলি গ্রিড দ্বারা শ্রেণিবদ্ধ করা হয়।

Grid (2x2):

>v
^<

Width  Height  Loop?
1      1       True
1      2       True
2      1       True
2      2       False

Grid (3x3):

> v

^ <

Width  Height  Loop?
1      1       False
1      2       False
1      3       False
2      1       False
2      2       True
2      3       True
3      1       False
3      2       True
3      3       False

Grid (4x3):

>^>v
v^v 
^ <<

Width  Height  Loop?
2      2       False

Grid (6x5):

>v>v>v
^v^v^v
^v^v^v
^>^>^v
^<<<<<

Width  Height  Loop?
1      1       True
1      2       False
2      1       True
2      2       True
2      4       True
2      5       False
3      1       False
3      2       True
3      3       True
3      5       True
6      2       False
6      3       True
6      5       False

Grid (10x6):

> <vv    <
 v ^ >v v 
  >v^^>vv^
    ^>^ v 
>  v<v  >>
  >v v<^  

Width  Height  Loop?
1      1       False
2      3       False
2      6       False
3      2       True
5      4       False
6      1       True
10     6       False

পরীক্ষার কেসগুলির অতিরিক্ত সেট হিসাবে বিবেচনা করুন যে গ্রিডটি কেবলমাত্র ফাঁকা স্থানের অন্তর্গত রয়েছে এমন কোনও ইনপুট অবশ্যই মিথ্যা ফলাফল অর্জন করবে।

আমি সমস্ত পরীক্ষার কেস ম্যানুয়ালি পরীক্ষা করে দেখেছি, তাই যদি আপনি মনে করেন যে আমি কোনও ভুল করেছি।



4
@ ফ্যাটালাইজ আমি টুইচ প্লেমন পোকেমন ফ্ল্যাশব্যাক পাচ্ছি ...
আন্ডারগ্রাউন্ডোমোরিয়েল

"আপনার ইনপুটটি কার্গো প্রস্থ এবং উচ্চতা সহ উপরে বর্ণিত হিসাবে পরিবাহক গ্রিড হবে any আপনি কোনও সুবিধাজনক ক্রম এবং বিন্যাসে এই তিনটি পরামিতি নিতে পারেন।" - এর অর্থ কি আমরা কনভেয়র গ্রিডটি অ্যারের অ্যারে হিসাবে গ্রহণ করতে পারি? অর্থাত, একটি 2x2 গ্রিড [^^/v<]হয়ে যায় [[0,1] [0,1];[0,-1] [-1,0]]? বা আপনি কী বোঝাতে চাইছেন যে এটি আমাদের উপর নির্ভর করে এটি এসটিডিন, একটি স্ট্রিং ইনপুট, একটি চর অ্যারে ইনপুট ইত্যাদি? তবে এটি এখনও ^, v,> এবং <আকারে থাকা উচিত?
গ্লেন ও

@ গ্লেনো আপনি একটি নতুন লাইন (বা অন্যান্য চরিত্র) আলাদা করা স্ট্রিং, স্ট্রিংগুলির একটি অ্যারে বা একটি অ্যারে অক্ষরের অ্যারে নিতে পারেন, তবে প্রতিটি ঘর এখনও অক্ষর ><^vবা একটি স্থান দ্বারা প্রতিনিধিত্ব করা উচিত । আমি এটা স্পষ্ট করব।
মার্টিন এন্ডার

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

উত্তর:


7

রুবি, 306 298 251 204 198

->g,w,h{m=->y,x,d,v=[]{q=y,x
r=->s{([""]*h+g)[y+h,h].map{|l|(?x*w+l)[x+w,w]}.join.count s}
z=k=r[?v]-r[?^],j=r[?>]-r[?<]
q[d=[d,1,0][j*j<=>k*k]]+=z[d]<=>0
v&[q<<d]!=[]?q!=v[-1]:m[*q,v<<q]}
m[0,0,1]}

সম্পাদনা করুন: ভেন্টোরোর অনেক ধন্যবাদ যিনি কিছু আশ্চর্যজনক কৌশল প্রয়োগ করে কোডটি অনেক ছোট করেছিলেন!

ইনপুট এবং আউটপুট

কোডটি একটি রুবি ফাংশন উপস্থাপন করে যা তিনটি পরামিতি নেয়:

  • গ্রিড, স্ট্রিংগুলির অ্যারে হিসাবে উপস্থাপিত (প্রতিটি সারি আলাদা স্ট্রিং)
  • কার্গো প্রস্থ
  • কার্গো উচ্চতা

কার্গো বিশ্রাম নেওয়ার ক্ষেত্রে 1লুপ থাকলে বা nil(মিথ্যা) ক্ষেত্রে এটি (সত্যবাদী) ফিরে আসে ।

টেস্ট

এখানে এটি মার্টিনের সমস্ত পরীক্ষায় উত্তীর্ণ হচ্ছে: http://ideone.com/zPPZdR

ব্যাখ্যা

কোডটিতে কোনও চালাক কৌশল নেই; এটি নিয়মের একটি সুস্পষ্ট সহজ বাস্তবায়ন।

নীচের moveকোডটিতে একটি পুনরাবৃত্ত ফাংশন যা নিয়ম অনুসারে একটি পদক্ষেপ নিয়ে আসে এবং:

  • একটি লুপ ক্ষেত্রে সত্যবাদী ফেরত
  • বিশ্রামের ক্ষেত্রে মিথ্যা ফিরিয়ে দেয়
  • অন্যথায় পরবর্তী পদক্ষেপটি কার্যকর করতে নিজেকে কল করে

আরও একটি পঠনযোগ্য সংস্করণ এখানে উপলব্ধ ।

দ্রষ্টব্য: গল্ফ কোডটি বেশ কয়েকটি সংশোধন করেছে এবং পাঠযোগ্য সংস্করণের মতো আর নেই similar


যেহেতু rচার দিক ছাড়াও অতিরিক্ত এন্ট্রি রয়েছে কিনা তা বিবেচ্য নয় , r[y>=0&&x>=0&&g[y]&&g[y][x]]+=1কয়েকটি বাইট সংরক্ষণ করা উচিত।
ভেন্টোরো

আমি গল্ফিংয়ের জিনিসগুলিকে আরও খানিকটা
এগিয়ে

@ ভেন্তোরো বাহ, আপনি কোডটিতে আশ্চর্যজনক কাজ করেছেন। আমি হ্যাশটিকে ল্যাম্বডায় রূপান্তর করার বিষয়ে কখনও ভাবিনি। প্রোগ্রামটি সংক্ষিপ্ত করতে আমি আমার কিছু ধারণাগুলি চেষ্টা করে দেখছিলাম, তবে আপনি যা করেছিলেন তার কাছাকাছি ছিল না। অনেক ধন্যবাদ!
ক্রিশ্চিয়ান লুপাস্কু

2
নেতিবাচক সূচকগুলিকে সামান্য সংক্ষিপ্ত পরিচালনার মাধ্যমে এটি 200 এ নেমে এসেছেন
ভেন্টোরো

2
প্রকৃতপক্ষে, 198: ideone.com/ptKrzf :)
ভেন্টোরো

8

পাইথন 2, 207 বাইট

def f(L,w,h,u=0,v=0,D=1,S=[]):a,b,c,d=map(`[r[u*(u>0):u+w]for r in L[v*(v>0):v+h]]`.count,"v^><");D=cmp(abs(a-b),abs(c-d))<D;T=u,v,D;return T in S or a-b|c-d and f(L,w,h,u+cmp(c,d)*D,v+cmp(a,b)*0**D,D,S+[T])

সারিগুলির তালিকা হিসাবে গ্রিডটি ইনপুট করুন

['>v>v>v', '^v^v^v', '^v^v^v', '^>^>^v', '^<<<<<']

প্রস্থ এবং উচ্চতা অনুসরণ করে। ফিরে আসে 0বা Trueতদনুসারে।

ব্যাখ্যা

def f(L,          # Grid
      w,h,        # Width, height of cargo
      u=0,v=0,    # Position of top-left of cargo, initially (0, 0)
      D=1,        # Moving left/right = 1, up/down = 0
      S=[]        # Seen (pos, axis) pairs, initially empty
     ):     

     # Arrows under cargo - no need for "".join since we only need to count v^<>
     A = `[r[u*(u>0):u+w]for r in L[v*(v>0):v+h]]`

     # Count for each arrow
     a,b,c,d=map(A.count,"v^><")

     # Golfed form of abs(a-b) < abs(c-d) or (abs(a-b) == abs(c-d) and D == 1)
     D=cmp(abs(a-b),abs(c-d))<D
     T=u,v,D

     return (T in S                # Return True if (pos, axis) previously seen
             or a-b|c-d               # Return 0 if all conveyors cancel
             and f(L,w,h,             # Otherwise, recurse
                   u+cmp(c,d)*D,      # Update u if moving left/right
                   v+cmp(a,b)*0**D,   # Update v if moving up/down
                   D,
                   S+[T]          # Add (pos, axis) to seen
                  )
            )

cmpআপনি একটি ভেরিয়েবল বরাদ্দ করে এটি সংক্ষিপ্ত করতে পারবেন না ?
নীল

ইতিমধ্যে পরিদর্শনকৃত অবস্থানগুলি পরীক্ষা করে চক্র সনাক্ত করা কি যথেষ্ট? নিয়ম 4 এর ভিত্তিতে, পরবর্তী পদক্ষেপটি পূর্বের দিক থেকেও প্রভাবিত হতে পারে। সুতরাং এটি সম্ভবত দু'বার একই অবস্থানে পৌঁছে যেতে পারে বলে মনে হচ্ছে, তবে চক্র নেই কারণ আপনি আগের দিকের বিভিন্ন দিকের ভিত্তিতে বিভিন্ন দিকে চলেছেন।
রেটো কোরাদি

@ মুডিফিশ এটি সবেমাত্র ভাঙতে
চাইবে

@ রিটোকোরাডি আশাকরি ঠিক হয়েছে
Sp3000

হ্যাঁ, Dঅবস্থান কী যুক্ত করা উচিত এটি করা উচিত।
রেটো কোরাডি

8

জুলিয়া - 394 300 246 214 বাইট

f(A,x,y)=(Z=sign;(S,T)=size(A);X=x+1;Y=y+1;G=fill(5,S+2y,T+2x);G[Y:S+y,X:T+x]=A;C=0G;D=1;while C[Y,X]!=D C[Y,X]=D;i,j=sum(i->1-[19 8]i%82%3,G[Y:Y+y-1,X:X+x-1]);D=Z(2i^2-2j^2+(i!=0)D);X+=Z(i+D*i);Y+=Z(j-D*j)end;D^2)

কার্গো লুপ হয়ে থাকলে 1 এবং যদি কোনও স্টপ আসে তবে 0 প্রদান করে। এটি "কঠোরভাবে" সত্যবাদী / মিথ্যা নয়, জুলিয়া বুলিয়ান প্রসঙ্গে 0 এবং 1 এর অনুমতি দেয় না ... তবে আমি সেই মানগুলিকে বিবেচনা করি xযার bool(x)==trueজন্য সত্যবাদী এবং bool(x)==falseমিথ্যা।

ইনপুট Aএকটি অক্ষরের অ্যারের আকারের হওয়া উচিত। আপনি যদি কনভেয়র গ্রিডের অনুলিপি / পেস্ট করে থাকেন তবে আপনার এটি যথাযথ ফর্মের মধ্যে আনতে হবে। এটি ম্যানুয়ালি হ্যান্ডেল করা থেকে আপনাকে বাঁচাতে, নিম্নলিখিতটি ব্যবহার করুন:

A=foldl(hcat,map(collect,split("""(PASTE GRID HERE)""","\n")))'

যেখানে স্পষ্টতই (PASTE GRID HERE)গ্রিডের সাথে প্রতিস্থাপন করা উচিত। প্রতিটি লাইনের শেষে স্পেসগুলি ডাবল-চেক করুন, এটিতে আসলে সমস্ত জায়গাগুলি রয়েছে কিনা তা নিশ্চিত করতে (এটি সমস্ত লাইনের সমান দৈর্ঘ্য কিনা তা নিশ্চিত করার জন্য এটি পরীক্ষা করে না)। দ্রষ্টব্য যে এই লাইনটি আসল সমাধান কোডের অংশ নয়, সমাধান কোডটি কিছুটা সহজ করার জন্য কোডের কেবল একটি সুবিধাজনক অংশ।

Ungolfed:

function f(A,x,y)
  # Determine size of grid for use later
  (S,T)=size(A)
  # Initialise starting position (performed here to save characters)
  X=x+1
  Y=y+1
  # Create an expanded field that is functionally "spaces" (to provide
  # spaces at edges for the cargo to stop in)
  G=fill(5,S+2y,T+2x)
  # Put the conveyor grid into centre of the expanded field
  G[Y:S+y,X:T+x]=A
  # Create an array storing the most recent movement direction:
  # will use 1=horizontal, -1=vertical, 0=stopped
  C=0G
  # Initialise current direction (same system as C)
  D=1
  # Loop until it finds itself repeating a coordinate/direction pair
  while C[Y,X]!=D
    # Mark current coordinate/direction pair in array
    C[Y,X]=D
    # Determine the net coordinate pairing, stored in two variables
    # for golf purposes *SEE NOTE*
    i,j=sum(i->1-[19 8]i%82%3,G[Y:Y+y-1,X:X+x-1])
    # Determine new movement axis (if D=0, cargo stopped)
    D=sign(2i^2-2j^2+(i!=0)D)
    # Update X or Y depending on signs of D and the appropriate direction
    X+=sign(i+D*i)
    Y+=sign(j-D*j)
  end
  # if D=±1, return 1 (cargo is still moving), otherwise return 0
  return D^2
end

দ্রষ্টব্য: 1-[19 8]i%82%3আমি যে সুনির্দিষ্ট পদ্ধতিটি খুঁজে পেতে পারি তার দ্বারা উপযুক্ত পাঁচটি অক্ষরকে উপযুক্ত সমন্বয়কারী জোড়গুলিতে মানচিত্রের জন্য বেছে নেওয়া হয়েছে। এটি তৈরি করার সময় শূন্যস্থান পূরণ করতে 5 টি ব্যবহার করার কারণও Gএটি - এটি একটি একক-অঙ্কের চরিত্র যা মানচিত্রটি তৈরি করে [0 0]

ব্যবহারের উদাহরণ:

julia> A=foldl(hcat,map(collect,split(""">v>v>v
       ^v^v^v
       ^v^v^v
       ^>^>^v
       ^<<<<<""","\n")))';

julia> f(A,2,1)
true

julia> f(A,3,3)
true

julia> f(A,5,2)
false

f(A,x,y)=তুলনায় খাটো f=(A,x,y)->
অ্যালেক্স এ

@AlexA। - সত্য, তবে তারপরে, আমি f=যখন এটি গল্ফ করা শেষ করব তখন আমি সম্ভবত এটি সরিয়ে ফেলব এবং এটি একটি বেনামে ফাংশন করব।
গ্লেন ও

1
একাধিক পরামিতি থাকে যখন এটি একটি নামী ফাংশন বনাম একটি বেনাম ফাংশন হয় তবে এটি একই দৈর্ঘ্য হবে। f()=বনাম ()->
অ্যালেক্স এ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.