এই কোষগুলিকে গ্রুপ করুন!


12

এই চ্যালেঞ্জটি খেলা লেয়ার্জের উপর ভিত্তি করে

স্টিডিনে বা একটি ফাংশন আর্গুমেন্ট হিসাবে দেওয়া হয় এমন একটি 2D আয়তক্ষেত্রাকার অ্যারের কোষ যেখানে প্রতিটি ঘরে একটি ফাঁকা থাকে (আপনি কোনও দণ্ড ছাড়াই ফাঁকের পরিবর্তে 0s ব্যবহার করতে পারেন), একটি 1, 2, 3 বা 4 ; এটিকে বৈধ অঞ্চলে বিভক্ত করার একটি উপায় সন্ধান করুন (নীচে সংজ্ঞায়িত করা হয়েছে) যেমন প্রতিটি অ-ফাঁকা ঘর ঠিক একটি অঞ্চল দ্বারা অন্তর্ভুক্ত থাকে। তারপরে, সমাধানটি কোনও যুক্তিসঙ্গত বিন্যাসে পাওয়া যাবে। যদি কোনও সমাধান না হয়, হয় আউটপুট বা আউটপুট উত্পাদন ছাড়াই থামান বা একক মিথ্যা মানের পরে থামান।

নিম্নলিখিত যে কোনও একটি বৈধ অঞ্চল গঠন করে:

  • একটি একক ঘর যা একটি 1 রয়েছে
  • একটি ঘর রয়েছে এমন একটি 2 এবং এর অবৈধ অস্থায়ী প্রতিবেশীদের ঠিক একটি one
  • একটি ঘর রয়েছে যার মধ্যে 3 রয়েছে এবং এর দুটি ফাঁকা অরথোগোনাল প্রতিবেশী হ'ল
  • একটি ঘর রয়েছে যার মধ্যে 4 রয়েছে এবং এর অবৈধ অস্থায়ী প্রতিবেশীদের ঠিক তিনটি of

এটি , তাই বাইটে, সংক্ষিপ্ততম বৈধ উত্তর।

কিছু পরীক্ষার কেস:

1. একটি বরং তুচ্ছ একটি:

এখানে চিত্র বর্ণনা লিখুন

এবং এটিই প্রতিটি অঞ্চলকে আলাদা বর্ণের সাথে সমাধান:

এখানে চিত্র বর্ণনা লিখুন

2. আরও আকর্ষণীয়

এখানে চিত্র বর্ণনা লিখুন

এটির একের অধিক সমাধান রয়েছে তবে এর মধ্যে একটি এখানে রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

৩. একটি ক্ষুদ্র একটি, যার মধ্যে ফাঁকা রয়েছে, এর কোনও সমাধান নেই (আপনি তিনটি "ক্যাপচার" করতে দু'জনের মধ্যে একটি ব্যবহার করেন কিনা তার উপর নির্ভর করে, বা তিনটি দু'জনের দুটি নিতে, আপনি হয় একটির সাথে রেখে গেছেন) ননডাজেসেন্টের জোড় [এবং সেইজন্য ননগ্রুপেবল] দু'একটি বা একক দুটি নিজেরাই):

এখানে চিত্র বর্ণনা লিখুন

কারণ এই গ্রিডটির কোনও সমাধান নেই, আপনার গ্রিডটি দেওয়া হলে কোনও প্রোগ্রাম আউটপুট ছাড়াই আপনার প্রোগ্রামটি থামানো উচিত।

৪. এটির (শীর্ষ 2 টির সাথে একটি ঘর বামে স্থানান্তরিত) এর সমাধান রয়েছে যদিও:

এখানে চিত্র বর্ণনা লিখুন

সমাধান:

এখানে চিত্র বর্ণনা লিখুন

(নীচে ডান 2 টি "ক্যাপচার" করতে ব্যবহৃত হয়)

৫. কারণ আমাদের কয়েকটি বাউন্ডুলির সাহায্যে একটি টেস্ট কেস দরকার ছিল:

একটি সমাধান:


2
টেস্ট কেসগুলির এএসসিআইআই সংস্করণ থাকলে এটি সহায়ক হবে যাতে লোকেরা সেগুলি সমস্ত টাইপ করতে না পারে এবং পরীক্ষাগুলির ক্ষেত্রেও 4যদি এগুলি বৈধ ইনপুট হয় তবে তা পরীক্ষা করা উচিত ।
মার্টিন এন্ডার

1
অर्थোগোনাল প্রতিবেশীদের অর্থ কি কেবল বাম দিক থেকে নীচে বাম দিকে, বা ত্রিভুজগুলিও রয়েছে? যদি কেবল ডানদিকে নীচে বামে রাখা হয় তবে 3 টি অন্য দুটি 3 এর একই অঞ্চলে কিভাবে আসবে? তাদের মধ্যে একটি অর্থেগোনাল প্রতিবেশী নয়।
ইয়াল লেভ

