দাবা - সমস্ত আইনী পদক্ষেপগুলি সন্ধান করুন (কাস্টিং এবং উত্তীর্ণ পাস ব্যতীত)


19

সংক্ষিপ্ততম কোডটি লিখুন যা প্রদত্ত এফএন স্ট্রিং থেকে বর্তমান প্লেয়ারের সমস্ত সম্ভাব্য (আইনী) পদক্ষেপের গণনা করে। FEN স্ট্রিং কি? (উইকিপিডিয়া)

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

আপনি আউটপুট ভিন্নভাবে সেট করতে পারেন যদি আপনি চান হিসাবে (উদাহরণস্বরূপ: A2-A4, A2A4, a2a4, a2->a4...)

পরীক্ষার কেস:

# ইনপুট 1:

rnbqkbnr / pppppppp / 8/8/8/8 / পিপিপিপিপিপিপিপি / আরএনবিকিউবিএনআর ডাব্লু কে কিউকিউ - 0 1
# আউটপুট 1

A2-A4, A2-A3, B2-B4, B2-B3, C2-C4, C2-C3, D2-D4, D2-D3, E2-E4, E2-E3,
F2-F4, F2-F3, G2-G4, G2-G3, H2-H4, H2-H3, B1-A3, B1-C3, G1-F3, G1-H3
# ইনপুট 2

7 কে / 8/8/8/8/8 / পিপি 6 / কিউ 1 কি 4 কে ডাব্লু - - 0 1

# আউটপুট 2

এ 1-বি 1, এ 1-সি 1, এ 2-এ 3, এ 2-এ 4, বি 2-বি 3, বি 2-বি 4, এইচ 1-এইচ 2, এইচ 1-জি 1, এইচ 1-জি 2

পরীক্ষার কেস ইনপুট বোর্ডগুলি দেখতে কেমন তা এখানেও রয়েছে
golffzz


1
@ ইউগেন, আমি এটি বিবেচনা করেছি, তবে সম্ভাব্য সমস্ত পদক্ষেপের গণনা করা কিছু শর্টকাটকে সরিয়ে ফেলে। যদিও আমি নিশ্চিত নই, কেন এন পাসেন্টের প্রয়োজন হয় না: FEN এর পয়েন্টের অংশটি হ'ল এটি পাসের সম্ভাব্য করার জন্য পর্যাপ্ত তথ্য অন্তর্ভুক্ত করে।
পিটার টেলর 14

@ পিটারটেলর আমি লিখেছি যে কেবল কাজ হ্রাস করতে। আমি ভাবছি কেন কেন এই
গল্ফটিতে

1
@ গলফজ্জে আপনার পরীক্ষার কেস ইনপুট 2 হওয়া উচিত নয় 7 কে / 8/8/8/8/8 / পি 6 / কিউ 1 কি 4 কে - - 6 পি কে / 6 পিপি / 8/8/8 / পি 7 / পিপি 4 পিপি / কি 2 পি 2 পি কে এর পরিবর্তে 0 1 - - 0 1 (অন্যান্য জিনিসগুলির মধ্যে যা শেষের পয়েন্টগুলিতে মন্থর বলে মনে হয়)?
পেঙ্গুইনো

উত্তর:


8

সি - 391 বাইট

0 থেকে 63 লেবেলযুক্ত স্কোয়ারগুলি সহ স্ট্যান্ডআউটে কমান্ড লাইন আর্গুমেন্ট এবং প্রিন্ট হিসাবে ইনপুট নেয়।

ঠিক আছে, আমার কয়েক মিনিট সময় ছিল তাই আমি চেক সনাক্তকরণ সম্পর্কিত সমস্ত বিট মুছে ফেলার চেষ্টা করেছি। আমি মনে করি এটি এখন খুব দক্ষ নয় যদিও ...

O(x,y){return((x&7)-(y&7))/5;}
B[64],*b=B,J=32,M,L,x,*X,N;
main(int c,char**V){
for(;x=*V[1]++;c=J&2**V[2])
x>56?*b++=x:x>47?b+=x-48:0;
for(;b-->B;)
for(M=-1,N=*b%J^16,*V=strchr("bGInFJOQrAHkAGHIqAGHIpGHIx",*b|J);*b&&*b&J^c&&(M=M<0?*++*V%J:-M,**V<96);)
for(x=b-B,L=N?9^*b&8:1+(x/8==1+c/6);L--*!(O(x,x+M)|O(x>>3,x+M>>3));L=!*X|~*X&J^c&&N|(!*X^M&1&&M<0^!c)?printf("%d-%d ",b-B,x),L*!*X:0)
X=B+(x+=M);}

