দুটি রাস্তা হলুদ কাঠে বিভক্ত (অংশ 3)


10

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

অনুপ্রেরণা

এই চ্যালেঞ্জটি রবার্ট ফ্রস্টের বিখ্যাত কাব্য, দ্য রোড নট টেকন : দ্বারা অনুপ্রাণিত হয়েছে

দুটি রাস্তা হলুদ কাঠে বিভক্ত হয়ে গেছে,
এবং দুঃখিত আমি দুজনেই ভ্রমণ করতে পারিনি
এবং একজন পথিক হতে পারলাম, আমি দাঁড়িয়ে দাঁড়িয়ে
একদিকে তাকালাম যতদূর
পেরোনোর ​​দিকে বাঁক হয়েছিল;

... 2 অনুচ্ছেদ ছাঁটা ...

আমি
যেহেতু যুগে যুগে যুগে যুগে যুগে যুগে দীর্ঘশ্বাস ফেলে বলছি :
দু'টি রাস্তায় একটি কাঠের দিকে বিভক্ত হয়েছিল , এবং আমি -
আমি যাতায়াতকৃত একটিকে কম করে নিয়ে গিয়েছি
এবং এটি সমস্ত তাত্পর্য তৈরি করেছে।

দ্বিতীয় থেকে শেষ লাইনে লক্ষ্য করুন I took the one less traveled by,,।

ব্যাকস্টোরি

আপনাকে একজন অন্ধ অ্যাডভেঞ্চারারকে সহায়তার জন্য নিযুক্ত করা হয়েছিল যিনি রাস্তায় হাঁটছেন এবং দ্য রোড নট টেকেন দ্বারা অনুপ্রাণিত হয়েছিলেন । অ্যাডভেঞ্চারার রাস্তায় একটি কাঁটাচামচ এগিয়ে আসছে এবং কম যাত্রা পথ নিতে চান। অ্যাডভেঞ্চারার আসলে কোথায় তা আপনাকে খুঁজে বের করতে হবে এবং অ্যাডভেঞ্চারারকে কোথায় যেতে হবে সে সম্পর্কে বলবেন।

চ্যালেঞ্জ

আপনার লক্ষ্য হ'ল আপনার মানচিত্রে যে রাস্তাটি কাঁটাচামচ করে সেখানে অন্তত ভ্রমণ করা রাস্তাটি সন্ধান করা। আপনার মানচিত্রটি একটি নতুন স্ট্রিংযুক্ত স্ট্রিং (বা \n, যদি আপনি পছন্দ করেন) এবং অজানা প্রস্থ এবং উচ্চতা রয়েছে। মানচিত্রে রাস্তাগুলি 0 থেকে 9 সংখ্যায় গঠিত , ছেদটি #গুলি দ্বারা তৈরি । আপনি বর্তমানে যে রাস্তায় রয়েছেন এবং অন্যান্য রাস্তাগুলির মধ্যে সর্বাধিক ভ্রমণ করা রাস্তা এবং আপনার অন্ধ দু: সাহসিক কাজ করার রাস্তাটি আপনাকে অবশ্যই কম ভ্রমণ করতে হবে। আপনার মানচিত্রে কাঠগুলি একটি স্থান দ্বারা প্রতিনিধিত্ব করা হয়। এখানে একটি সহজ মানচিত্র:

2   2
 1 0 
  #  
  2  
  2  

এই মানচিত্রটি 5 প্রশস্ত এবং 5 লম্বা। লক্ষ করুন কীভাবে রাস্তাটি Y আকারে কাঁটাচামচ করে। ওয়াই কোনওভাবেই ওরিয়েন্টেড হতে পারে, তাই আপনাকে অবশ্যই একটি "ঘোরানো" মানচিত্র বুঝতে সক্ষম হতে হবে।

#মানে কি

যেখানে মানচিত্র কাঁটাচামচ হবে একটি #। এটি কোনও পাথের স্কোরকে প্রভাবিত করে না।

সংখ্যাগুলি আসলে কী বোঝায়

প্রতিটি পাথ (সংখ্যার একটি লাইন, এতে বাঁক থাকতে পারে) এর স্কোর থাকে। কোনও পাথের স্কোরটি তার অঙ্কগুলি যুক্ত করে নির্ধারিত হয়, সুতরাং প্রথম উদাহরণের জন্য, প্রথম পাথের (উপরের বাম দিক থেকে, ঘড়ির কাঁটার দিকের) স্কোর 2 + 1 = 3, দ্বিতীয়টিতে 2 + 0 = 2 এবং তৃতীয়টি রয়েছে 2 + 2 = 4 রয়েছে। রাস্তায় তির্যকভাবে সংযুক্ত নম্বর থাকতে পারে।

