ক্যাটনের সেটেলাররা - দীর্ঘতম রোড!


16

এটি ক্যাটনের সেটেলার্সের একটি এন্ডগেম বোর্ড:

ক্যাটান বোর্ড

পটভূমি:

রাস্তাগুলি (লম্বা কাঠির টুকরো) এবং জনবসতিগুলি (এবং শহরগুলি) ছোট্ট ঝুপড়িগুলি দ্বারা উপস্থাপিত হয়। আমরা নীচের স্কিমটি ব্যবহার করে এই টুকরোগুলির স্থানটি এনকোড করেছি: উপরে থেকে, আমাদের একটি সারি অনুভূমিক প্রান্ত এবং প্রান্ত রয়েছে যেখানে রাস্তা স্থাপন করা যেতে পারে। তারপরে আমাদের কাছে কেবল রাস্তাগুলির একটি কলাম এবং আরও কিছু আছে। রেড ফর রেড, ওরেঞ্জের জন্য, এবং বিয়ের জন্য নীল এবং _ কোনও কিছুর জন্য চিত্রযুক্ত বোর্ডটি এনকোড করা হবে:

________RR_R_
__R_
__RR_R_RRR_____R_
B___R
_B_________B__OO_OOR_
B__B_R
BB_BBB_____B____RR_R_
OBB_O
OO__BB_BB__OOO_OO
O_O_
_O_OOO_O_____

এর মতো বোর্ড হ'ল আপনার ইনপুট স্ট্রিং। যে কোনও অক্ষর [A-Z]প্লেয়ারের রঙ নির্দেশ করতে পারে তবে সর্বাধিক চারটি রঙ (খালি সহ) থাকবে। বোর্ড অন্যথায় সেটেলারদের বিধি অনুসারে বৈধ হওয়ার গ্যারান্টিযুক্ত , যার অর্থ:

  • প্রতিটি বর্ণের সর্বাধিক দুটি সংলগ্ন রোড নেটওয়ার্ক থাকবে, যা অন্যান্য খেলোয়াড়দের বসতি / শহরগুলি (ভার্টেক্স বিল্ডিং) দ্বারা বিচ্ছিন্ন বা নাও হতে পারে। নমুনা চিত্রের ডানদিকে লাল রাস্তাটি ভেঙে কমলা বন্দোবস্ত দেখুন।
    • প্রতিটি সড়ক নেটওয়ার্কের কমপক্ষে একটি বন্দোবস্ত থাকার গ্যারান্টিযুক্ত।
  • সমস্ত জনবসতি এবং শহরগুলি নিকটবর্তী অন্য জনবসতি / শহর (আপনার বা অন্যথায়) থেকে কমপক্ষে দুটি প্রান্ত হতে গ্যারান্টিযুক্ত
  • একজন খেলোয়াড়ের গেম বোর্ডে কেবল 15 টি রাস্তা থাকতে পারে।
  • কাতান উত্সাহীদের জন্য: এই সমস্যার প্রয়োজনে জনবসতি এবং শহরগুলির মধ্যে কোনও পার্থক্য নেই, তাই আমি ইনপুট স্ট্রিংয়ের মধ্যে পার্থক্য করি না।

এই সমস্ত "ইনপুট" স্ট্রিংয়ের নির্দিষ্টকরণের জন্য।

দীর্ঘতম রোড:

সেটেলারগুলিতে, খেলোয়াড়রা "দীর্ঘতম রাস্তা" থাকার জন্য দুটি বিজয় পয়েন্ট পান। এটি হ'ল সংজ্ঞায়িত করা হয়েছে: শুরু থেকে শেষের পয়েন্ট পর্যন্ত দীর্ঘতম স্বচ্ছ একক পথ (রাস্তাগুলিতে পরিমাপ করা), এটি কোনও বিরোধী বন্দোবস্ত বা শহর দ্বারা ভেঙে যায় না । চক্রগুলি ঠিক আছে, যতক্ষণ আপনি একটি নির্দিষ্ট প্রারম্ভ থেকে একটি নির্দিষ্ট প্রান্তে যাওয়ার পথটি সনাক্ত করতে পারেন। সুতরাং, 6 টি রাস্তার একটি লুপের সাথে একটি রোডের শাখা বন্ধের দৈর্ঘ্য 7 হয় তবে বিপরীত দিকের 6 টি রোড লুপের সাথে দুটি শাখাযুক্ত একটি এখনও 7 টির মূল্য।

উদাহরণস্বরূপ মানচিত্রে, ডান পাশের লাল রাস্তাটির মূল্য মাত্র 4, কারণ বোর্ডের ডানদিকে একটি কমলা বন্দোবস্ত দ্বারা তাকে কেটে দেওয়া হয়েছে (এজন্য জনবসতিগুলি একেবারে অন্তর্ভুক্ত করা হয়েছে)। নীল রঙের দৈর্ঘ্য 13 এবং অরেঞ্জের দৈর্ঘ্যের 12 টি রাস্তা রয়েছে Red লাল শীর্ষস্থানীয় রাস্তাটি 7 টির মতোই মূল্যবান, কারণ এটি পাশের দুটি একক রাস্তার সাথে সংযোগ স্থাপন করে না।

আউটপুট:

