ট্র্যাফিক মোড় সমাধান করুন


26

কাজটি

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ট্র্যাফিক চৌরাস্তা কাঠামো নেয় এবং ক্রমটি আউটপুট দেয়, যাতে যানবাহনগুলি পাস করবে।

আউটপুট নিম্নলিখিত বিন্যাসে ছাড়া সর্বাধিক চার লাইন থাকা উচিত #. x->y\n, যেখানে #একটা ক্রম সংখ্যা সংখ্যা, বিন্দু দ্বারা অনুসরণ ., xএবং yঅক্ষর ["N", "E", "S", "W"]। এগুলি অক্ষর দ্বারা পৃথক করা উচিত ->। আপনি যদি কোনও স্ট্রিংয়ের অ্যারে না ফেরান, প্রতিটি লাইন অবশ্যই একটি \n(নতুন লাইন অক্ষর) বা আপনার সিস্টেমের সমতুল্য সমাপ্ত হবে ।

ইনপুট নিম্নলিখিত ফর্ম গ্রহণ করা উচিত:

  • পর্ব 1: চারটি অক্ষর, প্রত্যেকে N, E, S, W (ঘড়ির কাঁটার) ক্রমে উত্স রাস্তার গন্তব্য রাস্তা রয়েছে। অনুমতি অক্ষর N, S, W, Eবা । স্পেস মানে নির্দিষ্ট রাস্তায় কোনও যানবাহন নেই। উদাহরণস্বরূপ স্ট্রিংয়ের S WEঅর্থ, যে এন যানবাহন দক্ষিণে যেতে চায়, স্থানটির অর্থ কোনও ই যানবাহন নেই, এর Wঅর্থ এস পশ্চিমে যেতে ইচ্ছুক, এর Eঅর্থ পশ্চিম পশ্চিমে যেতে চায়।
  • পার্ট 2 - একটি স্থান বা একক অক্ষর যার অর্থ জরুরী গাড়ির।
  • পার্ট 3 - দুটি অক্ষর কোন দুটি রাস্তার অগ্রাধিকার রয়েছে তা নির্ধারণ করে (উদাঃ NEঅর্থ যে উত্তর এবং পূর্ব উভয়ই দক্ষিণ এবং পশ্চিম উভয়ের চেয়ে উচ্চ অগ্রাধিকার রয়েছে)। যদি এটি আপনার পক্ষে সহজ হয় তবে আপনি নিম্ন অগ্রাধিকারের রাস্তা নিতে পারেন (সেক্ষেত্রে SW)।

একটি অসমাধানযোগ্য অবস্থায় আপনি একটি এক-লাইন স্ট্রিংটি ব্যবহারকারী পরিষ্কার, মত হল ফিরে যাওয়ার অনুমতি দেওয়া হয় unsolvable, no solutionএবং অনুরূপ। জাভাস্ক্রিপ্ট ব্যবহারকারীরা অন্তর্নির্মিত undefinedধ্রুবক নিতে পারেন ।

এটি একটি কোড-গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins

ট্র্যাফিক নিয়ম

দয়া করে মনে রাখবেন যে কিছু বিধি আপনার দেশের ট্র্যাফিক বিধি অনুসরণ করতে পারে না। চ্যালেঞ্জটি আরও সহজ করার জন্য তাদের মধ্যে কিছু সরল করা হয়েছে। বাস্তব জীবনের ট্র্যাফিক সিস্টেমের জন্য এই প্রশ্নটিকে গাইড হিসাবে ব্যবহার করবেন না।

  1. চ্যালেঞ্জের জন্য আপনাকে কেবল ডান পাশের ট্র্যাফিক ব্যবহারের অনুমতি দেওয়া হয়েছে।
  2. ট্র্যাফিক চৌরাস্তা ঠিক চারটি রাস্তা নিয়ে গঠিত যা এক বিন্দুতে মিলিত হয়। তারা চিহ্নিত হয় N( "উত্তর" এর জন্য যেমন), S, W, E। এই বর্ণগুলি উপরের আউটপুট উদাহরণের পরিবর্তে xএবং ব্যবহার করা উচিত y

