একটি গ্রিডে দ্ব্যর্থহীন অবস্থানগুলি


11

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

চ্যালেঞ্জ ব্যাখ্যা

আপনাকে একটি রুম লেআউট এবং চারটি ঘড়ির কাঁটার দূরত্বের রিডিং দেওয়া হবে যাতে আপনার এবং একটি প্রাচীরের মধ্যে কোষের সংখ্যা থাকে। ঘরের মাঝখানে দেয়াল থাকতে পারে এবং গ্রিডের প্রান্তগুলিও দেয়াল। রোবটটি কোনও দেয়ালের উপরে স্থাপন করা যাবে না।

আপনার উদ্দেশ্যটি হল রুমটির মধ্যে থাকা সমস্ত অবস্থানের তালিকাবদ্ধ করা যা রোবট এতে থাকতে পারে read মনে রাখবেন যে রোবোটের অভিমুখীকরণের কোনও ধারণা নেই (গ্রিডে 90 ডিগ্রি কোণে লক হওয়া ব্যতীত- যেমন রোবটটি তির্যকভাবে বা অন্য কোনও স্কিউ কোণে কখনই ওরিয়েন্টেড হবে না), সুতরাং [1, 2, 3, 4], উদাহরণস্বরূপ, [3, 4, 1, 2] পড়ার সমান।

উদাহরণ

এই উদাহরণগুলির জন্য, শীর্ষ স্থির বাম ঘর থেকে সেল-স্থানাঙ্কগুলি 0-সূচিযুক্ত (x, y) জোড়া হিসাবে দেওয়া হবে। বর্গক্ষেত্র বন্ধনী তালিকায় পাঠ্যগুলি ঘড়ির কাঁটায় ক্রমানুসারে দেওয়া হবে। লেআউটগুলি খালি ঘরগুলি উপস্থাপনের জন্য দেয়াল এবং অন্যান্য অক্ষরের (সাধারণত বিন্দু) পাউন্ড চিহ্ন ব্যবহার করবে।

মামলা 1

. . . .
. . . .
. . # .
. . . .
  • [1, 0, 2, 3] ==> (1, 0), (3, 1)
  • [0, 0, 3, 3] ==> (0, 0), (3, 0), (0, 3), (3, 3)
  • [2, 1, 1, 0] ==> (0, 2), (2, 1)
  • [1, 1, 2, 2] ==> (1, 1)

মামলা 2

# a . # a .
a # . . # a
. . # . . #
# . . # . .
a # . . # a
. a # . a #
  • [0, 0, 1, 1] ==> গ্রিডের প্রতিটি অবস্থান যা একটি বিন্দু
  • [1, 0, 0, 0] ==> গ্রিডে থাকা সমস্তগুলি

মামলা 3

.
  • [0, 0, 0, 0] ==> (0, 0)

মামলা 4

. # #
. . .
  • [1, 2, 0, 0] ==> (0, 1)
  • [0, 1, 2, 0] ==> (0, 1)
  • [0, 0, 1, 0] ==> (0, 0)
  • [1, 0, 1, 0] ==> (1, 1)
  • [0, 1, 0, 1] ==> (1, 1)

মামলা ৫

. # . .
. . . .
. . # .
. . . .
  • [2, 1, 1, 0] ==> (0, 2), (2, 1)
  • [0, 2, 2, 1] ==> (1, 1)
  • [1, 0, 2, 2] ==> (1, 1)
  • [0, 3, 0, 0] ==> (0, 0)
  • [1, 0, 1, 1] ==> (1, 2)

অন্যান্য বিধি

  • ইনপুট যে কোনও সুবিধাজনক বিন্যাসে থাকতে পারে। ইনপুটটি দেয়াল এবং স্পেসগুলির একটি গ্রিড এবং ঘড়ির কাঁটার ক্রমে চারটি দূরত্বের একটি তালিকা।
  • আউটপুট হয় এমন সমস্ত কক্ষের তালিকা হতে পারে যা পাঠকে সন্তুষ্ট করে বা গ্রিডের পরিবর্তিত সংস্করণ দেখাচ্ছে যা দেখায় যে কোষগুলি পাঠকে সন্তুষ্ট করে। আউটপুটটির সঠিক ফর্ম্যাটটি যতক্ষণ না যুক্তিসঙ্গত এবং সামঞ্জস্যপূর্ণ তা বিবেচনা করে না। বৈধ আউটপুট ফর্ম্যাটগুলি অন্তর্ভুক্ত করে তবে সীমাবদ্ধ নয় :
    • অর্ডারযুক্ত জোড় হিসাবে প্রতিটি ঘরের সমন্বয়ের জন্য একটি লাইন মুদ্রণ করা
    • সঙ্গে গ্রিড মুদ্রণ ., #এবং !স্থান, দেয়াল, এবং সম্ভব অবস্থানে যথাক্রমে জন্য।
    • অর্ডার করা জোড়গুলির তালিকা ফিরিয়ে দেওয়া
    • সূচকের তালিকা ফিরিয়ে দেওয়া
    • শূন্যস্থান, দেয়াল এবং সম্ভাব্য জায়গাগুলির জন্য বিভিন্ন মান ব্যবহার করে তালিকার একটি তালিকা ফেরত
    • যেখানে পাঠ ঘটেছিল সেগুলি উপস্থাপন করতে 1s ব্যবহার করে 0 এবং 1 এর ম্যাট্রিক্স প্রিন্ট করুন / মুদ্রণ করুন। (দেয়াল অন্তর্ভুক্ত করার প্রয়োজন নেই)
    • আবার, এই তালিকাটি সম্পূর্ণ নয়, সুতরাং অন্যান্য উপস্থাপনাগুলি যতক্ষণ না তারা সামঞ্জস্য থাকে বৈধ এবং গ্রিড বা তালিকার প্রতিটি সম্ভাব্য বৈধ অবস্থান প্রদর্শন করে show আপনি যদি অনিশ্চিত হন তবে একটি মন্তব্য দিন এবং আমি পরিষ্কার করে খুশি হব।
  • আপনি ধরে নিতে পারেন যে কোনও পাঠ গ্রিডের কমপক্ষে একটি অবস্থানের সাথে সম্পর্কিত।
  • আপনি ধরে নিতে পারেন ইনপুট গ্রিডটি কমপক্ষে 1x1 আকারের এবং কমপক্ষে একটি ফাঁকা জায়গা রয়েছে।
  • আপনি ধরে নিতে পারেন যে ইনপুট গ্রিড প্রতিটি মাত্রায় 256 টির বেশি কক্ষের চেয়ে বড় নয়।
  • আপনি ধরে নিতে পারেন যে ইনপুট গ্রিডটি সর্বদা একটি নিখুঁত আয়তক্ষেত্র এবং জ্যাগড নয়।
  • আপনার প্রোগ্রামটি অবৈধ ইনপুটগুলির জন্য বুদ্ধিমান আউটপুট দেওয়ার ক্ষেত্রে কোনও জরিমানা বা বোনাস নেই।
  • এটি কোড গল্ফ, তাই সংক্ষিপ্ততম কোড জয়ী।

