গো বোর্ডে একটি পদক্ষেপ নিন


13

আপনাকে একটি গো গেম এবং খেলতে যাওয়ার জন্য একটি বোর্ডের পজিশন দেওয়া হবে । সরানো বৈধ কিনা তা আপনাকে আউটপুট করতে হবে এবং বৈধ কিনা নতুন বোর্ডের অবস্থান।

গো চলার সংক্ষিপ্ত ব্যাখ্যা: গেমটি বিকল্পভাবে একটি স্কোয়ার বোর্ডে খালি জায়গায় কালো এবং সাদা টুকরা ("পাথর") রাখার সমন্বয়ে গঠিত। একে অপরের সাথে সংযোগযুক্ত একই রঙের টুকরাগুলির সেটগুলি (ফোর-ওয়ে) গ্রুপ বলা হয়। বোর্ডের খালি জায়গাগুলি যা একটি গ্রুপের সাথে সংলগ্ন (এছাড়াও 4-উপায়) সেই গোষ্ঠীর "স্বাধীনতা" হিসাবে বিবেচিত হয়। 0 টি লিবার্টি সহ একটি গ্রুপ ধরা পড়ে (বোর্ড থেকে সরানো)। একটি পদক্ষেপ যা তার নিজস্ব গোষ্ঠীটিকে বন্দী করতে পারে ("আত্মহত্যা") অবৈধ, যদি না সে এক বা একাধিক প্রতিপক্ষের দলকে বন্দী করে (প্রক্রিয়াটিতে স্বাধীনতা অর্জন করে যাতে এটি আসলে ধরা পড়ে না)।

সংশ্লিষ্টদের জন্য, আপনার কো (এবং সুপারকো) এর সাথে ডিল করার দরকার নেই, অর্থাত্ আপনি কোনও ক্যাপচার আইনসম্মত বলে ধরে নিতে পারেন। এর অর্থ কী তা যদি আপনি না জানেন তবে কেবল উপরের বিধিগুলি অনুসরণ করুন এবং এটি ঠিক থাকবে।

ইনপুট: বোর্ড আকারের প্রতিনিধিত্ব করে 2 এবং 19 (সমেত) এর মধ্যে একটি সংখ্যা এন, তারপরে বোর্ডের অবস্থানের প্রতিনিধিত্ব করে 0 এবং 2 (সমেত) এর মধ্যে n সংখ্যার এন লাইন এবং তারপরে স্থান দ্বারা পৃথক পৃথক 3 টি সংখ্যা, তৈরির পদক্ষেপের প্রতিনিধিত্ব করে। বোর্ড পজিশনে 0 এর অর্থ ফাঁকা জায়গা, 1 এর অর্থ কালো পাথর এবং 2 এর অর্থ সাদা পাথর। সরানো পাথরটির কলাম, সারি এবং রঙ (1 বা 2) দেয়। কলাম এবং সারি 0-ভিত্তিক, 0 থেকে এন -1 (সমেত) এবং বোর্ড ইনপুট হিসাবে একই ক্রমে গণনা করা হয়।

আপনি ধরে নিতে পারেন যে প্রদত্ত বোর্ডের অবস্থান আইনী (সমস্ত গ্রুপের কমপক্ষে একটি স্বাধীনতা রয়েছে)।

আউটপুট: 1 বা 0 যুক্ত একটি লাইন (অথবা আপনি যদি পছন্দ করেন তবে সত্য / মিথ্যা) যদি পদক্ষেপটি বৈধ হয় বা না হয় তবে অনুসরণ করা হয় (কেবলমাত্র কোনও আইনি পদক্ষেপের ক্ষেত্রে কেবল) ইনপুট হিসাবে একই ফর্ম্যাটে নতুন বোর্ডের অবস্থান অনুসারে।