আপনি কোথায় আছেন তা সন্ধান করছেন

আপনি সর্বোচ্চ স্কোর নিয়ে পথে রয়েছেন। অন্যান্য 2 টি পথ হ'ল রাস্তাটি আরও বেশি যাতায়াত করা রাস্তা এবং রাস্তাটি কম ভ্রমণ করেছে। আপনাকে সর্বনিম্ন স্কোর সহ রাস্তাটি সন্ধান করতে হবে ।

আপনার ভ্রমণকারীকে কোথায় যেতে হবে তা বলছে

আপনাকে অবশ্যই আপনার ভ্রমণকারীকে "বাম" বা "ডান" যেতে বলতে হবে। মনে রাখবেন যে দিকনির্দেশগুলি আপনার ভ্রমণকারীর দৃষ্টিকোণ থেকে এসেছে (তিনি কাঁটাচামার মুখোমুখি।)

উদাহরণ মানচিত্র

  14
9#  
  04

আউটপুট: "ডান" (যাত্রী 9রাস্তায়, 0 + 4 <1 + 4

  9  
  9  
  9  
  9  
  9  
  #  
 8 8 
 8 8 
88 88
8   7

আউটপুট: "বাম" (যাত্রী 99999রাস্তায় রয়েছে, 8 + 8 + 8 + 8 + 8> 8 + 8 + 8 + 8 + 7

02468      
     #98765
13579      

আউটপুট: "ডান" (যাত্রী 98765রাস্তায়, 0 + 2 + 4 + 6 + 8 <1 + 3 + 5 + 7 + 9)

4 2
4 2
 # 
 4 
 4 
 2 
 2 

আউটপুট: "ডান" (যাত্রী 4422রাস্তায়, 4 + 4> 2 + 2)

 9   
 9   
 9   
 #   
8 7  
8  7 
8   7

আউটপুট "বাম" (ভ্রমণকারী 999রাস্তায় রয়েছে, 8 + 8 + 8> 7 + 7 + 7

স্টাফ জানার জন্য:

  • প্রতিটি লাইনের সমান দৈর্ঘ্য তৈরি করতে মানচিত্রগুলিকে ফাঁকা স্থান দিয়ে প্যাড করা হবে।
  • আপনি stdout- এ / কনসোল / ফাইল স্ট্রিং আউটপুট অবশ্যই leftবা right, ঐচ্ছিকরূপে একটি trailing সম্পর্কে newline করে।
  • আপনাকে অবশ্যই নিউলাইন, \nগুলি, বা একটি অ্যারে / রেখার তালিকা (প্রতিটি লাইন একটি স্ট্রিং) যুক্ত স্ট্রিং হিসাবে ইনপুট নিতে হবে । যেখানে ইনপুটটি রাখা হবে তা অবশ্যই কোনও ক্রিয়াকলাপ, কমান্ড-লাইন আর্গুমেন্ট, ফাইল বা STDIN এক লাইনে বা অনুরূপ হতে হবে। একটি ভেরিয়েবল গ্রহণযোগ্য ইনপুট ডিভাইস নয় (যদি না এটি কোনও ফাংশন প্যারামিটার থাকে)) একইভাবে, জেএস এবং অন্যান্য ভাষায় ফাংশন এক্সপ্রেশনগুলি অবশ্যই একটি ভেরিয়েবলের জন্য বরাদ্দ করা উচিত।
  • এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর!
  • মানক লুফোলগুলি নিষিদ্ধ

আপনি ধরে নিতে পারেন জিনিস

  • আপনার ইনপুটটি বৈধ হবে। এর মতো কোনও কিছুর জন্য পরীক্ষা করা হবে না:
0 0 0
 0 0
  #
 0 0
  • পাথের স্কোর কখনই বাঁধা থাকবে না।
  • ইনপুটটি আপনার ভাষার স্ট্রিং সীমা চেয়ে কম প্রস্থ বা উচ্চতার কোনও দৈর্ঘ্যের হতে পারে less
  • সর্বদা 2 টি পথের মধ্যে কমপক্ষে 1 স্থান থাকবে।
  • পাথগুলিতে বাঁক, বাঁক ইত্যাদি থাকতে পারে এগুলি রাস্তা, হাইওয়ে নয়।

কোনো প্রশ্ন আছে কি? মন্তব্য এবং খুশী গল্ফিং আমাকে নীচে জিজ্ঞাসা করুন!


#সর্বদা কি অনুভূমিকভাবে কেন্দ্রে থাকবে?
ডেভিড আর্কিবাল্ড

12
আমি মনে করি আপনার সময় এসেছে স্যান্ডবক্স ব্যবহার করার । এবং সম্ভবত কিছু নতুন অনুপ্রেরণা খুঁজে পেতে। এই হারে, এটির মতো মনে হয় আপনি আকর্ষণীয় চ্যালেঞ্জ সিরিজ তৈরির চেয়ে কোনও কবিতা প্রচার করছেন। বিশেষত যেহেতু আপনি প্রতিটিটি বাদ দিয়ে কবিতাটি পোস্ট করেন। আমরা প্রথমটি এটি ইতিমধ্যে দেখেছি, এটি যথেষ্ট।
mbomb007

4
দেখুন। আমি আপনার চ্যালেঞ্জগুলি পছন্দ করেছি, তবে কেবল মাত্র 2 টির পোস্ট করা 2 এমনকি পিটি 2 তে কোনও গ্রহণ না করে 3 পোস্ট করা খুব দ্রুত is ঘূর্ণন, পরম আউটপুট এবং এর সামান্য পরিবর্তনের জন্য 2 এ সম্পাদনা যথেষ্ট ভাল ।
ডেভিড আর্কিবাল্ড

2
এটি পূর্ববর্তীগুলির থেকে একেবারেই আলাদা একটি চ্যালেঞ্জ এবং আমি এটি পছন্দ করি ... আমরা ওয়াই আকারটি মঞ্জুর হিসাবে নিতে পারি (একটি পথ সর্বদা একটি প্রান্তে এবং অন্য দুটি অপোসিং প্রান্তে শেষ হয়), তাই না?
dnep

1
@ ডিএনপ হ্যাঁ আপনি ঠিক বলেছেন।
প্রোগ্রামার

উত্তর:


4

ডি , 348 321 312 302 বাইট

import std.stdio,std.algorithm,std.regex,std.range;void h(R,U)(R s,U r){U[2]c;foreach(L;s.map!(a=>a.array.split)){U l=L.length-1;r>1?r=l^r-2:0;l?c[]+=l*L.map!sum.array[]:c;}write(c[r]>c[!r]?"right":"left");}void main(){auto s=stdin.byLineCopy.array;!s.join.match(`\d \d`)?h(s.transposed,2UL):h(s,3UL);}

Ungolfed

import std.stdio,std.algorithm,std.regex,std.range;

void h(R,U)(R s, U reverse) {
    U[2] counts;
    /* Now that all paths are up/down, every line we need to count up has
       precisely two space-delimited parts to sum up. */
    foreach (line; s.map!(a=>a.array.split)) {
        U len = line.length - 1;
        reverse > 1 ? reverse = len ^ reverse - 2 : 0;
        len ? counts[] += len * line.map!sum.array[] : counts;
    }

    /* Switch left/right as needed based on our orientation */
    write(counts[reverse] > counts[!reverse] ? "right" : "left");
}

void main() {
    /* Treat the input as a matrix of integers */
    auto s = stdin.byLineCopy.array;

    /* If moving left/right intead of up/down, transpose */
    !s.join.match(`\d \d`)?h(s.transposed,2UL):h(s,3UL);
}

এটি অনলাইন চেষ্টা করুন!


প্রথম উত্তরদাতা হওয়ার জন্য অভিনন্দন! আপনি এটি একটি জিততে পারেন ... আপনি ডি লিঙ্ক করতে পারেন?
প্রোগ্রামার

2

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

এটি অনলাইনে চেষ্টা করুন

A=input()
S=str(A)[2:-2].replace("', '",'')
i=S.index('#')
r=len(A[0])
w=1
a=i/r
if' '<S[i-r]:w=-w;A=A[::w];a=len(A)+~a
if' '<S[i+1]:A=zip(*A[::-1]);a=i%r
if' '<S[i-1]:A=zip(*A)[::-1];a=len(A)-i%r-1
s=0
for c in' '.join(map(''.join,A[0:a])).split():s+=sum(map(int,c));s=-s
print['left','right'][::w][s>0]

এই প্রোগ্রামটি রাস্তার দিকনির্দেশনা হ্রাস করে এবং এই চ্যালেঞ্জের অংশ 2 থেকে আমার সমাধানটি ব্যবহার করতে মুখরিত করে ates


2 বাইট দিয়ে মার! হতাশার কথা বলুন!
কেয়ার্ড কোইনরিঙ্গিংহিং

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