দাবা রূপান্তর


15

দাবা দুনিয়ায় বেশ কাজ হয়েছে। উদাহরণস্বরূপ, একটি মানকযুক্ত ফাইল ফর্ম্যাট .pgnরয়েছে, যা চালের তালিকা সহ দাবা খেলার বর্ণনা দেয়। অতিরিক্তভাবে, আরও একটি ফাইল ফর্ম্যাট রয়েছে .fenযা বোর্ডের অবস্থানের বর্ণনা দেয়। আজকের চ্যালেঞ্জ হ'ল দাবা চালগুলির একটি তালিকা ( বীজগণিত স্বরলিপিতে ) একটি বোর্ড অবস্থানে রূপান্তর করা ।

সংজ্ঞা

  • অবস্থান [a-h][1-8]: সারি (ফাইল) এবং কলাম (র‌্যাঙ্ক) যুক্ত করে দেওয়া। বোর্ডে possible৪ টি সম্ভাব্য অবস্থানের একটি নির্ধারণ করে।
  • টুকরা [KQRBNP]?: কে ইনগ, কিউ ইউন, আর ইউক , বি আইশপ, কে এন ight, পি ওএন এর প্রতিনিধিত্ব করে । বীজগণিত স্বরলিপি Pব্যবহার করা হয় না। বোর্ডে ব্যবহার করার সময়, অক্ষরগুলি সাদা হলে অন্যথায় বড় হয়, অন্যথায় ছোট হাতের অক্ষর case
  • সরান [KQRBN]?[a-h]?[1-8]?x?[a-h][1-8](=[KQRBN])?(+*?)?|O-O(-O): একটি টুকরো যার পরে এটি স্থানান্তরিত হয়।
    • যদি টুকরোটি অস্পষ্ট হয় তবে সারি বা কলাম বা উভয়ই দেওয়া হয়।
    • যদি টুকরাটি কোনও টুকরো ধরে ফেলছে xতবে টুকরো এবং অবস্থানের মধ্যে স্থাপন করা হবে।
    • যদি পদক্ষেপটি একটি কাস্টলিং হয়, তবে O-Oকিং-সাইডের জন্য দেওয়া হয়, অন্যথায় O-O-O
    • যদি কোনও মহিমা প্রচার করা হয়, তবে পদক্ষেপটি এতে প্রচারিত =টুকরোটির পরে যুক্ত হবে।
    • যদি কোনও পদক্ষেপ বাদশাহকে পরীক্ষা করে দেখায় তবে এটি একটি দিয়ে সংযুক্ত করা হয় +
    • যদি কোনও পদক্ষেপ বাদশাহকে শান্তিতে ফেলে দেয় তবে তা এতে যুক্ত হয় #
    • টুকরোটির রঙটি টার্ন নম্বর দ্বারা নির্ধারিত হয় (সাদা এবং কালো বিকল্প ঘুরিয়ে, কালো দিয়ে শুরু করে))
  • বোর্ড (([1-8]|[KQRBNPkqrbnp])*\/){8}: সারিগুলি ক্রমের ক্রমে টুকরাগুলি তালিকা করে দেওয়া হয়। যদি খালি স্কোয়ার থাকে তবে খালি স্কোয়ারের প্রতিটি রান রানের দৈর্ঘ্য ব্যবহার করে দেওয়া হয়। সারিগুলি ব্যবহার করে পৃথক করা হয়/

একটি বোর্ডের প্রাথমিক অবস্থানটি rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNRযা প্রতিনিধিত্ব করে:

rnbqkbnr
pppppppp




PPPPPPPP
RNBQKBNR

আপনার মুভগুলির একটি তালিকা নেওয়া এবং একটি বোর্ড ফেরত দেওয়া দরকার। আপনি অনুমান করতে পারেন যে আপনার ইনপুটটি বৈধ।

উদাহরণ

                     -> rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