একটি ছেদ

  1. প্রতিটি রাস্তায় কমপক্ষে একটি গাড়ি রয়েছে। প্রতিটি রাস্তায় কোনও যানবাহন রয়েছে তা গ্যারান্টিযুক্ত নয়। প্রতিটি যানবাহন চার দিকের যেকোন একটিতে গাড়ি চালাতে পারে, যেমন। বাম দিকে ঘুরুন, ডানদিকে ঘুরুন, সোজা হয়ে যান বা একটি ইউ-টার্ন তৈরি করুন

এস গাড়ির সম্ভাব্য গন্তব্য

  1. যদি দুটি যানবাহনের পাথ ছেদ না করে (তারা সংঘর্ষে না) তবে তারা খুব একই মুহূর্তে যেতে পারে। দুটি গাড়ি (যদি তালিকাটি সম্পূর্ণ নাও হতে পারে তবে পাথগুলি সংঘর্ষে আসে না, তবে এটি ইচ্ছাকৃত, কেবল আপনাকে একটি চিহ্ন দেওয়ার জন্য):
    • বিপরীত দিক থেকে আসা এবং উভয় সোজা চলে যান, বা তাদের মধ্যে কমপক্ষে একটি ডানদিকে ফিরে যায়,
    • বিপরীত দিক থেকে আসা এবং উভয় বাম দিকে ঘুরান,
    • বিপরীত দিক থেকে আসে এবং তাদের মধ্যে কোনও দিক ঘুরিয়ে দেয় বা ইউ-টার্ন তৈরি করে, অন্যটি ইউ-টার্ন তৈরি করে,
    • অরথোগোনাল দিক থেকে আসুন, একটি বাম দিকে ডানদিকে ঘুরছে এবং অন্যটি ইউ-টার্ন তৈরি করবে না

      নীচের দিকে সংঘর্ষ না করার কয়েকটি উদাহরণ। অনুগ্রহ করে নোট করুন যে তৃতীয় অঙ্কনের সময় এন এর যে কোনও পাথ E এর পথের সাথে সংঘর্ষিত হবে, এমনকি এন যদি একটি ইউ-টার্ন তৈরি করে।

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

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

  1. দুটি পাথ সংঘর্ষ হলে অন্যান্য নিয়ম ব্যবহার করা দরকার use দুই যানবাহন (নিচে দেখুন) একই অগ্রাধিকার রাস্তা হন, উপায় ডান গাড়ির যে দেওয়া হয়:
    • ডান দিকের রাস্তা থেকে আসে, যদি তারা অরথগোনাল দিক থেকে আসে
    • অন্যটি বাম দিকে ঘুরলে ডান দিকে ঘুরুন
    • অন্যটি যদি ইউ-টার্ন তোলে তবে সোজা হয়ে যায় বা ডানদিকে ফিরে যায়।

      উভয় উদাহরণের নীচে ই যানবাহন এস এর উপরের রাতের ডান দিকের পথ রয়েছে S.

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

নীচের উদাহরণে প্রথমে ডাব্লু, তারপরে এন, তারপরে ই এবং সর্বশেষে এস যায় S.

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

এই বিশেষ ক্ষেত্রে আপনার প্রোগ্রামের আউটপুট হওয়া উচিত:

1. W->S
2. N->S
3. E->S
4. S->S
  1. সমস্ত ড্রাইভার টার্ন সিগন্যাল ব্যবহার করে এবং অন্যরা কোথায় যেতে চান তা জানেন (সরলতার জন্য আমরা ধরে নিই যে বাম দিকে এবং ইউ-টার্নের মধ্যে পার্থক্য করা সম্ভব))

  2. কখনও কখনও রাস্তাগুলিকে অগ্রাধিকারের চিহ্ন দেওয়া হয়, যা উপরোক্ত নিয়মগুলির চেয়ে বেশি গুরুত্বপূর্ণ। উচ্চ অগ্রাধিকার সহ একটি রাস্তায় অগ্রাধিকার চিহ্ন ( অগ্রাধিকারের চিহ্ন চিত্র ) থাকে। অগ্রাধিকার রাস্তা সোজা যেতে না পারেন, অতিরিক্ত লক্ষণ মত ব্যবহার করা হয়, এই এক । নিম্ন অগ্রাধিকার সহ রাস্তাগুলির একটি ফলন চিহ্ন বা একটি থামার চিহ্ন রয়েছে (সেগুলি সমতুল্য)। দুটি বা সঠিক দুটি ভিন্ন রাস্তার উচ্চ অগ্রাধিকার থাকবে না। আপনার প্রোগ্রামটির ব্যবহারকারীর প্রবেশ করতে সক্ষম হতে হবে কোন রাস্তাগুলিতে অগ্রাধিকার রয়েছে (বা নিম্ন)।

  3. উচ্চতর অগ্রাধিকার সহ রাস্তা থেকে আসা একটি যানটির নিম্ন বামদিকে থাকলেও নিম্ন অগ্রাধিকারের রাস্তা থেকে আসা যানবাহনের উপর দিয়ে ডানদিকে যেতে পারে।
  4. একই অগ্রাধিকার সহ রাস্তাগুলি থেকে আসা দুটি যানবাহনের পথ যদি সংঘর্ষ হয়, উপরের ডান দিকের নিয়মগুলি সক্রিয় রয়েছে are

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

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