478 বাইট চেক সনাক্তকরণ সংস্করণ

O(x,y){return((x&7)-(y&7))/5;}
B[64],*b=B,c,I,J=32;
main(int C,char**V){
int*D,M,L,t,x,*X,N;
for(;b-B<64;C=c=J&2**V[2])
(t=*V[1]++)>56?*b++=t:t>47?b+=t-48:0;
for(D=b;D-->B;)
for(M=-1,N=*D%J^16,*V=strchr("bGInFJOQrAHkAGHIqAGHIpGHIx",*D|J);*D&&*D&J^C&&(M=M<0?*++*V%J:-M,**V<96);)
for(x=D-B,L=N?9^*D&8:1+(x/8==1+C/6);L--*!(O(x,x+M)|O(x>>3,x+M>>3));L=!*X|~*X&J^C&&N|(!*X^M&1&&M<0^!C)?c^C?I|=*X%J==11:(*X=*D,*D=I=0,main(C^J,V+1),*D=*X,I||printf("%d-%d ",D-B,x)),L*!(*X=t):0)
X=B+(x+=M),t=*X;}

এটি আশ্চর্যজনক, তবে এই প্রশ্নের সাথে মিলে যায় না: "চেক, চেকমেট এবং অচলাবস্থাকে উপেক্ষা করুন, রাজাও পরিস্থিতি ধরা পড়তে পারবেন না।"
edc65

@ edc65 এই দুর্ভাগ্যক্রমে অসংলগ্ন নির্দেশাবলীর আপনার ব্যাখ্যার সাথে আমি একমত নই। এতে বলা হয়েছে "আউটপুট পদক্ষেপগুলি অবশ্যই এন পাসেন্ট, ক্যাসলিং এবং প্যাড প্রচার ব্যতীত চলাচলের দাবা নিয়মগুলি মেনে চলবে" " চেক এ সরানো নিয়মগুলির গাed় তালিকায় উপেক্ষা করার জন্য উপস্থিত হয় না। আমি তৃতীয় বুলেট পয়েন্টটি একটি নোট হিসাবে গ্রহণ করি যে আপনার এই পরিস্থিতিগুলি সনাক্ত করতে এবং আউটপুটটিতে কোনও উপায়ে প্রতিফলিত করার প্রয়োজন নেই (যেমন একটি চেকের পরে '+' লেখার সম্মেলন) convention এছাড়াও, দ্বিতীয় পরীক্ষার কেস 2টি মূলত লিখিত হিসাবে সঠিক ছিল, প্রদত্ত কোনও ব্যক্তি যেমন নির্দিষ্ট হিসাবে পদ্ম প্রচারকে উপেক্ষা করে (তবে চেক সম্পর্কে কোনও অন্তর্দৃষ্টি দেয় না)।
feersum

দ্বিতীয় পরীক্ষার কেস (ইনপুট) 8 তম র‌্যাঙ্কের উপর কালো পদ্ম ফেলা অবৈধ ছিল এবং ওপি ( also here is how test case input boards look like) এর মন্তব্য হিসাবে পোস্ট করা চিত্রের চেয়ে আলাদা ছিল । চিত্রটিতে অবস্থান দেওয়া, মূল পরীক্ষার কেস আউটপুট নিয়ম অনুসারে সঠিক ছিল।
edc65

2
ওহ দুর্দান্ত, আসল স্পেকটি কি মন্তব্যে আছে? ওহ, কী খারাপ প্রশ্ন।
ফেয়ারসট

1
পরিষ্কার বিজয়ী
edc65

2

জাভা 1455