e4                   -> rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR
e4,c5                -> rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5        -> rnbqkbnr/ppp2ppp/8/3Pp3/8/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5,dxe6   -> rnbqkbnr/ppp2ppp/4P3/8/8/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4 -> r1bqk2r/ppp2pp1/4Pn2/2P4p/6nP/8/PPP2PPN/RNBQKB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4 -> r1bqk2r/ppp2pp1/4P3/2P4p/3Q2nP/6P1/PPP2n1N/RNB1KB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O -> r1bq1rk1/ppp2pp1/4P3/2P4p/3Q1BnP/6P1/PPP2n1N/RN2KB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+ -> r1b2rk1/ppp2Pp1/8/2P3qp/3Q1BnP/N5P1/PPP4N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q -> r1br1Q2/ppp3pk/8/2P3Bp/3Q2nP/N5P1/PPP4N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q,Ngf2,c6,Rd7,cxd7,b6,d8=Q,c6,Q4d6,Ba6,Qd8f6 -> r4Q2/p5pk/bppQ1Q2/6Bp/7P/N5P1/PPP2n1N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q,Ngf2,c6,Rd7,cxd7,b6,d8=Q,c6,Q4d6,Ba6,Qd8f6,Rb8,Qdd8,b5,Qc5,b4,Qxb8,bxa3,Rd3,Nxd3+,Kd1,axb2,Bh3,b1=Q+,Kd2,Qxa2,Qh6+,gxh6,Qcd6,Qa1,Qbc7+,Kh8,Qdd8# -> 3Q3k/p1Q5/b1p4p/6Bp/7P/3n2PB/2PK3N/q6n

এটি একটি , সুতরাং আপনার উত্তরগুলি যত তাড়াতাড়ি সংক্ষিপ্ত করুন!


সুতরাং কোন এন পাসেন্ট: পি?
আদনান

@ আদনান আমি বিশ্বাস করি যে আমার পরীক্ষার কেসগুলিতে একজন পরীক্ষার্থী অন্তর্ভুক্ত রয়েছে।
নাথান মেরিল

1
ওহ দুঃখিত, আমি এটি দেখিনি। আমি সর্বদা পাসের চালকদের সাথে নোট করতে অভ্যস্ত e.p.
আদনান

এর পরিবর্তে আমরা কি স্থানগুলি দ্বারা পৃথক করা পদক্ষেপগুলি নিতে পারি?
orlp

অবশ্যই. যে কোনও তালিকার বিন্যাস গ্রহণযোগ্য।
নাথান মেরিল

উত্তর:


3

জাভাস্ক্রিপ্ট (ES6), 1024 995 বাইট

এটি একটি প্রাথমিক এবং এখনও প্রচুর প্রচেষ্টা। 1K সীমা পৌঁছে গেলে আমি কেবল এটি অনুকূলকরণ বন্ধ করে দিয়েছি।

এটি সম্ভবত বুলেট-প্রমাণ নয় এবং কেবল রানির পদোন্নতি বিবেচনা করে। তবে এটি পরীক্ষার কেস পাস করে।

সম্পাদনা করুন: 995 বাইট - কয়েকটি সুস্পষ্ট অপ্টিমাইজেশন

সূত্র

