শান্তিপূর্ণ সহাবস্থান বাহিনী


15

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

আপনার লক্ষ্যটি হল একটি স্কোয়ার বোর্ডের বৃহত্তম বৃহত্তম শান্তিপূর্ণ সহাবস্থান সেনাবাহিনী খুঁজে বের করা। এটি বোর্ডে পুরোপুরি ফিট করতে পারে এমন কৃষ্ণ ও সাদা কুইনের বৃহত্তম সংখ্যা two

আপনি কোনও স্কোয়ার বোর্ডের পাশের দৈর্ঘ্যের ইনপুট হিসাবে পাবেন এবং সেই বোর্ডে ফিট হতে পারে এমন বৃহত্তম শান্তিময় সহাবস্থান সেনাবাহিনীর আকারের সংখ্যা আউটপুট করা উচিত।

এটি তাই ট্যাগের জন্য প্রমিত নিয়ম প্রয়োগ করা হয়।

ওইআইএস এ 250000

এই পরীক্ষার ক্ষেত্রে সমস্ত জ্ঞাত উত্তর অন্তর্ভুক্ত থাকে। আপনার সমাধানটি একটি সাধারণ উত্তর হওয়া উচিত যা যথেষ্ট পরিমাণে কম্পিউটিং শক্তি এবং সময় দেওয়া হয়, কোনও ইনপুট মানের জন্য সমাধানটি গণনা করতে পারে।

1: 0
2: 0
3: 1
4: 2
5: 4
6: 5
7: 7
8: 9
9: 12
10: 14
11: 17
12: 21
13: 24

ওআইআইএস লিঙ্কটি পড়া থেকে, আমি নিশ্চিত নই যে স্বেচ্ছাসেবী পক্ষের দৈর্ঘ্যের জন্য জানা সমাধান রয়েছে।
কেলি লোডার

5
@ কেলিলাউডার আপনি সর্বদা এটির উপর চাপ প্রয়োগ করতে পারেন!
musicman523

2
@ musicman523, 6x6 বোর্ডের জন্য 3 ^ (6 ^ 2) বা 10 ^ 17 সম্ভাব্য রাজ্যের মতো লল কিছু।
কেলি লোডার

5
@KellyLowder আমি বলিনি এটি দ্রুত হবে: পি
musicman523

ছাঁটাই জিনিস গতি বাড়িয়ে তুলবে।
ক্যালকুলেটরফলাইন

উত্তর:


8

সি, 476 বাইট, ডিএফএস পুনরাবৃত্ত সাদা রানী, ও (2 এন 2 )

#define R return
#define Z(q)for(j=q;j<I;j++)
#define Q(q)memset(q,0,4*J);
#define U(q)S(w[k]/I q j,w[k]%I+j)
int*c,*w,*Y,j,k,r,I,J,m;T(i,j){R i*I+j;}S(x,y){x>=0&&x<I&&y>=0&&y<I?Y[T(x,y)]=1:0;}g(l){int i;if(l==m){Q(Y)for(k=m;k--;){Z(0)Y[T(w[k]/I,j)]=Y[T(j,w[k]%I)]=1;Z(-I)U(+),U(-);}for(r=k=J;k--;)r-=Y[k];R r>=m;}for(i=!l?0:w[l-1]+1;i<J;i++){if(!c[i]){c[i]=1;w[l]=i;if(g(l+1))R 1;c[i]=0;}}R 0;}f(s){I=s;J=I*I;int C[J],W[J],y[J];c=C;w=W;Y=y;for(m=1;;m++){Q(c)if(!g(0))R m-1;}}

518 বাইট, ছাঁটাই সহ ডিএফএস, হে (2 এন )