আইয়াললাইভ কেবল বাম-ডান-আপ-ডাউন। শীর্ষ ডান 3 এবং এর 2 প্রতিবেশী অঞ্চলটি গঠন করে।
সুপারজেডি ২৪

@ সুপারজেডি ২২৪ শীর্ষে ডানদিকে 3 এবং এটি দুটি প্রতিবেশী একটি বৈধ অঞ্চল গঠন করে, হ্যাঁ, তবে এই প্রতিবেশীরা তা করে না। কোনও অঞ্চলকে কি "বদ্ধ সেট" হতে হবে না? অর্থাত্ অঞ্চলের প্রত্যেক সদস্যকে অবশ্যই সেই অঞ্চলের একটি বৈধ সদস্য হতে হবে?
আইয়াল লেভ

উত্তর:


3

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

ধরে নিই যে "রুট" সেলটির সংখ্যা প্রতিটি অঞ্চলে একমাত্র তাত্পর্যপূর্ণ (উদাহরণগুলি থেকে ছাড়যোগ্য), এখানে আমার ব্যাকট্র্যাকিং সমাধানটি রয়েছে:

পাইথন 3 , 355 351 349 বাইট

from itertools import*
def f(a):
 D=len(a[0])+1;S={D*r+c for r in range(len(a))for c in range(D-1)if a[r][c]};s=[{x,*t}for x in S for t in combinations({x-D,x-1,x+1,x+D}&S,a[x//D][x%D]-1)]
 def B(s,S,d=1):
  if{0}>S:return a
  if[]==s:return 0
  h,*t=s
  if h<=S:
   for x in h:a[x//D][x%D]=d
  return h<=S and B(t,S-h,d+1)or B(t,S,d)
 return B(s,S)

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

ইনপুট ফর্ম্যাটটি পূর্ণসংখ্যার একটি 2D তালিকা, শূন্য হিসাবে ফাঁকা এবং আউটপুট ফর্ম্যাটটি সংখ্যার প্রতি এক অঞ্চলকে প্রতিনিধিত্ব করে পূর্ণসংখ্যার 2D তালিকা। অঞ্চল নম্বরটি এক থেকে শুরু হয়; শূন্যটি ফাঁকা ঘরগুলির জন্য সংরক্ষিত (ইনপুট হিসাবে)। যদি প্রদত্ত ইনপুটটি সমাধানযোগ্য না হয় তবে ফাংশনটি একক শূন্য (মিথ্যা মান) দেয়।

উদাহরণস্বরূপ, পরীক্ষার কেস 5 হ'ল ইনপুট

[[2,3,2],
 [3,4,3],
 [0,4,0],
 [3,3,3],
 [2,3,2],
 [0,3,0]]

এবং আউটপুট হয়

[[1,1,1],
 [2,2,2],
 [0,2,0],
 [3,4,5],
 [3,4,5],
 [0,4,0]]

মতামত সহ উজ্জ্বল:

from itertools import*
def f(a):
 # Rows, cols, fake-cols to prevent neighbors wrap around
 R,C=len(a),len(a[0]);D=C+1
 # All valid cells represented as integers
 S={D*r+c for r in range(R) for c in range(C) if a[r][c]}
 # All valid regions rooted at each cell
 s=[{x,*t} for x in S for t in combinations({x-D,x-1,x+1,x+D}&S,a[x//D][x%D]-1)]
 # Start backtracking
 return backtrack(a,s,S,D)

# a: array to fill in the region numbers
# s: current candidates of regions
# S: current remaining cells to cover
# D: constant from f
# d: recursion depth == group number in the result
def backtrack(a,s,S,D,d=1):
 # Empty S: the board is correctly covered, return the result
 if not S:return a
 # Empty s: no more candidate regions to use, return false
 if not s:return 0
 h,*t=s
 # h is not a subset of S: h is not a valid cover, try with the rest using same depth
 if not h<=S:return backtrack(a,t,S,D,d)
 # h is a valid cover, write d to the cells in h
 for x in h:a[x//D][x%D]=d
 return backtrack(a,t,S-h,D,d+1)or backtrack(a,t,S,D,d)
 

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

দ্রষ্টব্য: এটি সেট প্যাকিংয়ের একটি বিশেষ কেস যা এনপি-সম্পূর্ণ হিসাবে সুপরিচিত। এই নির্দিষ্ট সমস্যার সীমিত আকার (সর্বাধিক 4) রয়েছে এবং বহু-কালীন সময়ে "ভাল" সেট প্যাকিং সন্ধানের জন্য আনুমানিক অ্যালগরিদম রয়েছে তবে তারা সর্বোচ্চ সম্ভাব্য সেট প্যাকিংয়ের গ্যারান্টি দেয় না (যা এই সমস্যায় কঠোরভাবে প্রয়োজন) required

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