String q(String f){int[][]b=new int[8][8];int i=0,j=0,k,l,m,n,c;HashSet<String>h=new HashSet<String>();while((c=f.charAt(i))>32){if(c>48&c<57)j+=c-49;if(c==47)j--;if(c>56)b[j%8][j/8]=c;i++;j++;}boolean w=f.charAt(++i)>99;for(i=0;i<8;i++)for(j=0;j<8;j++)if((c=b[i][j])<91?w&c>0:!w){switch(c%32){case 14:for(k=0;k<8;k++){l=(k/4+1)*(k%2*2-1)+i;m=(2-k/4)*(k%4/2*2-1)+j;if(b(l,m)&&(w&b[l][m]%91<40|!w&b[l][m]<91))h.add(h(i,j,l,m));}break;case 11:for(k=0;k<8;k++){l=i+(k==4?1:k/3-1);m=j+(k==4?1:k%3-1);if(b(l,m)&&(w&b[l][m]%91<40|!w&b[l][m]<91))h.add(h(i,j,l,m));}break;case 17:for(k=0;k<8;k++){for(n=1;n<9;n++){l=i+n*(k==4?1:k/3-1);m=j+n*(k==4?1:k%3-1);if(b(l,m)){c=b[l][m];if(w&c%91<40|!w&c<91)h.add(h(i,j,l,m));if(c>0)break;}else break;}}break;case 2:for(k=0;k<4;k++){for(n=1;n<9;n++){l=i+n*(k/2*2-1);m=j+n*(k%2*2-1);if(b(l,m)){c=b[l][m];if(w&c%91<40|!w&c<91)h.add(h(i,j,l,m));if(c>0)break;}else break;}}break;case 18:for(k=0;k<4;k++){for(n=1;n<9;n++){l=i+n*(k/2*(k%2*2-1));m=j+n*((1-k/2)*(k%2*-2+1));if(b(l,m)){c=b[l][m];if(w&c%91<40|!w&c<91)h.add(h(i,j,l,m));if(c>0)break;}else break;}}break;default:m=w?-1:1;if(b[i][j+m]<1){h.add(h(i,j,i,j+m));if(b[i][j+2*m]<1&j==(w?6:1))h.add(h(i,j,i,j+2*m));}for(l=-1;i+l<8&i+l>=0&l<2;l+=2){c=b[i+l][j+m];if(c>0&(c<91?!w:w))h.add(h(i,j,i+l,j+m));}}}return h.toString();}boolean b(int l,int m){return m>=0&m<8&l>=0&l<8;}String h(int i,int j,int l,int m){return""+g(i)+(8-j)+g(l)+(8-m);}char g(int i){return(char)(i+65);}

2

পাইথন 553 649 678

b,Q=raw_input(),range;R=Q(8);D="w"in b
for i in Q(9):b=b.replace(`i`,"_"*i)
if D:b=b.swapcase()
def X(h,v,c):
 h+=x;v+=y
 if c and h|v in R and"a">b[v*9+h]:print chr(65+x)+`8-y`+chr(65+h)+`8-v`;return"_"==b[v*9+h]
for y in R:
 for x in R:
  z=y*9+x;p=b[z];N=p=="n";j=[p in"qrk"]*4+[p in"qbk"]*4
  if"p"==p:j[D]=k=(1,-1)[D];X(1,k,b[z+10*k]<"_");X(-1,k,b[z+8*k]<"_")
  for i in Q(1,(2,(y==(1,6)[D])+2,8)["kp".find(p)]):
   for k in R:j[k]=X((0,0,-i,i,-i,i,-i,i)[k],(i,-i,0,0,-i,-i,i,i)[k],j[k])
  for v,h in((2,1),(1,2)):X(v,h,N);X(-v,-h,N);X(-v,h,N);X(v,-h,N)

টু স্পেস ইনডেন্টটি ট্যাব চর, যা 5 বাইট সংরক্ষণ করে।

আমার কাছে এটি ঘটে যে আপনি সম্ভবত এটি একটি শালীন প্লাইয়ের যুক্তিসঙ্গত পদক্ষেপগুলি মূল্যায়ন করতে এবং এটি 1024 বাইটের আওতায় রাখতে পারেন :) আমি অন্য প্রশ্নগুলি সন্ধান করতে শুরু করেছি , তবে এখানে কোনও কোডগল্ফ দাবা ইঞ্জিন প্রশ্ন বলে মনে হচ্ছে না ...


2
এই প্রশ্নটি পুনরুত্থিত করার জন্য ভাল! (আমি তে এটি শুধু কি হয় তা দেখার আমি খয়রাত করা হতে পারে মনে।) আপনার উত্তর ভাল খুঁজছেন হয়, কিন্তু এটি ব্যার্থ B1C3এবং H2H3প্রথম উদাহরণ প্রশ্ন দেখানো হবে।
স্কিওমিশ ওসিফ্রেজ

দুঃখিত, না H2H3, আমি বোঝাতে চেয়েছি G1H3- অন্য কথায়, আপনার সাদা নাইটগুলি কেবল বাম দিকে ঘুরছে।
খুঁতখুঁতে ossifrage

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

@squeamishossifrage সংশোধন :)
উইল

1

পাইথন 638 637 (482?) বাইটস