#define R return
#define Z(q)for(j=q;j<I;j++)
#define Q(q)memset(q,0,4*J);
#define V(Q)t=Q;if(!Y[t]){G-=Y[t]=1;b[B++]=t;}
#define F(q)if(S(x q j,y+j)){V((x q j)*I+y+j)}
int*c,*w,*Y,j,k,r,I,J,m;S(x,y){R x>=0&&x<I&&y>=0&&y<I;}D(l,H){int i,b[J],B,t,x,y,G;if(l==m)R 1;for(i=!l?0:w[l-1]+1;i<J;i++){if(!c[i]){c[i]=1;w[l]=i;x=i/I;y=i%I;G=H;Z(B=0){V(x*I+j)V(j*I+y)}Z(-I){F(+)F(-)}if(G>=m&&D(l+1,G))R 1;for(j=B;j--;)Y[b[j]]=0;c[i]=0;}}R 0;}f(s){I=s;J=I*I;int C[J],W[J],y[J];c=C;w=W;Y=y;for(m=1;;m++){Q(c)Q(Y)if(!D(0,J))R m-1;}}

577 বাইট, ডিএফএস সাদা এবং কালো রাণীগুলি পুনরাবৃত্তি করে, হে (?)

#define R return
#define U(V,r,q)S(V,r[i]/I q j,r[i]%I+j)
#define W(q)for(j=q;j<I;j++)
#define Z(r,q,t,v)for(i=0;i<r;i++){t[q[i]]=1;W(0)v[T(q[i]/I,j)]=v[T(j,q[i]%I)]=1;W(-I)U(v,q,+),U(v,q,-);};
#define P(K,L,M)memcpy(v,K,4*J);for(i=0;i<J;i++)if(!v[i]){L[M++]=i;if(g(E,N,!C))R 1;M--;};
int*w,*b,m,I,J;T(i,j){R i*I+j;}Q(int*q){memset(q,0,4*J);}S(V,x,y)int*V;{x>=0&&x<I&&y>=0&&y<I?V[T(x,y)]=1:0;}g(E,N,C){int i,j,v[J],X[J],Y[J];if(E==m&&N==m)R 1;Q(X);Q(Y);Z(E,w,X,Y)Z(N,b,Y,X)if(C){P(Y,b,N)}else{P(X,w,E)}R 0;}f(q){I=q,J=I*I;int W[J],B[J];w=W,b=B;for(m=1;;m++)if(!g(0,0,0))R m-1;}

মূলত, কোডটি সাদা রানির সম্ভাবনার বিষয়ে পুনরাবৃত্তি করে এবং তখন কালো রানী স্থাপন করা যায় কিনা তা যাচাই করে।

গতির রেফারেন্স সারণী (সেকেন্ডে):

+---+----------------------+---------------------+-----------------+--------+
| n |      DFS w & b       |        DFS w        |  DFS w/ pruning | Clingo |
+---+----------------------+---------------------+-----------------+--------+
| 3 |                 0.00 |                0.00 |            0.00 |   0.01 |
| 4 |                 0.00 |                0.00 |            0.00 |   0.02 |
| 5 |                 0.47 |                0.16 |            0.00 |   0.04 |
| 6 |                20.62 |                1.14 |            0.00 |   0.60 |
| 7 |              1125.07 |              397.88 |            0.63 |  18.14 |
| 8 |                      |                     |            1.28 | 979.35 |
| 9 |                      |                     |           23.13 |        |
+---+----------------------+---------------------+-----------------+--------+

2

ক্লিংগো , 90 বাইট

{q(1..n,1..n)}.a(X+(-I;0;I),Y+(0;I)):-q(X,Y),I=-n..n.:~K={q(X,Y)},{a(1..n,1..n)}n*n-K.[-K]

ডেমো

$ clingo peaceable.lp -cn=6
clingo version 5.1.0
Reading from peaceable.lp
Solving...
Answer: 1