স্কোর: সম্পূর্ণ উত্স কোডের বাইট সংখ্যা, আরও ভাল। অ-এসকিআই অক্ষর ব্যবহারের জন্য 20% অতিরিক্ত জরিমানা, এবং বিনামূল্যেভাবে উপলব্ধ সফ্টওয়্যার ব্যবহার করে যদি আপনার কোড লিনাক্সে পরীক্ষা করা না যায় তবে 20% অতিরিক্ত জরিমানা।

বিধি: কোনও নেটওয়ার্ক সংযোগ এবং তৃতীয় পক্ষের লাইব্রেরি নেই। আপনার প্রোগ্রামটির মানক ইনপুট এবং আউটপুট স্ট্রিমগুলি বা আপনার প্রোগ্রামিং ভাষার জন্য মান সমতুল্য হওয়া উচিত।

উদাহরণ:

1) Input:

2
10
01
1 0 2

Output:

0

2) Input:

2
10
11
1 0 2

Output:

1
02
00

3) Input:

5
22122
22021
11211
02120
00120
2 1 1

Output:

1
00100
00101
11011
02120
00120

4) Input:

6
000000
011221
121121
122221
011110
000000
4 0 1

Output:

1
000010
011221
121121
122221
011110
000000

উত্তর:


2

পাইথন 3 (557 504 488)

import sys
s=sys.stdin
M=int(next(s))+1
j=Z=M*M-M
S=s.read(Z)
P=0
b=[0]*3
while j>0:j-=1+(j%M<1);b[int(S[j])]|=1<<j;P|=1<<j
N=lambda x:(x<<1|x>>1|x<<M|x>>M)&P&~x
def h(a,b):t=a|N(a)&b;return h(t,b)if t!=a else a
c,r,m=map(int,next(s).split())
o=m%2+1
p=1<<M*r+c
b[m]|=p
for n in(p<<1,p>>1,p<<M,p>>M):
 e=h(n&P,b[o])
 if~b[m]&N(e)<1<=n&b[o]:b[o]&=~e
_,B,W=b
g=~b[o]&N(h(p,b[m]))>=1>~_&p
print(+g)
q=''
while j<Z:
 r=1<<j
 if g*j%M>M-2:print(q);q=''
 else:q+='012E'[(r&B>0)+(r&W>0)*2]
 j+=1

বোর্ডটি উপস্থাপন করতে 3 বিটফিল্ড ব্যবহার করে - একটি করে কালো, সাদা এবং খালি জায়গাগুলির জন্য একটি। প্রতিবেশীদের সন্ধান করে Nএবং চেইন hঅপারেশনগুলি খুব সংক্ষিপ্ত করে তোলে ।

প্রচুর মন্তব্য সহ একটি অদ্বিতীয় সংস্করণ: https://gist.github.com/airfrog/8429006


আপনি একটি আছে অনেক প্রতিটি লাইনে শেষে স্পেস, আপনি পোস্ট হিসাবে ফাইল এটা 2732 বাইট হয়েছে।
অ্যাডিটসু ছেড়ে গেছে কারণ এসই এভিল

@ অ্যাডিটসু এটি এখনই ঠিক করা উচিত
এয়ারফ্রোগ

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

বাগ? ইনপুট: 6 000000 011221 121121 122221 011110 000000 4 0 1আউটপুট: 0. এখন উদাহরণ হিসাবে যুক্ত হয়েছে 4.
অ্যাডিটসু প্রস্থান করুন কারণ এসই ইভিল

এই বাগটি ঠিক করা হয়েছে, গল্ফ করার সময় আমি অন্য একটি বাগও খুঁজে পেয়েছি এবং ঠিক করেছি যা আপনি উদাহরণ হিসাবে যোগ করতে চাইতে পারেন। ইনপুট: 5 22100 20211 12211 12120 01120 1 1 2আউটপুট 0 হওয়া উচিত
এয়ারফ্রোগ

2

পাইথন ( 912 1004)