exec"""p=raw_input()
for x in"12345678":p=p.replace(x,"~"*int(x))
b=map(ord,"#"*21+p[:71].replace("/","##")+"#"*21)
d,e=-10,126
if not"w"in p:b,d=[x^32*(64<x<e)for x in b],10
B=[-9,9,-11,11]
R=[-1,1,-d,d]
Q=B+R
c=Zx:chr(96+x%10)+chr(58-x/10)
for x,p in enumerate(b):
 def O(y):
    if 111<b[y]:print c(x)+c(y)
 s=ZL:[O(x+X)for X in L];m=ZL,z=x:L&(O(z+L[0]),m(L,z+L[0])if e==b[z+L[0]]else m(L[1:]))
 if p==80:e==b[x+d]&(O(x+d)or e==b[x+d*2]&35==b[x-d*2]&O(x+d*2)),111<b[x+d-1]<e&O(x+d-1),111<b[x+d+1]<e&O(x+d+1)
 p==75&s(Q),p==78&s([-12,12,-8,8,-21,21,-19,19]),p==82&m(R),p==66&m(B),p==81&m(Q)""".replace("Z","lambda ").replace("&"," and ")

দ্রষ্টব্য: এর আগে def O(y):একটি নতুন লাইন এবং একটি ট্যাব চর রয়েছেif

দ্রষ্টব্য: zlib মডিউল ব্যবহার করে কেবল আসল উত্সকে সংকুচিত করে 482 বাইটের একটি বৈধ পাইথন উত্স কোড পাওয়া সম্ভব:

#encoding=koi8-r
import zlib
exec zlib.decompress("x°MRKkЦ0>╞~┘Pы Eё╜Е4▌Ц█.9Br*1зБ┤B╠#°■╙=Лoъ╠M⌡│╬г0█\\pcл⌡╝x9╣ЧМф9^:Х╘e:·=м⌠Eй2oЭ╞нЫsQ9─ЩeсS{ЦAR ╕ПЭруюь4жрГыBшОhЖхпy`B▌╬ 58ёt:NхИHшк█╫ЁSK}VBmРПgOyР╢\n+'╬Z║╔▒╣иу√═╢╜-ы#G╙├з▓²Yк=╘л!dуkг≈┴?u$dOФ╘\n▐HфАюВ9]Шж╦╝╦9^┼▄пзИ√ Э│mi╜WeЧa3ъА╗╢бae┘.║WsьdЫ√Ы<ТВэГзьъ
ЙПiB╤≥П-Ъ■⌡<╡▌Б┬1╚3╕лGjщЫЙ(з╧н,>$Eш⌠FыdmШ<x,Р╔Mc;≥м╒2DLc!`Л≥рvЕFCИЪtyв%Н║╞╤≤O╝|'═┤)B|н*┘T╛▐рKпK;╔Я╓АШ&  бУ╗j└;│И╬Ж╝Щ\\4e]P&НРeZ╢5┼ДГt╚У")

1

জাভাস্ক্রিপ্ট (E6) 481 492 550

সম্পাদনা নাইট চলন্ত একটা বাজে বাগ সংশোধন করা হয়েছে। বাইট গণনা একই রাখার জন্য প্রচুর কাজ।

(পাঠযোগ্যতার জন্য রাখা শীর্ষস্থানীয় স্থান এবং নতুন লাইন গণনা করা হচ্ছে না)

B=f=>
  [for(c of(o=b='',f=f.split(w=' '))[0])b+=-c?w.repeat(c):c<'0'?z=10:c]+
  [...b].map((c,p)=>
    (K=d=>(d=b[p+d])==w?0:d>'a'?m:d>'A'?-m:9)(0)-1||(
      t='pPkKnNrRQqBb'.search(c),
      O=d=>K(d)<1?o+=w+P(p)+P(p+d):0,
      S=(d,s=0)=>O(d*++s)&&!K(d*s)&&S(d,s),
      //o+='\n'+P(p)+' '+c, // Uncomment to display pieces list
      t<2?[for(i of[~(s=t<1?z:-z),1-s])~K(i)||O(i)]+!K(s)&&O(s)&&(p/z|0)==t*5+1&!K(s+=s)&&O(s)
      :t<6?[for(i of t<4?[1,9,z,11]:[12,8,21,19])O(i)+O(-i)]
      :[for(i of[t>7&&9,t>7&&11,t<z,t<z&&z])S(i)+S(-i)]
    )
  ,m=f[1]<'w'?1:-1,
  //console.log(','+([...b]+',').replace(/1,0/g,'\n')), // Uncomment to display chessboard
  P=p=>'ABCDEFGH'[p%z]+(9+~p/z|0))&&o

কম গল্ফড

B=f=>(
  o=b='',[for(c of f)b+=-c?'.'.repeat(c):c],
  m=(w=b[72]=='w')?1:2,n=3-m,
  t=0,
  P=p=>'ABCDEFGH'[p%9]+(9+~p/9|0),
  b=b.slice(0,71),
  // console.log(b.replace(/\//g,'\n')), // Uncomment to display chessboard

  [...b].map((c,p)=>{
    r=p/9|0
    K=k=>(k=b[k])=='.'?0:k>'a'?m:k>'A'?n:9
    J=d=>K(p+d)<2,
    O=d=>J(d)?o+=' '+P(p)+P(p+d):0,
    S=(s,d)=>O(d*++s)&&!K(p+d*s)?S(s,d):0;

    if(K(p)==2){
      // o+='\n'+P(p)+ ' '+c; // Uncomment to display pieces list
      if (c=='P')
      {
        (f=!K(p-9))&&O(-9),
        f&r==6&&!K(p-18)&&O(-18),
        [for(i of[10,8])K(p-i)==1&&O(-i)]
      }
      else if (c=='p')
      {
        (f=!K(p+9))&&O(+9),
        f&r==1&&!K(p+18)&&O(+18),
        [for(i of[10,8])K(p+i)==1&&O(+i)]
      }
      else if (c=='K' |c=='k')
        [for(i of[1,8,9,10])O(i)+O(-i)]
      else if (c=='N' | c=='n')
        [for(i of[11,7,19,17])O(i)+O(-i)]
      else 
      {
        if (c!='r' & c!='R')
          [for(i of[10,8])S(0,i)+S(0,-i)]
        if (c!='b' & c!='B')
          [for(i of[9,1])S(0,i)+S(0,-i)]
      }
    }     
  }),
  o
)

টেস্ট ফায়ারফক্স / Firebug কনসোলে

B("7k/8/8/8/8/1P6/P7/Q1q4K w - - 0 1")

আউটপুট

B3B4 A2A3 A2A4 A1B2 A1C3 A1D4 A1E5 A1F6 A1G7 A1H8 A1B1 A1C1 H1G1 H1H2 H1G2

1

জাভা 631 599 594

599-বাইট সংস্করণে একটি বাগ স্থির করে (জ্যাককে এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ!) এবং কোডটি 594-বাইটে সংক্ষিপ্ত করে দেওয়া হয়েছে।

class F{
public static void main(String[]A){int p=0,i=8,u,v,d,z[]={0,1,-1,2,1,0,1};String f=A[0],S[]="p,n,rqk,bqk,aA,PNBRQK,aAPNBRQK".split(",");
for(;i>0;)f=f.replace(""+i,"a"+(--i==0?"":i));
for(;p<448;p++)
for(int k=p%7,w=A[1].equals("w")?32:0,c=f.charAt(p/7%8+p/56*9),a=z[k],b=k==4?2:1,q=0;S[(k/2-1|k-1)/2].indexOf(c+w)>=0&&q++<(k<3?1:4);i=a,a=b,b=-i){
for(i=1,d=97;d==97&&((u=p/7%8+i*a)|(v=p/56+i*b*(1-w/16)))>=0&&(u|v)<8&&i<(k>4?(c=='K'||c=='k')?2:9:(k<1&&p/56==w/6+1?3:2))&&S[61/(61^(k*k-2))+5].indexOf((d=f.charAt(u+9*v))-w)>=0;i++)System.out.printf("%c%d%c%d ",65+p/7%8,8-p/56,65+u,8-v);}}}

সংকলন: javac F.java
রান: java F 6pk/6pp/8/8/8/p7/PP4pp/Q2p2pK w - - 0 1
আউটপুট:B2B3 B2B4 B2A3 A1B1 A1C1 A1D1 H1H2 H1G1 H1G2


কারণ 3Q4/p4r1k/P4pp1/4P3/5n2/3P4/4BbbP/RN3KN1 w - - 0 0আমি চলাফেরা দেখছি না F1F2বা F1G2রাজা কি ধরতে পারবেন?
জ্যাক 18

এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। তুমি ঠিক. এই প্রকাশিত সংস্করণটি অপ্টিমাইজ করা হয়েছে :(
বব জেনোম

সুতরাং আমাকে আমার 631 বাইট দীর্ঘ সমাধানে ফিরে যেতে হবে।
বব জেনোম

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