Optimization: 0
Answer: 2
q(6,1) a(7,1) a(7,2) a(8,1) a(8,3) a(9,1) a(9,4) a(10,1) a(10,5) a(11,1) a(11,6) a(12,1) a(6,1) a(6,2) a(6,3) a(6,4) a(6,5) a(6,6) a(5,1) a(5,2) a(4,1) a(4,3) a(3,1) a(3,4) a(2,1) a(2,5) a(1,1) a(1,6) a(0,1) a(7,0) a(8,-1) a(9,-2) a(10,-3) a(11,-4) a(12,-5) a(6,-4) a(6,-3) a(6,-2) a(6,-1) a(6,0) a(5,0) a(4,-1) a(0,7) a(1,-4) a(2,-3) a(3,-2) a(6,-5) a(6,7) a(0,-5) a(12,7)
Optimization: -1
Answer: 3
q(1,6) q(6,1) a(7,1) a(7,2) a(7,6) a(8,1) a(8,3) a(9,1) a(9,4) a(10,1) a(10,5) a(11,1) a(11,6) a(12,1) a(6,1) a(6,2) a(6,3) a(6,4) a(6,5) a(6,6) a(5,1) a(5,2) a(5,6) a(4,1) a(4,3) a(4,6) a(3,1) a(3,4) a(3,6) a(2,1) a(2,5) a(2,6) a(1,1) a(1,2) a(1,3) a(1,4) a(1,5) a(1,6) a(0,1) a(0,5) a(0,6) a(-1,4) a(-1,6) a(-2,3) a(-2,6) a(-3,2) a(-3,6) a(-4,1) a(-4,6) a(-5,6) a(7,0) a(8,-1) a(9,-2) a(10,-3) a(11,-4) a(12,-5) a(6,-4) a(6,-3) a(6,-2) a(6,-1) a(6,0) a(5,0) a(4,-1) a(0,7) a(1,7) a(2,7) a(-1,8) a(1,8) a(3,8) a(-2,9) a(1,9) a(-3,10) a(1,10) a(-4,11) a(1,11) a(-5,12) a(1,-4) a(1,0) a(2,-3) a(3,-2) a(6,-5) a(6,7) a(4,9) a(5,10) a(6,11) a(1,12) a(-5,0) a(0,-5) a(7,12) a(12,7)
Optimization: -2
Answer: 4
q(1,6) q(6,1) q(6,6) a(7,1) a(7,2) a(7,5) a(7,6) a(8,1) a(8,3) a(8,4) a(8,6) a(9,1) a(9,3) a(9,4) a(9,6) a(10,1) a(10,2) a(10,5) a(10,6) a(11,1) a(11,6) a(12,1) a(12,6) a(6,1) a(6,2) a(6,3) a(6,4) a(6,5) a(6,6) a(5,1) a(5,2) a(5,5) a(5,6) a(4,1) a(4,3) a(4,4) a(4,6) a(3,1) a(3,3) a(3,4) a(3,6) a(2,1) a(2,2) a(2,5) a(2,6) a(1,1) a(1,2) a(1,3) a(1,4) a(1,5) a(1,6) a(0,1) a(0,5) a(0,6) a(-1,4) a(-1,6) a(-2,3) a(-2,6) a(-3,2) a(-3,6) a(-4,1) a(-4,6) a(-5,6) a(7,0) a(8,-1) a(9,-2) a(10,-3) a(11,-4) a(12,-5) a(12,0) a(6,-4) a(6,-3) a(6,-2) a(6,-1) a(6,0) a(5,0) a(4,-1) a(0,7) a(1,7) a(2,7) a(5,7) a(-1,8) a(1,8) a(3,8) a(4,8) a(-2,9) a(1,9) a(3,9) a(-3,10) a(1,10) a(2,10) a(-4,11) a(1,11) a(-5,12) a(0,12) a(1,-4) a(1,0) a(2,-3) a(3,-2) a(6,-5) a(6,7) a(6,8) a(4,9) a(6,9) a(5,10) a(6,10) a(6,11) a(1,12) a(6,12) a(-5,0) a(0,-5) a(0,0) a(7,7) a(8,8) a(9,9) a(10,10) a(11,11) a(7,12) a(12,7) a(12,12)
Optimization: -3
Answer: 5
q(1,1) q(1,6) q(6,1) q(6,6) a(7,1) a(7,2) a(7,5) a(7,6) a(8,1) a(8,3) a(8,4) a(8,6) a(9,1) a(9,3) a(9,4) a(9,6) a(10,1) a(10,2) a(10,5) a(10,6) a(11,1) a(11,6) a(12,1) a(12,6) a(6,1) a(6,2) a(6,3) a(6,4) a(6,5) a(6,6) a(5,1) a(5,2) a(5,5) a(5,6) a(4,1) a(4,3) a(4,4) a(4,6) a(3,1) a(3,3) a(3,4) a(3,6) a(2,1) a(2,2) a(2,5) a(2,6) a(1,1) a(1,2) a(1,3) a(1,4) a(1,5) a(1,6) a(0,1) a(0,2) a(0,5) a(0,6) a(-1,1) a(-1,3) a(-1,4) a(-1,6) a(-2,1) a(-2,3) a(-2,4) a(-2,6) a(-3,1) a(-3,2) a(-3,5) a(-3,6) a(-4,1) a(-4,6) a(-5,1) a(-5,6) a(7,-5) a(7,0) a(8,-1) a(9,-2) a(10,-3) a(11,-4) a(12,-5) a(12,0) a(6,-4) a(6,-3) a(6,-2) a(6,-1) a(6,0) a(5,-3) a(5,0) a(4,-2) a(4,-1) a(3,-1) a(2,0) a(0,7) a(1,7) a(2,7) a(5,7) a(-1,8) a(1,8) a(3,8) a(4,8) a(-2,9) a(1,9) a(3,9) a(-3,10) a(1,10) a(2,10) a(-4,11) a(1,11) a(-5,7) a(-5,12) a(0,12) a(1,-5) a(1,-4) a(1,-3) a(1,-2) a(1,-1) a(1,0) a(2,-3) a(3,-2) a(6,-5) a(6,7) a(6,8) a(4,9) a(6,9) a(5,10) a(6,10) a(6,11) a(1,12) a(6,12) a(-5,-5) a(-5,0) a(-4,-4) a(-3,-3) a(-2,-2) a(-1,-1) a(0,-5) a(0,0) a(7,7) a(8,8) a(9,9) a(10,10) a(11,11) a(7,12) a(12,7) a(12,12)
Optimization: -4
Answer: 6
q(1,2) q(1,3) q(2,2) q(2,3) q(2,6) a(7,1) a(7,2) a(7,3) a(7,6) a(8,2) a(8,3) a(8,6) a(6,2) a(6,3) a(6,6) a(5,2) a(5,3) a(5,5) a(5,6) a(4,1) a(4,2) a(4,3) a(4,4) a(4,5) a(4,6) a(3,1) a(3,2) a(3,3) a(3,4) a(3,5) a(3,6) a(2,1) a(2,2) a(2,3) a(2,4) a(2,5) a(2,6) a(1,1) a(1,2) a(1,3) a(1,4) a(1,5) a(1,6) a(0,1) a(0,2) a(0,3) a(0,4) a(0,5) a(0,6) a(-1,1) a(-1,2) a(-1,3) a(-1,4) a(-1,5) a(-1,6) a(-2,2) a(-2,3) a(-2,5) a(-2,6) a(-3,1) a(-3,2) a(-3,3) a(-3,6) a(-4,2) a(-4,3) a(-4,6) a(-5,2) a(-5,3) a(7,-4) a(7,-3) a(7,-2) a(8,-4) a(8,-3) a(8,0) a(6,-3) a(6,-2) a(6,-1) a(5,-2) a(5,-1) a(5,0) a(4,-1) a(4,0) a(3,0) a(2,0) a(1,7) a(2,7) a(3,7) a(5,7) a(0,8) a(1,8) a(2,8) a(4,8) a(-2,7) a(-1,9) a(1,9) a(2,9) a(-3,7) a(-3,8) a(-2,10) a(2,10) a(-4,7) a(-4,8) a(-4,9) a(-3,11) a(-5,8) a(-5,9) a(-4,12) a(1,-4) a(1,-3) a(1,-2) a(1,-1) a(1,0) a(2,-4) a(2,-3) a(2,-2) a(2,-1) a(6,7) a(6,8) a(5,9) a(6,10) a(2,11) a(2,12) a(-5,-4) a(-5,-3) a(-4,-4) a(-4,-3) a(-4,-2) a(-4,0) a(-3,-3) a(-3,-2) a(-3,-1) a(-2,-2) a(-2,-1) a(-2,0) a(-1,-1) a(-1,0) a(0,0) a(7,7) a(7,8) a(8,8) a(7,9) a(8,9) a(7,11) a(8,12)
Optimization: -5
OPTIMUM FOUND

