ন্যূনতম বগল-জাতীয় ব্যবস্থা


14

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

শব্দটি MISSISSIPPI6 টি কিউব ব্যবহার করে সাজানো যেতে পারে। এখানে একটি সম্ভাব্য ব্যবস্থা রয়েছে:

 S
MIS
 PP

থেকে শুরু Mআমরা বারবার কোনো পদক্ষেপ অনুভূমিকভাবে, উল্লম্বভাবে বা তির্যকভাবে পর্যন্ত সমগ্র শব্দ বানান আউট যে পদক্ষেপ নেওয়া।

আশ্চর্যের বিষয়, এর মতো দীর্ঘতর বাক্যাংশের AMANAPLANACANALPANAMAজন্য কেবল 6 টি কিউব প্রয়োজন:

MAN
PLC

তবে দীর্ঘ সময়ের জন্য প্রয়োজনীয় ন্যূনতম সংখ্যা, আরও জটিল স্ট্রিং সর্বদা সুস্পষ্ট নয়।

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম লিখুন যা কোনও স্ট্রিং নেয় এবং এটিকে এই বোগল-জাতীয় ফ্যাশনে এমনভাবে সাজিয়ে তোলে যাতে সর্বনিম্ন সংখ্যক কিউব ব্যবহৃত হয় । (ফলস্বরূপ গ্রিডের মাত্রাগুলি এবং খালি কোষের সংখ্যা অপ্রাসঙ্গিক))

ধরুন আপনার কাছে প্রতিটি মুদ্রণযোগ্য ASCII চরিত্রের জন্য স্থান (হেক্স কোড 21 থেকে 7 ই) ব্যতীত সীমাহীন সংখ্যক কিউব রয়েছে , যেহেতু এটি খালি গ্রিড সেল হিসাবে ব্যবহৃত হয়েছে। কেবল প্রিন্টযোগ্য এএসসিআইআই স্ট্রিংগুলি (ফাঁকা ছাড়াই) ইনপুট হবে।

স্টিডিন বা কমান্ড লাইন থেকে ইনপুট নেওয়া উচিত। আউটপুট stdout (বা নিকটতম বিকল্প) যেতে হবে।

আউটপুটে শীর্ষস্থানীয় বা পিছনে থাকা নিউলাইনগুলি এবং স্পেসগুলি ঠিক আছে (তবে আশা করা যায় এর মতো কোনও পরিমাণ নেই)।

স্ট্রিংটি দীর্ঘ হওয়ার সাথে সাথে অনুসন্ধানের স্থানটি দ্রুত প্রস্ফুটিত হয়, তবে আপনার অ্যালগরিদমকে দক্ষ করার চেষ্টা করার প্রয়োজন নেই (যদিও এটি দুর্দান্ত হবে :))। এটি কোড-গল্ফ, তাই বাইটগুলির মধ্যে সংক্ষিপ্ততম সমাধানটি জিতে।

উদাহরণ

ইনপুটটি যদি Oklahoma!(8 টি চরিত্রের ন্যূনতম) হয়, তবে এগুলি সমস্ত বৈধ আউটপুট হবে কারণ সমস্তেরই ঠিক 8 টি ভরাট গ্রিড কোষ রয়েছে এবং তারা (সংশোধিত) বগল রিডিং প্যাটার্ন অনুসরণ করে:

Oklaho
   !m

অথবা

  !
Oamo
klh

অথবা

   lkO   
  !amo              
    h    

প্রভৃতি


4
এটি শক্ত অপ্টিমাইজেশান সমস্যার মতো মনে হচ্ছে। আমি মনে করি এটি একটি দুর্দান্ত কোড চ্যালেঞ্জ তৈরি করবে।
মার্টিন এন্ডার

1
আমি সম্পাদনা করতে পারছি না কারণ লো-রেপ ব্যবহারকারী থেকে মুলতুবি সম্পাদনা রয়েছে, তবে মিসিসিপির দুটি ডাবল-এস রয়েছে।
পিটার টেলর

কেস সংবেদনশীলতা সম্পর্কে কি?
গর্বিত হাসেলেলার

1
@ প্রফেসহেস্কেলর আমি নিশ্চিত যে ইনপুটটি সংবেদনশীল নয়, কারণ: ১) ইনপুটটি কোনও মুদ্রণযোগ্য এএসসিআইআই 2) ওপি অন্যথায় উল্লেখ করেনি 3) ইনপুটটি সংবেদনশীল না হলে ওকলাহোমা উদাহরণটি ন্যূনতম হবে না।
মার্টিন ইন্ডার

@ মার্টিনবাটনার আমি মনে করি আপনি কেস সেনসিটিভ
Ypnypn

উত্তর:


5

পাইথন 342 355 398

R=(-1,0,1)
A=[];b={}
def s(w,x,y):
 if w: # not at the end of the word yet?
  for I in R: # search adjacent squares
   for j in R:
    if I|j: # skip the square we are on
     i=I+x;j+=y;c=b.get((i,j)) # get square in board
     if c==w[0]:s(w[1:],i,j) # square is what we are looking for?
     elif not c:b[i,j]=w[0];s(w[1:],i,j);del b[i,j] # we can set square?
 else:A.append(dict(b)) # all solutions
s(raw_input(),9,9) # run the search
A=min(A,key=len) # A is now the shortest solution
C=sum(map(list,A),[]) # put all board coords together
C=range(min(C),max(C)+1) # find the board biggest square bound
for r in C:print"".join(A.get((c,r)," ") for c in C)

চারটি স্পেসে ইনডেন্ট আসলে একটি ট্যাব চরিত্র।

AMANAPLANACANALPANAMA:

MC 
NA 
PL

MISSISSIPPI:

S  
SI 
PPM

Oklahoma!:

oh    
 ma   
 ! l  
    k 
     O

Llanfairpwllgwyngyllহয় প্রাণঘাতী ;)


এখন দেখতে দুর্দান্ত লাগছে, সত্যিই ধীর: /
ক্যালভিনের

1
আপনি সরিয়ে একটু খাটো করতে পারেন import sysএবং প্রতিস্থাপন sys.argv[1]সঙ্গে raw_input()
ক্যালভিনের

@ Calvin'sHobbies ধন্যবা আবার, ঝরঝরে ডগা :) একটি প্রাথমিক পেতে আউট আপনি শুধু পরিবর্তন করতে পারেন elifকরতে elif not c and (not A or len(b)<len(A[-1])):এবং এটি দ্রুত অনেক রান
উইল

1
যদি "Oklahoma!"ঠিক আছে ইনপুট, আপনি কেবল input()পরিবর্তে ব্যবহার করতে পারেন raw_input()
FryAmTheEggman
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.