আমার বাধা কোর্সটি কত বিচিত্র?


21

পটভূমি

আমি একটি আয়তক্ষেত্রাকার ঘরে বক্স রেখে একটি সাধারণ বাধা কোর্স তৈরি করেছি। এখন আমি মূলত বিভিন্ন উপায়ে এটি সমাধান করা যেতে পারে তার সংখ্যা গণনা করতে চাই। আমি আপনাকে তার জন্য একটি প্রোগ্রাম লিখতে চাই।

ইনপুট

আপনার ইনপুটটি অক্ষরগুলির একটি খালি খালি আয়তক্ষেত্রাকার অ্যারে .#। বিন্দুগুলি .খালি স্থান এবং এতে #বাধা রয়েছে।

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

Valid path  Invalid path  Invalid path  Invalid path
++........   ++........    +++++.....    ..+.......
.++++++#..   .+.....#..    ....+++#++    ..++...#..
......+#..   .+.++++#..    .......#.+    ...+++.#..
....#.++++   .+++#.++++    ....#....+    ....#+....

দুটি পাথ মূলত 1 টির মতো হয় যদি +একসাথে একবারে অন্যকে পরিবর্তন করে অন্যকে রূপান্তর করা যায় । মধ্যবর্তী পথগুলি অবশ্যই বৈধ হতে হবে, সুতরাং আপনি কোনও বাধা পেরিয়ে কোনও পথ বাঁকতে পারবেন না। উদাহরণস্বরূপ, এখানে প্রথম দুটি পাথ মূলত একইরকম, তবে তৃতীয়টি মূলত তাদের থেকে পৃথক, যেহেতু দুটি বাধা নিয়ে এটিকে আঁকানো যায় না:

++........   +.........   +++++++++.
.+++++.#..   ++.....#..   .......#+.
.....+.#..   .++++++#..   .......#++
....#+++++   ....#.++++   ....#....+

আউটপুট

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

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়। কোনও সময়সীমা নেই, ব্যতীত আপনার প্রোগ্রামটি জমা দেওয়ার আগে আপনার প্রতিটি পরীক্ষার ক্ষেত্রে মূল্যায়ন করা উচিত।

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

....
....
.... => 1

...#
....
...# => 0

#..#
..#.
.... => 0

......
......
..##..
......
...... => 2

......
...#..
......
..#...
#..... => 3

......
..#...
......
....#.
#..... => 4

.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0

......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7

.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17

..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10

.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16

1 সঠিক প্রযুক্তিগত শব্দটি হ'মোটোপিক "


1
" একবারে একটি চালানো " বলতে কী বোঝ+ ? এটি কি বোঝায় যে মূলত একই ধরণের পাথগুলি একই দৈর্ঘ্য হওয়া উচিত?
পিটার টেলর 19

3
@ পিটারটেলর সমস্ত পাথের দৈর্ঘ্য একই, কারণ সেগুলি কেবল নীচে এবং ডানে যেতে পারে। "একটি সরানো +" দ্বারা আমি মূলত বলতে চাইছি যে পথটির এক কোণটি বিপরীত দিকের কোণায় উল্টানো হয়েছে।
জাগারব

1
@ পিটার: যেহেতু আপনি কেবল ডান বা নীচে যেতে পারেন, সমস্ত পাথ একই দৈর্ঘ্য।
দেউসোভি

উত্তর:


8

শামুক , 53 49 বাইট

