একটি "ম্যাচ -৩" গেমের সেরা তাত্ক্ষণিক পদক্ষেপটি সন্ধান করুন


11

আপনার চ্যালেঞ্জ আজ এই জাতীয় ইনপুট গ্রহণ করা হয়:

fbcfbee
ffcabbe
debceec
bccabbe
edcfbcd
daeaafc
eebcbeb

এবং বেজেওয়েলেড-মতো খেলায় সেরা সম্ভাব্য পদক্ষেপটি আউটপুট দিন যা তিন বা ততোধিক অক্ষরের সাথে মেলে, যেমন (মূলধনটি নোট করুন Bএবং C):

fbcfbee
ffcabbe
deBCeec
bccabbe
edcfbcd
daeaafc
eebcbeb

সম্পূর্ণ নির্দিষ্টকরণ:

  • ইনপুটটি প্রতিটি ছোট হাতের অক্ষরের nলাইন হবে n(যেখানে nকোনও সংখ্যা হতে পারে)।
  • আউটপুটটি আপনি একটি ম্যাচ -3 গেমটিতে যে দুটি অক্ষরকে মূলধনী বদলাতে চান তার সাথে সর্বাধিক স্থানান্তর হবে।
  • ম্যাচের নিম্নোক্ত অগ্রাধিকার থাকতে হবে (এই উদাহরণগুলিতে .এমন একটি বর্গ নির্দেশ করে যা গুরুত্বপূর্ণ নয়):

    1. পাঁচ একটি-সারি

      xxYxx
      ..X..
      
    2. পাঁচ-ইন-সারি ভাঙা

      X..
      Yxx
      x..
      x..
      

      অথবা

      .X.
      xYx
      .x.
      .x.
      
    3. ফোর-ইন-এ-সারি

      xYxx
      .X..
      
    4. তিন-একটি-সারি

      xYx
      .X.
      

    আপনাকে অবশ্যই সর্বোচ্চ অগ্রাধিকারের মিলটি খুঁজে বের করতে হবে এবং এটি আউটপুট করবে।

  • যদি একই অগ্রাধিকারের একাধিক ম্যাচ থাকে তবে আপনি যে কোনও একটি আউটপুট করতে পারেন।
  • সর্বদা কমপক্ষে একটি ম্যাচ থাকবে (যদি কোনও মিল না থাকে তবে আপনার প্রোগ্রামটি ভেঙে যেতে পারে বা আপনি যা কিছু করতে চান)।
  • আই / ও কোনও যুক্তিসঙ্গত বিন্যাসে থাকতে পারে (স্টিডিন / আউট, ফাইল পড়া এবং লেখা, ফাংশন আর্গুমেন্ট / রিটার্ন মান, ডায়ালগ বাক্স, ইত্যাদি) তবে হার্ডকোডযুক্ত নয় (যেমন x="[insert input here]")।
  • এটি তাই বাইট জিতে সংক্ষিপ্ততম কোড। আপনি যদি কোনও কারণে কোনও নেটওয়ার্ক অ্যাক্সেস ব্যবহার করেন তবে নেটওয়ার্ক থেকে ডাউনলোড করা সমস্ত বাইট আপনার স্কোরের বিপরীতে গণনা করবে।

1
+1, তবে আমি শিরোনামটির প্রতিবাদ করি; আরও ভাল পদক্ষেপ হতে পারে। উদাহরণস্বরূপ, দু'টি পাঁচটি তৈরি করে এমন একটি, বা এমন একটি যা আরও বেশি স্টাফ তৈরি করতে একটি ড্রপ সৃষ্টি করে।
জাস্টিন

পাঁচ-ইন-সারি ভাঙাও ..x.\nxxYX\n..x.কি coverাকা পড়ে ?
পিটার টেলর

@ পিটার হ্যাঁ, এটি করে।
ডুরকনব

একটি সারিতে প্যাটার্নে 2 টি ভাঙা 5 রয়েছে: এল প্যাটার্ন এবং টি প্যাটার্ন। আপনার কি দুটোই মিলে যাওয়ার দরকার?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ নাহহধঃ হ্যাঁ, আমি এটি পরিষ্কার করতে সম্পাদনা করব।
ডুরকনব

উত্তর:


2

পাইথন 3.4, 772

(ফাঁকা জায়গাগুলির পরিবর্তে ইন্ডেন্টেশনের জন্য ট্যাব ব্যবহার করা))

import sys,itertools as I
B=[]
for l in sys.stdin:
    l=l.rstrip()
    B.append(list(l))
Z=len(B[0])
F=T=None
R=range
N=min
X=max
P=I.product
S=0
def C(I,J,K,L):
    global F,T,S
    if K<0 or K>=Z or L<0 or L>=Z: return
    B[I][J],B[K][L]=B[K][L],B[I][J]
    h=v=1
    m=B[K][L]
    for i in R(K+1,N(Z,K+5)):
        if B[i][L]!=m:break
        v+=1
    for i in R(K-1,X(0,K-5),-1):
        if B[i][L]!=m:break
        v+=1
    for j in R(L+1,N(Z,L+5)):
        if B[K][j]!=m:break
        h+=1
    for j in R(L-1,X(0,L-5),-1):
        if B[K][j]!=m:break
        h+=1
    c=X(h,v)*2
    if N(h,v)>=3:c+=N(h,v)
    if c>S:S=c;F=I,J;T=K,L
    B[I][J],B[K][L]=B[K][L],B[I][J]
for i,j in P(reversed(R(Z)),R(Z)):
    for d,e in (1,0),(0,-1),(0,1),(-1,0):
        C(i,j,i+d,j+e)
for i,j in P(R(Z),R(Z)):
    c=B[i][j]
    if (i,j)in(F,T):c=c.upper()
    print(c,end=('',"\n")[j==Z-1])

পরিবর্তে [c for c in l], আপনি ঠিক করতে পারে list(l)
ডুরকনব

দুটি তুলনার পরিবর্তে (এফ, টি) এ (আই, জে) ব্যবহার করুন - 778
অস্টিন হেস্টিংস

এফ = (আই, জে) -> এফ = আই, জে। 2 আর / ও সিমগুলি ডিগ্লোবালাইজ করুন - 770
অস্টিন হেস্টিংস

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