সমস্ত খেলোয়াড়ের দীর্ঘতম দৈর্ঘ্যের একটি রাস্তা রয়েছে (সম্পর্ক থাকলে এটি একের বেশি হতে পারে), তারপরে একটি রাস্তাটি কত দীর্ঘ হবে তার বেস 10 তে একটি সাদা জায়গা এবং / অথবা আন্ডারস্কোরের সীমানা নির্ধারণের গণনা অনুসরণ করে।

উদাহরণস্বরূপ বোর্ডের আউটপুট সুতরাং হবে:

B 13

সমস্যা বিবৃতি:

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

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


2
আসল সমস্যার বিবৃতি: কমলা খেলোয়াড় একটি বিড়ম্বনা।
কর্সিকা

From the top, we have a row horizontal vertices and edges where a road can be placed. Then we have a column of only roads, and so forth. এর অর্থ কী তা বুঝতে আমার কয়েক মিনিট সময় লেগেছিল। আপনার আরও স্পষ্ট করে ব্যাখ্যা করতে হবে যে অনুভূমিক সারিগুলিতে বসতি স্থাপন এবং সেটেলমেন্টের অবস্থানগুলিও অন্তর্ভুক্ত।
DLosc

@ করসিকা আমার আগে কেউ এমন কিছু করেছে!
জেরি যেরেমিয়া

1
ছবিতে কমলা এবং লাল সত্যিই একই। আপনার অন্য একটি রঙ বাছাই করা উচিত ছিল।
mbomb007

উত্তর:


3

পাইথন 2, 445 400 বাইট

আমি সেটেলারদের ভক্ত, তাই এই চ্যালেঞ্জটি মজাদার ছিল।

T="^"
Z=26
A=T*52
for i in range(11):A+=(T*(i%2)*3).join(x for x in raw_input()).center(Z,T)
A+=T*52
def f(c,p=0,l=0,B=A):
 b=l;C=B[0:p]+T+B[p+1:];n=(Z,1)[p%2]
 for i in(p<1)*range(390):
    if(i/Z%2<1&i%2>0)|(i/Z%2>0&i%2<1):b=max(b,f(c,i))
 for i in(p-n,p+n)*(B[p]==c):
    for j in(i-Z,i-1,i+1,i+Z)*(B[i]in c+"_"):b=max(b,f(c,j,l+1,C))
 return b
i=l=0
for x in A:
 if x<T:i=f(x)
 if i>l:c=x;l=i
print c,l

স্কোর 4 টি স্পেসের প্রতিটি ঘটনাকে একটি ট্যাব দিয়ে প্রতিস্থাপন করে।

ব্যাখ্যা

ফাংশন সংজ্ঞার আগের লাইনগুলি ইনপুটটি পড়বে এবং একটি একক স্ট্রিং ভেরিয়েবলের মধ্যে একটি সাধারণ বোর্ড তৈরি করবে board প্রক্রিয়াটি "^" অক্ষরগুলিকে উল্লম্ব রাস্তা বিভাগের প্রতিনিধিত্ব করে ছোট লাইনগুলিতে সন্নিবেশ করে। এটি বোর্ডকে "^" অক্ষর দিয়েও প্যাড করে।

^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^________RR_R_^^^^^^^
^^^^^^_^^^_^^^R^^^_^^^^^^^
^^^^__RR_R_RRR_____R_^^^^^
^^^^B^^^_^^^_^^^_^^^R^^^^^
^^_B_________B__OO_OOR_^^^
^^B^^^_^^^_^^^B^^^_^^^R^^^
^^BB_BBB_____B____RR_R_^^^
^^^^O^^^B^^^B^^^_^^^O^^^^^
^^^^OO__BB_BB__OOO_OO^^^^^
^^^^^^O^^^_^^^O^^^_^^^^^^^
^^^^^^_O_OOO_O_____^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^

যখন ডিফল্ট পরামিতিগুলির সাথে ডাকা হয়, ফাংশনটি প্রদত্ত রঙের রাস্তার দৈর্ঘ্য দেয়। প্রথম লুপটি তখনই সক্রিয় থাকে যখন অবস্থান (প) পরামিতি সরবরাহ করা হত। এটি প্রতিটি বৈধ রোড পজিশনে পুনরাবৃত্তভাবে রাস্তার দৈর্ঘ্য সন্ধান করে এবং দীর্ঘতমটির উপর নজর রাখে। অবস্থান প্যারামিটারে যখন কোনও রাস্তা থাকে, ফাংশনটি পুনরাবৃত্তভাবে একই রঙের সংলগ্ন রাস্তার দৈর্ঘ্য যুক্ত করে। রাস্তাটি বোর্ডের ওয়ার্কিং কপির একটি "~" দিয়ে প্রতিস্থাপন করা হয়েছে যাতে এটি ইতিমধ্যে গণনা করা বিভাগগুলিকে পুনরায় গণনা না করে তা নিশ্চিত করে।

ফাংশন সংজ্ঞা অনুসরণকারী কোড বোর্ডের প্রতিটি রঙের জন্য ফাংশনটি কল করে এবং সর্বোচ্চ স্কোরিং রঙ এবং দৈর্ঘ্য মুদ্রণ করে।

এটি এখানে ডেমো

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