F=i=>{B=[];b=0;X=[8,2,4,12,16,4,2,8,1];for(n=120;n--;B[n]=n<8?X[n]|32:n<24?33:n>111?X[n-112]
:n>95|0);Y=j=>(M[j]?M[j].charCodeAt(0)-97:8)|(M[++j]?(8-M[j])*16:128);G=_=>(F&8||!(F&7^f&7))
&&(F&128||!(F&112^f&112))&&B[f]==p;Z=d=>{for(k=f,u=1;(k+=d)!=T;)u&=!B[k]};Q=(j,...D)=>D.some
(d=>(j&2?!((f-T)%d)&&(Z(f<T?d:-d),u):T-f==d||(j&&f-T==d))&&(S=f));i.split(',').forEach(m=>{
if(m[0]=='O'){S=b?4:116;m[4]?(T=S-2,B[S-1]=B[S-4],B[S-4]=0):(T=S+2,B[S+1]=B[S+3],B[S+3]=0)}
else{M=m.match(/([B-R])?([a-h])?(\d)?x?([a-h])?(\d)?(=Q)?/);p=X["QKBNRP".indexOf(M[1]||'P')+
3]|b;F=Y(2);M[4]?T=Y(4):(T=F,F=136);for(f=120,S=0;f--;)G()&&(p&4&&Q(2,15,17),p&8&&Q(2,1,16),
p&2&&Q(1,14,18,31,33),p&16&&Q(1,1,15,16,17),p&1&&Q(0,b-16,2*b-32));for(f=120;p&1&&!S&&f--;)
G()&&Q(0,b-15,b-17);B[S]&1&&(S-T)%16&&!B[T]&&(B[T+16-b]=0)}B[T]=B[S];B[S]=0;M[6]&&(B[T]^=13)
;b^=32});for(r='',y=0;y<8;y++){for(x=z=0;x<8;x++)(b=B[y*16+x])?(p=".PN.B...R...Q...K"[b&31],
r+=(z||'')+(b&32?p.toLowerCase():p),z=0):z++;r+=(z||'')+(y<7?'/':'')}return r}

সম্পূর্ণ এক্সিকিউটেবল স্নিপেট

F=i=>{B=[];b=0;X=[8,2,4,12,16,4,2,8,1];for(n=120;n--;B[n]=n<8?X[n]|32:n<24?33:n>111?X[n-112]:n>95|0);Y=j=>(M[j]?M[j].charCodeAt(0)-97:8)|(M[++j]?(8-M[j])*16:128);G=_=>(F&8||!(F&7^f&7))&&(F&128||!(F&112^f&112))&&B[f]==p;Z=d=>{for(k=f,u=1;(k+=d)!=T;)u&=!B[k]};Q=(j,...D)=>D.some(d=>(j&2?!((f-T)%d)&&(Z(f<T?d:-d),u):T-f==d||(j&&f-T==d))&&(S=f));i.split(',').forEach(m=>{if(m[0]=='O'){S=b?4:116;m[4]?(T=S-2,B[S-1]=B[S-4],B[S-4]=0):(T=S+2,B[S+1]=B[S+3],B[S+3]=0)}else{M=m.match(/([B-R])?([a-h])?(\d)?x?([a-h])?(\d)?(=Q)?/);p=X["QKBNRP".indexOf(M[1]||'P')+3]|b;F=Y(2);M[4]?T=Y(4):(T=F,F=136);for(f=120,S=0;f--;)G()&&(p&4&&Q(2,15,17),p&8&&Q(2,1,16),p&2&&Q(1,14,18,31,33),p&16&&Q(1,1,15,16,17),p&1&&Q(0,b-16,2*b-32));for(f=120;p&1&&!S&&f--;)G()&&Q(0,b-15,b-17);B[S]&1&&(S-T)%16&&!B[T]&&(B[T+16-b]=0)}B[T]=B[S];B[S]=0;M[6]&&(B[T]^=13);b^=32});for(r='',y=0;y<8;y++){for(x=z=0;x<8;x++)(b=B[y*16+x])?(p=".PN.B...R...Q...K"[b&31],r+=(z||'')+(b&32?p.toLowerCase():p),z=0):z++;r+=(z||'')+(y<7?'/':'')}return r}

console.log(F(
  "e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4," +
  "O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q,Ngf2,c6,Rd7,cxd7,b6,d8=Q,c6,Q4d6,Ba6," +
  "Qd8f6,Rb8,Qdd8,b5,Qc5,b4,Qxb8,bxa3,Rd3,Nxd3+,Kd1,axb2,Bh3,b1=Q+,Kd2,Qxa2,Qh6+,gxh6," +
  "Qcd6,Qa1,Qbc7+,Kh8,Qdd8#"
));

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