Models       : 6
  Optimum    : yes
Optimization : -5
Calls        : 1
Time         : 0.733s (Solving: 0.71s 1st Model: 0.00s Unsat: 0.71s)
CPU Time     : 0.730s

আপনি কি একটু ব্যাখ্যা লিখবেন?
কিউ গান

2

পাইথন 2 | 325 284 217 বাইট

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

from itertools import*
N=input()
r=range(N*N)
for n in r:
 g=r
 for s in combinations(g,n):
    for p in s:g=filter(lambda q:all([abs(q%N-p%N)!=abs(q/N-p/N),q%N!=p%N,q/N!=p/N]),g)
    if len(g)>=n:break
    g=r
 else:exit(n-1)

সম্পাদনা: জি এবং অন্যান্য তুচ্ছ সম্পাদনাতে পূর্ণসংখ্যার সাথে টিপলগুলি প্রতিস্থাপন করা হয়েছে।

সম্পাদনা 2: সঙ্গীতানুষ্ঠান 2323 এবং ক্যালকুলেটরফলিনকে 217-এ বাইট ডাউন করুন !

কিভাবে এটা কাজ করে

প্রোগ্রামটি nরানির সমস্ত সম্ভাব্য অবস্থানের উপরে পুনরাবৃত্তি করে এবং রানির gঅবস্থানের কারণে অ-শান্তিপূর্ণ পয়েন্টগুলি ফিল্টার করে । যদি বাকী পয়েন্টগুলি এর চেয়ে বেশি হয় nতবে এর অর্থ হল nরানী সেনাবাহিনীর পক্ষে শান্তিতে থাকা সম্ভব । যদি পরবর্তী মানটির জন্য n, কোনও শান্তিপূর্ণ পরিস্থিতি খুঁজে পাওয়া যায় না, তবে প্রোগ্রামটি প্রস্থান কোড সহ প্রস্থান করে: n-1যার উত্তর। সংক্ষেপে, এটি নিষ্ঠুর শক্তি