A^
\.+d!{.l\.+a3(.|~c!~}\.+r!(.u\.+e(.|~},\.,=~d~

একবারের জন্য, আমাকে tভয়ঙ্কর টেলিপোর্ট নির্দেশ ব্যবহার করতে হবে না । ফলস্বরূপ, পরীক্ষাগুলি অয়েসনের পরিবর্তে তাত্ক্ষণিকভাবে শেষ হয়।

Ungolfed:

A^
r\.+
{
    d\.+
    !{ r\.u \.+ a3 (.|~)}
    r\.+
    !{ d\.l \.+ a3 (.|~)}
},
d\.,
!(dr .)

বিকল্পগুলির A^অর্থ উপরের-বাম কোণে শুরু হওয়া এবং সমস্ত মিলে যাওয়া পাথ গণনা করা। মূল ধারণাটি হ'ল পাথগুলির জন্য একটি ব্যর্থতা শর্ত পরীক্ষা করা। আমি সত্যই এটি কাজ করবে বলে আশা করি না, তবে এটি পরীক্ষাগুলি পেরেক দিয়েছিল, তাই .... এটি যা যাচাই করার চেষ্টা করে তা হ'ল বর্তমান পথের মধ্যেই লোভীতম পথটি বেছে নেওয়া হয়েছে, অর্থাৎ যতবার সম্ভব ডান দিকে যাওয়া , যতবার সম্ভব নিচে ইত্যাদি, কোনও বাধা অতিক্রম না করে এটি 1 বা ততোধিক বার সরানোর পরে এবং তারপরে 1 বা ততোধিক বার নীচে চেক করার মাধ্যমে সম্পন্ন করা হয়েছে যে পরবর্তী বর্গটি (যা ডানদিকে আবশ্যক) পূর্ববর্তী ডানদিকের অংশে আরও একবার ডানদিক দিয়ে পৌঁছানো যেত না। অনুরূপ অবস্থা ডান এবং পরে নীচে সরানোর পরেও পরীক্ষা করা হয়।


কাজের জন্য সঠিক ভাষা সম্পর্কে কথা বলুন!
চার্লস

10

পাইথন 2, 170 131 112 বাইট

def f(C,t=1):i="#".join(C).find("#")+1;return([]<C)*(i<1or(i<t
and f([r[i:]for r in C],t-i))+(i>1)*f(C[1:],i-1))

একটি ক্রিয়া, fসারিগুলির তালিকা হিসাবে বাধা কোর্সটি গ্রহণ করে এবং মূলত বিভিন্ন পাথের সংখ্যা ফিরিয়ে দেয়।

ব্যাখ্যা

মূল ধারণাটি হ'ল: আমরা একটি নির্দিষ্ট বাধা বেছে নিই , যেমন, বাক্সে আবদ্ধ হওয়া এবং বাম কোণে অন্য কোনও বাধা নেই ।

+--+....
|..|....  
+--#<==== o
.....#..
.#......
........

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

                               A
_
........       ...|////      |....
........       ...|////      |....
...#....  -->  ...#////  -->  ....
.#....#.       .#..//#/       ..#.
........       ....////       ....

   |                           |
   v                           v
                  B
........       ___
........       .#....#.
___#....  -->  ........  -->   +
/#////#/       
////////       

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

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

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


এটি সমাধানটি আমি বিবেচনা করছি pretty আমি জানতাম যে সুযোগ পাওয়ার আগেই কেউ এটি পোস্ট করবে।
কুইন্টোপিয়া

6

সিজেম, 85 84 82 81 80 79 বাইট

qN/:Q,(Qz,(:R_T]2/e~e!{'#Qs@{\(\@>}%s-},{_}{(a\L{@+_@\-_{2$\f.=0fe=2&},}h;}w;],

এটি অনলাইনে চেষ্টা করুন। অথবা পুরো টেস্ট স্যুটটি চালান।

এই সমাধানটির দক্ষতা সম্ভবত বেশ ভয়ঙ্কর তবে এটি প্রতিটি পরীক্ষার কেস কয়েক সেকেন্ডের মধ্যেই সমাধান করে।

ব্যাখ্যা

আমাকে পরে কোডটির একটি সম্পূর্ণ ব্রেকডাউন যুক্ত করতে হবে, তবে আলগোরিদিমিক ধারণাটি হ'ল:

  • প্রস্থ এবং গ্রিড উচ্চতা হতে দিন Wএবং Hযথাক্রমে।
  • এর W-1অনুলিপি 0এবং H-1অনুলিপিগুলির W-1(যেখানে 0একটি অনুভূমিক পদক্ষেপ এবং W-1উল্লম্ব পদক্ষেপের প্রতিনিধিত্ব করা হয়) এর স্বতন্ত্র অনুমতি হিসাবে আমরা সমস্ত সম্ভাব্য পাথ তৈরি করি । আমরা তো বারবার গ্রিড প্রথম উপাদান গ্রহণ এবং তারপর কুঁদন দ্বারা যারা পাথ সব পদব্রজে ভ্রমণ stepঅর্ডার পড়া সেল (যেখানে stepহয় 0বা W-1)। আমরা সমস্ত পাথ বাতিল করে যাতে একটি রয়েছে #
  • তারপরে আমরা বারবার একই ধরণের পাথের একটি গোষ্ঠী সরিয়ে ফেলি (যা বাকি পথের প্রথমটির মতো সমস্ত পাথ হবে)। অনুরূপ পাথের জন্য অনুসন্ধান করা শর্তটি কিছুটা শিথিল করে কিছুটা সহজ হয়ে যায়: কোনওটি xস্থানান্তরিত হয়েছে কিনা তা পরীক্ষা না করে আমরা পরীক্ষা করে দেখি যে পথগুলি ঠিক দুটি জায়গায় পৃথক হয়েছে কিনা। যদি এটি হয় তবে two দুটি স্থানে একটি উল্লম্ব এবং অনুভূমিক পদক্ষেপ অদলবদল হবে। এটি সেই পদক্ষেপগুলির মধ্যে পুরো বিভাগটিকে একক কক্ষের মাধ্যমে তির্যকভাবে স্থানান্তরিত করে। তবে যদি এই দুটি পাথই বৈধ হয় তবে পথের কোনও অংশকে একটি কক্ষে ত্রিভুজের দ্বারা স্থানান্তরিত করা কোনও বাধা অতিক্রম করতে পারে না, তাই এগুলি একই রকম। আমাদের এখনও ট্রানজিটিভ ক্লোজারটি খুঁজে পাওয়া দরকার, সুতরাং পরবর্তী গ্রুপে যাওয়ার আগে আর কোনও অনুরূপ পাথ না পাওয়া পর্যন্ত আমরা তা চালিয়ে যাচ্ছি।
  • অবশেষে, আমরা যে দলগুলি পেয়েছি তার গণনা করি, যা আমরা স্ট্যাকের নীচে রেখে এসেছি left
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.