সমান ক্ষেত্রের অংশগুলিতে বর্গাকার গ্রিড বিভাজন করুন


17

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

উদাহরণ

এখানে বামদিকে ধাঁধা এবং ডানদিকে এর (অনন্য) সমাধান রয়েছে:

ধাঁধা সমাধান

চ্যালেঞ্জ

আপনাকে nযেকোন যুক্তিসঙ্গত বিন্যাসে শূন্য সূচকযুক্ত স্থানাঙ্কের একটি সেট দেওয়া হবে।

[(0,0), (0,3), (1,0), (1,1), (2,2)]

এবং আপনার কাজ হ'ল একটি প্রোগ্রাম লিখুন যা কোনও বৈধ পার্টিশন ফিরিয়ে দেয় (আবার কোনও যুক্তিসঙ্গত ফর্ম্যাটে)।

[
  [(0,0), (0,1), (0,2), (1,2), (1,3)],
  [(0,3), (0,4), (1,4), (2,4), (3,4)],
  [(1,0), (2,0), (3,0), (4,0), (4,1)],
  [(1,1), (2,1), (3,1), (3,2), (4,2)],
  [(2,2), (2,3), (3,3), (4,3), (4,4)]
]

ধাঁধাটির যদি কোনও সমাধান না হয় তবে প্রোগ্রামটির উচিত একটি ত্রুটি নিক্ষেপ করে বা খালি সমাধানটি ফিরে আসার মাধ্যমে।

ইনপুট / আউটপুট উদাহরণ

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

[(0,0), (1,1)]        => [
                          [(0,0), (1,0)], 
                          [(0,1), (1,1)]
                         ]

[(0,0), (0,1), (1,0)] => [] (no solution)

[(0,0), (0,1), (0,2)] => [
                          [(0,0), (1,0), (2,0)], 
                          [(0,1), (1,1), (2,1)],
                          [(0,2), (1,2), (2,2)],
                         ]

[(0,0), (0,2), (1,2)] => [
                          [(0,0), (1,0), (2,0)], 
                          [(0,1), (0,2), (1,1)],
                          [(1,2), (2,1), (2,2)],
                         ]

স্কোরিং

এটি , তাই সংক্ষিপ্ততম কোড জয়ী।


এটি ম্যাথ স্ট্যাক এক্সচেঞ্জ প্রশ্নটি দ্বারা অনুপ্রাণিত হয়েছিল ।
পিটার কেজি 24'19

@ আরনল্ড, এটি শিকাকু ধাঁধা হিসাবে মনে হচ্ছে, "উদ্দেশ্যটি গ্রিডটি আয়তক্ষেত্রাকার এবং বর্গক্ষেত্রের মধ্যে ভাগ করা"। এই ক্ষেত্রে, এই জাতীয় কোনও বাধা নেই।
পিটার কেজি 24'19

বিভ্রান্তির জন্য দুঃখিত. আমি মনে করি স্যান্ডবক্সের কোথাও কোনও শিকাকু চ্যালেঞ্জ থাকতে পারে, বা আমি হয়তো নিজেকে কিছুটা সময় বানাতে চাইছিলাম - আমি নিশ্চিত মনে করতে পারি না। যাইহোক, আমি প্রথম নজরে এটি একই জিনিস ভেবেছিলাম।
আর্নল্ড

ফলাফল কেন স্থানাঙ্কের 2 ডি অ্যারে হয়? আমি বুঝতে পারছি না যে সেখানে কী প্রকাশ করা হচ্ছে ... এটি অ্যারের সূচকের 2 ডি অ্যারে হতে পারে না? উদাহরণস্বরূপ সারি 3, কলাম 2 সূচক 4 এ স্থানাঙ্কের সাথে বিভাজন রয়েছে?
অলিভিয়ার গ্রাগোয়ার

উদাহরণস্বরূপ, আমরা কি অনুমান করতে পারি যে প্রতিটি ক্ষেত্রটি রেফারেন্স স্থানাঙ্কগুলি থেকে শুরু করে আঁকতে পারে? আমি ঠিক বুঝতে পেরেছি যে আমি অবচেতনভাবে এটিকে সম্মতি দিয়েছি।
আর্নল্ড

উত্তর:


11

জাভাস্ক্রিপ্ট (ES7), 166 বাইট

একটিগুলি

a=>(m=a.map(_=>[...a]),g=(n,X,Y,j=0,i)=>a[n]?a[j]?m.some((r,y)=>r.some((v,x)=>++v|(X-x)**2+(Y-y)**2-1?0:g(r[x]=n,x,y,j+1,i|x+[,y]==a[n])?1:r[x]=v)):i&&g(n+1):1)(0)&&m

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

কিভাবে?

মিএন×এনএন

m = a.map(_ => [...a])

মিএনমি++

এন(এক্স,ওয়াই)আমি

g = (n, X, Y, j = 0, i) => a[n] ? a[j] ? ... : i && g(n + 1) : 1

একটি[এন]একটি[]

মি

m.some((r, y) =>          // for each row r[] at position y in m[]:
  r.some((v, x) =>        //   for each cell of value v at position x in r[]:
    ++v |                 //     if this cell is already filled (i.e. v is numeric)
    (X - x) ** 2 +        //     or the squared Euclidean distance between
    (Y - y) ** 2 -        //     (X, Y) and (x, y)
    1 ?                   //     is not equal to 1:
      0                   //       this is an invalid target square: do nothing
    :                     //     else:
      g(                  //       do a recursive call to g:
        r[x] = n,         //         pass n unchanged and fill the cell with n
        x, y,             //         pass the coordinates of the current cell
        j + 1,            //         increment j
        i |               //         update i:
        x + [,y] == a[n]  //         set it if (x, y) = a[n]
      ) ?                 //       if the result of the call is truthy:
        1                 //         return 1
      :                   //       else:
        r[x] = v          //         reset the cell to NaN
  )                       //   end of inner map()
)                         // end of outer map()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.