জন্য পরীক্ষাগুলি Case 5বেশ সঠিক বলে মনে হয় না। আমি পেতে (0,2),(2,1), (1,3), (1,3), এবং nothing
টিফিল্ড

@ফিল্ড ধন্যবাদ সংশোধন করা হয়েছে।
বীফস্টার

1
@ আরনাউল্ড আমার কাছে যুক্তিযুক্ত বলে মনে হচ্ছে। আমি এটি ইতিমধ্যে সম্পূর্ণ-বহনকারী তালিকায় যুক্ত করব।
বিফস্টার

উত্তর:


3

জাভাস্ক্রিপ্ট (ES6),  130 128 126  125 বাইট

(m)(l)m01l

1

m=>l=>m.map((r,y)=>r.map((v,x)=>v&!!([...'3210321'].map(d=>(g=X=>(m[Y+=~-d%2]||0)[X+=(d-2)%2]?1+g(X):0)(x,Y=y))+g).match(l)))

এটি অনলাইন চেষ্টা করুন! (পাঠযোগ্যতার জন্য পোস্ট-প্রক্রিয়াজাত আউটপুট সহ)

মন্তব্য

m => l =>                         // m[] = layout matrix; l[] = list of distances
  m.map((r, y) =>                 // for each row r[] at position y in m[]:
    r.map((v, x) =>               //   for each cell v at position x in r[];
      v &&                        //     yield 0 if v = 0
      !!(                         //     otherwise, test whether we can find l[] within a
        [...'3210321']            //     list containing twice the results of the sensors
        .map(d =>                 //       for each direction d:
          (g = X => (             //         g = recursive function taking X
              m[Y += ~-d % 2]     //         add dy[d] to Y
              || 0                //         use a dummy object if we're out of the board
            )[X += (d - 2) % 2] ? //         add dx[d] to X; if (m[Y] || 0)[X] is equal to 1:
              1 +                 //           add 1 to the final result
              g(X)                //           and do a recursive call
            :                     //         else:
              0                   //           yield 0 and stop recursion
          )(x, Y = y)             //         initial call to g with X = x and Y = y
        )                         //       end of map() over directions
        + g                       //       coerce the result to a comma-separated string,
                                  //       followed by harmless garbage
      ).match(l)                  //     test whether l[] can be found in this string
                                  //     (l[] is implicitly coerced to a string as well)
    )                             //   end of map() over r[]
  )                               // end of map() over m[]


1

কাঠকয়লা , 42 বাইট

PθFθ¿⁼¶ι⸿¿№E⁴E⁴⊖⌕⁺⪫KD⊕⌈η✳§⟦→↓←↑⟧⁺κμω#¦#η!ι

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। কাঠকয়লা কোনও কারণে আউটপুটটিতে কিছু প্যাডিং যুক্ত করবে বলে মনে হয়; আমি ধরে নিচ্ছি এটি কাঠকয়ালে একটি বাগ আছে। ব্যাখ্যা:

Pθ

কার্সারটি না সরিয়ে মানচিত্রটি মুদ্রণ করুন।

Fθ

মানচিত্রে প্রতিটি অক্ষরের উপরে লুপ করুন।

¿⁼¶ι⸿

এটি যদি একটি নতুন লাইন থাকে তবে কার্সারটি পরবর্তী লাইনের শুরুতে সরান।

⊖⌕⁺⪫KD⊕⌈η✳§⟦→↓←↑⟧⁺κμω#¦#

দিকের প্রাচীরের দূরত্বটি সন্ধান করুন k+m

¿№E⁴E⁴...η!ι

চারটি শুরুর দিকের দিকের লুপ k, চারটি ঘড়ির কাঁটার দিক থেকে উঁকি দেওয়া এবং ফলাফলটিতে mযদি দ্বিতীয় ইনপুট অন্তর্ভুক্ত থাকে তবে !অন্যথায় বর্তমান অক্ষরটি মুদ্রণ করুন।

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