এই বিশেষ ক্ষেত্রে আপনার প্রোগ্রামের আউটপুট হওয়া উচিত:

1. S->W
2. W->N
3. N->S
4. E->W
  1. এটি সম্ভবত যে কোনও একটি (যানবাহন) কোনও যানবাহন নয় , এটি কোন দিক থেকে আসে বা কোথায় যায় এবং এর কোন চিহ্ন রয়েছে তা নির্বিশেষে এটির অগ্রাধিকার থাকে (এটি সর্বদা প্রথমে যায়)। প্রোগ্রামটি ব্যবহারকারীর প্রবেশের অনুমতি দেওয়া উচিত, কোন গাড়িটি জরুরি গাড়ি। সর্বশেষ উদাহরণে এন একটি জরুরি বাহন হিসাবে বিবেচনা করে এন প্রথমে যায়, তারপরে এস, ডাব্লু এবং শেষ ই হিসাবে as

এন এ জরুরী যানবাহনের সাথে এই বিশেষ ক্ষেত্রে আপনার প্রোগ্রামের আউটপুট হওয়া উচিত:

1. N->S
2. S->W
3. W->N
4. E->W
  1. যদি একই মুহুর্তে দুটি গাড়ি যাওয়ার অনুমতি দেওয়া হয় (তাদের পাথগুলি সংঘর্ষে না ঘটে এবং তাদের অন্যান্য যানবাহনগুলিতে কোনও রাস্তা দিতে হবে না), আপনার প্রোগ্রামটি এটি খুঁজে বের করা উচিত এবং তাদের একই ক্রম সংখ্যা হিসাবে ফিরে আসতে হবে

    নীচের উদাহরণে N এবং E এর পাশাপাশি ই এবং এস বা ডাব্লু এবং ই এর সংঘর্ষ হয় না। যেহেতু এসকে এন এবং ডাব্লু এসকে পথ দিতে হবে, এস ই এর সাথে একসাথে যেতে পারে না, ইত্যাদি এন এবং ই পারে। সুতরাং প্রথমে এন এবং ই এক সাথে যান, এস এর চেয়ে আর ডাব্লু সর্বশেষ হিসাবে যান।

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

আপনার প্রোগ্রামের সঠিক আউটপুটটি হওয়া উচিত:

1. N->W
1. E->E
2. S->W
3. W->N

আপনি লাইনের ক্রম চয়ন করতে মুক্ত 1( N->W / E->Eসমতুল্য E->E / N->W)

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

    নীচে অবিশ্বাস্য পরিস্থিতির উদাহরণ রয়েছে। E এর W কে পথ দেওয়া উচিত, W এর এস কে পথ দেওয়া উচিত এবং S এর E কে পথ দেওয়া উচিত E

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


3
আমি মনে করি একটি ধারাবাহিক ইনপুট ফর্ম্যাট সংজ্ঞায়িত করা উচিত। "ইনপুটটিতে আপনার পছন্দ মতো কোনও কাঠামো থাকতে পারে" এটি একটি বড় লাল পতাকা। ইনপুট কি সমাধান হতে পারে?
ক্যালভিনের

@ ক্যালভিনের শখগুলি আমি প্রশ্নটি আপডেট করেছি
ভয়েটকাস

যে কোনও সুযোগ আমরা 1-2 টি ক্ষেত্রে একটি উদাহরণ ইনপুট / আউটপুট পেতে পারি?
চার্লি Wynn

সুতরাং প্রশ্নটি (এবং আমি সমাধানটি ধরে নিচ্ছি) ধরে নিই যে প্রশ্নে থাকা রাস্তাগুলি ডান-হাত-ড্রাইভ?
তেরসোসোরোস