def o():
 n=int(raw_input(''))
 i=[raw_input('') for r in range(n+1)]
 b=[map(int,list(r)) for r in i[:n]]
 u,v,w=map(int,i[n].split(' '))
 if b[v][u]!=0:return 0
 b[v][u]=w
 if w==1:q=2
 elif w==2:q=1
 else:return 0
 f=[[],[],[]]
 h=[[],[],[]]
 g=[range(z*n,(z+1)*n) for z in range(n)]
 d=[(1,0),(-1,0),(0,1),(0,-1)]
 m=lambda z:max(0,min(n-1,z))
 t=[0,1,2,0,1]
 for j,s in enumerate(t):
  for r in range(n):
   for c in range(n):
    for y,x in map(lambda p:(m(r+p[0]),m(c+p[1])),d):
     if s==0:
      if b[y][x]==b[r][c]:
       if g[y][x]!=min(g[y][x],g[r][c]):
        t.insert(j+1,0)
       g[y][x]=g[r][c]=min(g[y][x],g[r][c])
     elif s==1:
      if g[r][c] not in h[b[r][c]]:
       h[b[r][c]].append(g[r][c])
      if b[y][x]==0 and g[r][c] not in f[b[r][c]]:
       f[b[r][c]].append(g[r][c])
    if s==2:
     if b[r][c]==q and g[r][c] not in f[b[r][c]]:
      b[r][c]=0
 h[w].sort()
 f[w].sort()
 if h[w]!=f[w]:return 0
 return "1\n"+'\n'.join([''.join(map(str,r)) for r in b])
print o()

চলুন: ইনপুট পার্স করুন, স্থানটি ফাঁকা জায়গায় রয়েছে কিনা তা পরীক্ষা করে দেখুন, চালনা করুন, init "গ্রুপ" গ্রিড করুন, সংলগ্ন পাথরের রং (s = 0) পরীক্ষা করে গ্রুপ গ্রিডকে সরল করুন / মিনিমাইজ করুন এবং এটি সম্পূর্ণরূপে কমানোর আগ পর্যন্ত পুনরাবৃত্তি করুন , পরীক্ষা করুন গ্রুপ লিবার্টি (s = 1) এর জন্য, কোনও লিবার্টি (s = 2) নেই এমন গোষ্ঠীগুলির জন্য প্রতিপক্ষের পাথর সরিয়ে ফেলুন, s = 0 এবং s = 1 পুনরাবৃত্তি করুন, পরীক্ষা করুন যে সমস্ত খেলোয়াড় গ্রুপের স্বাধীনতা আছে, ফেরতের ফলাফল।

এটি সম্ভবত উল্লেখযোগ্যভাবে ছোট করা যেতে পারে ...

ইন্টারেক্টিভ উদাহরণ চালায়:

2
10
01
1 0 2
0

2
10
11
1 0 2
1
02
00

5
22122
22021
11211
02120
00120
2 1 1
1
00100
00101
11011
02120
00120

6
000000
011221
121121
122221
011110
000000
4 0 1
1
000010
011221
121121
122221
011110
000000

1
আপনার প্রোগ্রামটি কিছু করে না, এটি কেবল একটি ফাংশন সংজ্ঞায়িত করে।
অ্যাডিটসু ছেড়ে গেছে কারণ এসই এভিল

এটি ইন্টারঅ্যাকটিভভাবে চালান এবং উদাহরণ রান হিসাবে এটি প্রিন্ট ও () সহ কল ​​করুন ...
জুর

নাঃ। এটি কমান্ড লাইন থেকে চালিত একটি স্বতন্ত্র প্রোগ্রাম হিসাবে অনুমিত হয়। তদ্ব্যতীত, এটি এটি আরও খাটো করে তুলবে।
অ্যাডিটসু ছেড়ে গেছে কারণ এসই এভিল

গত লাইনে মুদ্রণ ণ () যোগ করে এটি সংশোধন করা হয়েছে
Jur

কেন শুধু ফাংশন বডি ব্যবহার করবেন না (আউটডেনটেড)? এবং আমি মনে করি আপনি নতুন যুক্ত হওয়া উদাহরণটিও ব্যর্থ করেছেন
অদিতসু ছেড়ে যান কারণ এসই ইভিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.