শেষ দুটি লাইনে পরিবর্তন করে প্রোগ্রামটি আরও দ্রুত করা যায়

for n in range(N**2):
    if not z(n,N):print n-1;break

2
টিপ: পাইথন ২ এ 1 স্পেস এবং 1 টি ট্যাব পৃথক ইনডেন্টেশন স্তর Also এছাড়াও, আপনি from module import*মডিউল থেকে সমস্ত কিছু আমদানি করতে এবং বাইটগুলি সংরক্ষণ করতে ব্যবহার করতে পারেন ।
ক্যালকুলেটরফলাইন


1

Haskell, , 169 156 153 152 বাইট

k!(a:b)=k!b++[a:c|c<-(k-1)!b]
k!x=[x|k==0]
q&l|p<-q![[x,y,x-y,x+y]|x<-l,y<-l]=or[all and$zipWith(/=)<$>b<*>w|b<-p,w<-p]
g n=last$filter(&[1..n])[0..n*n]

একটি ফাংশন সংজ্ঞা দেয় g, আরও গল্ফযোগ্য হতে পারে। এটি অনলাইন চেষ্টা করুন! টিআইওতে, যখন এটি সংকলিত হয় -O2, এটি n = 4 এর জন্য প্রায় 36 সেকেন্ড সময় নেয় এবং n = 5 এ সময় বেরিয়ে যায় । সময়ের জটিলতা ও (এন 2) হওয়া উচিত 4 এন 2 ) হওয়া উচিত

ব্যাখ্যা