গুগল কারগুলি ঠিক এইভাবেই কাজ করে
coredump

উত্তর:


8

প্রশ্ন, 645 বাইট

r:{(1_x),*x}                                                    /rot
R:{x 3,!3}                                                      /-rot
A:4 4#/:@[16#0;;:;]'[(&0100011001111100b;&0001111101100010b;&0010001111000100b;0);(&0 6 2;&0 1 7;&0 3 3;0)]
K:,/{,'/A x}'3 R\3 0 2 1                                        /Konflick matrix
G:3 R\|E:"NESW"                                                 /E:NESW  G:WSEN NWSE ENWS SENW    
m:{x-y*_x%y}                                                    /mod
t:{1=+/m'[_x%4;2]}                                              /orthogonal
w:{-1($x),". ",y[0],"->",y 1;}                               /write
b:{_x%4}                                                        /n-> base dir.
g:m[;4]                                                         /n-> turn
e:(!4)in                                                        /exists
d:{s:r a:e b x;R s&~a}                                       /right free
I:{(G[a]?x 1)+4*a:E?*x}                                         /"dd"->n
O:{E[a],G[a:b x]g x}                                            /n-> "dd"
P:{N::(y=4)&z~4 4;a@&0<a:(@[4#0;b x;:;4-g x])+(5*d x)+(24*e z)+99*e y}          /priority
H:{a::K ./:/:x,/:\:x; if[N&2 in *a;:,0N]; x@&{~|/x[;z]'y}[a]'[!:'u+1;u:!#x]}    /each set of concurrent movements
f:{i:I'(E,'a)@&~^a:4#x; i:i@p:>P[i;E?x 4;E?x 5 6]; {0<#x 1}{a:H x 1;$[a~,0N;-1"unsolvable";w[*x]'O'a];$[a~,0N;(0;());(1+*x;x[1]@&~x[1] in a)]}/(1;i);}

মন্তব্য

অবশ্যই, এটি সংক্ষিপ্ত নয় (সহজও নয়)। এটি (গুরুতরভাবে) সংক্রামিত হতে পারে তবে এটি পাঠকের কাছে অংশ হিসাবে রেখে গেছে (আমি এই সমস্যার জন্য খুব বেশি সময় নিবেদিত করেছি)।

আমি একাধিক মন্তব্যযুক্ত সমাধান অন্তর্ভুক্ত করেছি, তবে আকার গণনাতে 1 টি বাইট হিসাবে মন্তব্যগুলি (লাইনের / থেকে শেষ পর্যন্ত) হিসাবে নিউলাইনগুলি ধরে রেখেছি

প্রধান অসুবিধা হ'ল সমস্ত বিধি সম্পূর্ণরূপে বোঝা। কোড দৈর্ঘ্যের প্রাথমিক অপ্টিমাইজেশন কোনও জটিল সমস্যার সমাধান সমাধানের সাথে বেমানান। না নীচের অংশে বা টপ-ডাউন পদ্ধতির অপঠনযোগ্য কোড সহ ভাল কপি করা হয়।

অবশেষে, আমি 16 টি সারি এবং 16 কলাম (প্রতিটি সম্ভাব্য টার্নের সাথে সংযুক্ত প্রতিটি দিকের জন্য) সহ একটি সংক্ষেপণ টেবিল (সংঘাতের ম্যাট্রিক্স) বিকাশ করেছি। আইটেমগুলির মানগুলি 0 (সামঞ্জস্যতা), 1 (সারিটির জন্য অগ্রাধিকার), বা 2 (কলামের পছন্দ)। এটি সমস্ত পরীক্ষাকে সন্তুষ্ট করে, আমি নিশ্চিত নই যে সমস্ত সম্ভাব্য পরিস্থিতি ভালভাবে আবৃত রয়েছে

উত্স ফাইলে অবশ্যই কে এক্সটেনশন থাকতে হবে। ইন্টারেক্টিভ ইন্টারপ্রেটার (অ-বাণিজ্যিক ব্যবহারের জন্য বিনামূল্যে, কেএক্স.কম) শুরু করুন এবং প্রম্পটে মূল্যায়ন করুন ('পরীক্ষার' অনুচ্ছেদে দেখানো হয়েছে)

পরীক্ষা

q)f " WN    "
1. E->W
2. S->N

q)f " SW    "
1. E->S
2. S->W

q)f "SSSS   "
1. W->S
2. N->S
3. E->S
4. S->S

q)f "SWWN WS"
1. S->W
2. W->N
3. N->S
4. E->W

q)f "SWWNNWS"
1. N->S
2. S->W
3. W->N
4. E->W

q)f "WEWN   "
1. N->W
1. E->E
2. S->W
3. W->N

q)f " SWE   "
unsolvable

ব্যাখ্যা

বেস কাঠামো হ'ল 'অগ্রাধিকার ম্যাট্রিক্স'

   N       E       S       W   
   W S E N N W S E E N W S S E N W
NW 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
 S 0 0 0 0 0 1 1 0 0 0 1 1 2 2 2 2
 E 0 0 0 0 0 1 1 1 2 2 0 0 0 2 2 0
 N 0 0 0 0 2 2 0 0 0 2 0 0 0 0 2 0
EN 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0
 W 2 2 2 2 0 0 0 0 0 1 1 0 0 0 1 1
 S 0 2 2 0 0 0 0 0 0 1 1 1 2 2 0 0
 E 0 0 2 0 0 0 0 0 2 2 0 0 0 2 0 0
SE 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0
 N 0 0 1 1 2 2 2 2 0 0 0 0 0 1 1 0
 W 2 2 0 0 0 2 2 0 0 0 0 0 0 1 1 1
 S 0 2 0 0 0 0 2 0 0 0 0 0 2 2 0 0
WS 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0
 E 0 1 1 0 0 0 1 1 2 2 2 2 0 0 0 0
 N 0 1 1 1 2 2 0 0 0 2 2 0 0 0 0 0
 W 2 2 0 0 0 2 0 0 0 0 2 0 0 0 0 0

অর্থ (উদাহরণস্বরূপ)

  • m[NW][SE] 0 টি মান রয়েছে (উভয় আন্দোলন সামঞ্জস্যপূর্ণ-সাম্প্রতিক-)
  • m[EW][SN] এর 1 মান রয়েছে (EW এর এসএন এর চেয়ে বেশি অগ্রাধিকার রয়েছে) দ্রষ্টব্য - অন্যান্য অগ্রাধিকারের কারণগুলি এই বাক্যটি পরিবর্তন করতে পারে (জরুরি গাড়ি, অগ্রাধিকার রাস্তা, ..)
  • m[NE][SE] 2 মান (এসই এর চেয়ে অগ্রাধিকার রয়েছে NE) নোট দ্রষ্টব্য .- অন্যান্য অগ্রাধিকারের কারণগুলি এই বাক্যটি পরিবর্তন করতে পারে (জরুরী গাড়ি, অগ্রাধিকার রাস্তা, ..)

চারটি সাবম্যাট্রিক্স (4x4) প্রকার ব্যবহার করে ম্যাট্রিক্স তৈরি করা যায়

  NESW  A    B    C    D
N DACB  0100 0001 0010 0000
E BDAC  0110 2222 0011 0000
S CBDA  0111 0220 2200 0000
W ACBD  2200 0020 0200 0000

ম্যাট্রিক্স এমন একটি ক্রিয়াকলাপ দ্বারা পরিপূরক যা প্রতিটি আন্দোলনকে অগ্রাধিকার দেয়। এই ফাংশনটিতে জরুরি গাড়ি, অগ্রাধিকারের রাস্তা, অরথোগোনাল দিকনির্দেশ, পালাবার ধরণ এবং যানবাহন 'ডান থেকে আগমন করা' সম্পর্কিত অ্যাকাউন্ট গ্রহণ করে

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

  • আমরা অবিশ্বাস্য কেসগুলি (পারস্পরিক দ্বন্দ্ব) বিশ্লেষণ করি
  • যদি তা না হয় তবে আমরা সর্বাধিক অগ্রাধিকার আইটেম এবং এটির সাথে সামঞ্জস্যপূর্ণ সমস্ত আন্দোলনগুলি নির্বাচন করি এবং পূর্ববর্তী বেমানান আন্দোলনের সাথে বেমানান নই এবং একই সাথে চলার অনুমতিপ্রাপ্ত আন্দোলনের একটি সেট তৈরি করি
  • আন্দোলনের সেটটি লিখুন এবং বাকী প্রার্থীদের নিয়ে পুনরাবৃত্তি করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.