আমরা কুইনের সংখ্যার ( কিউ ) সম্ভাব্য মানগুলি নিয়ে পুনরাবৃত্তি করি । প্রতিটি কিউর জন্য , আমরা [1..n] 2 এর সমস্ত আকারের কিউ উপগ্রহগুলি , কালো রানীগুলির একটি সেট ( বি ) এবং সাদা কুইনের একটি সেট ( ডাব্লু ) তৈরি করি। তারপরে, খ এর প্রতিটি উপাদান প্রতিটি উপাদানের বিপরীতে পরীক্ষা করা হয় W যদি তাদের সারি, কলাম, তির্যক বা বিরোধী তির্যক ভাগ দেখতে। এটি একই স্থানাঙ্ককে ভাগ করে নেওয়ার জন্য দুটি টুকরাও যত্ন করে। Q এর সর্বাধিক মানশান্তিরূপী কনফিগারেশন স্বীকার করে এমন হ'ল চূড়ান্ত মান।

প্রোগ্রামের প্রথম দুটি লাইন ফাংশনটিকে সংজ্ঞায়িত করে !, যা kএকটি তালিকার দৈর্ঘ্য-উপসংগঠনগুলি গণনা করে x। বাস্তবায়নটি একটি মৌলিক পুনরাবৃত্তি দ্বারা হয়: হয় প্রথমে সেটটিতে থাকা উপাদানটি চয়ন করুন বা না করে লেজটিতে পুনরাবৃত্তি করুন, হ্রাস পাচ্ছেk প্রয়োজনে । তারপরে খালি তালিকা বা পৌঁছে গেছে তা পরীক্ষা করে দেখুন k==0

k!(a:b)=       -- ! on integer k and list with head a and tail b is
 k!b++         -- the concatenation of k!b and
 [a:c|         -- the list of lists a:c where
  c<-(k-1)!b]  -- c is drawn from (k-1)!b.
k!x=           -- If x doesn't have the form a:b (which means that it's empty),
 [x|           -- the result is a list containing x
  k==0]        -- but only if k==0.

দ্বিতীয় সহায়ক &ফাংশনটিতে একটি সংখ্যা q(উভয় পক্ষের কুইনের সংখ্যা) এবং একটি তালিকা l(বোর্ডের এক্স-কো-অর্ডিনেটস, এছাড়াও y- স্থানাঙ্ক হিসাবে ব্যবহৃত হয়) নেয় এবং একটি বুলিয়ান মান প্রদান করে যে কোনও শান্তিরোধী কনফিগারেশন বিদ্যমান কিনা তা নির্দেশ করে। আমরা প্রথমে গণনা করব p, qমানগুলির তালিকার দৈর্ঘ্য-উপসর্গগুলির তালিকা [x,y,x-y,x+y], কোথায় xএবং তার yসীমা রয়েছে l। এগুলি একটি স্কোয়ারের সারি, কলাম, তির্যক এবং অ্যান্টি ডায়াগোনাল উপস্থাপন করে(x,y) বোর্ডের ।

q&l               -- & on inputs q and l:
 |p<-             -- define p as
  q!              -- the q-subsequences of
  [[x,y,x-y,x+y]  -- the list of these 4-lists
   |x<-l,y<-l]    -- where x and y are drawn independently from l.

পরবর্তী আমরা ফলাফল আছে q&l। আমরা দুটি অনুচ্ছেদগুলি আঁকছি bএবং এর wথেকে p4 টি তালিকার সাথে সমস্ত সম্ভাব্য উপায়ে একত্রে জুড়ি দেব এবং চেক করুন যে তারা সবসময় 4 টি স্থানাঙ্কে আলাদা হয়। কিছু পছন্দ bএবং wসত্যবাদী ফলাফলের ফলস্বরূপ, আমরা ফিরে আসি True

=or            -- Does the following list contain a True:
 [all and$     -- every list contains only truthy values
  zipWith(/=)  -- if we zip with inequality
  <$>b<*>w     -- all elements of b and w in all possible ways,
 |b<-p,w<-p]   -- where b and w are drawn independently from p.

শেষ লাইনটি মূল ফাংশন। দেওয়া হয়েছে n, এটি কেবল সবচেয়ে বড় সম্ভাব্য মান খুঁজে পায় qযার জন্য q&[1..n]এটি সত্য।

g n=              -- g on input n is
 last$            -- the last of
 filter(&[1..n])  -- those values q for which q&[1..n] is true
 [0..n*n]         -- in this list.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.