স্টিডিনে একটি বোর্ড দেওয়া, একটি বৈধ দাবা পদক্ষেপ খেলুন


11

প্রোগ্রাম সাদা খেলা।

স্টিডিন উদাহরণ:

8 ║♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟ … ♟ ♟ ♟
6 ║… … … … … … … …
5 ║… … … … ♟ … … …
4 ║… … … … … … … …
3 ║… … ♘ … … … … …
2 ║♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
1 ║♖ … ♗ ♕ ♔ ♗ ♘ ♖
——╚═══════════════
—— a b c d e f g h

Stdout উদাহরণ:

8 ║♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟ … ♟ ♟ ♟
6 ║… … … … … … … …
5 ║… … … … ♟ … … …
4 ║… … … … ♙ … … …
3 ║… … ♘ … … … … …
2 ║♙ ♙ ♙ ♙ … ♙ ♙ ♙
1 ║♖ … ♗ ♕ ♔ ♗ ♘ ♖
——╚═══════════════
—— a b c d e f g h

কোনও বৈধ পদক্ষেপ ঠিক আছে। "এন পাসেন্ট" এবং কাস্টিং উপেক্ষা করা হয়। বৈধ পদক্ষেপ না থাকলে ত্রুটি বার্তা প্রদর্শন করা বা কোনও কিছুই মুদ্রণ করা ঠিক।

সর্বাধিক ভোট সহ উত্তর জিতেছে।


আমি বলতে চাইছি ভাষার কোনও অন্তর্নির্মিত কার্যক্রমে ব্যর্থতার কারণে একটি স্ট্যান্ডার্ড ত্রুটি বার্তা। তো ঠিক আছে? - প্রোগ্রামটি কোনও আইনী পদক্ষেপ নিতে পারে তা কি বাধ্যতামূলক ? সম্ভবত কাস্টলিং এবং প্যাডের বিশেষ পদক্ষেপগুলি কিছু বোনাস দিয়ে alচ্ছিক করা উচিত?
পাল্টে যাওয়া বন্ধ করে দেওয়া হয়েছে

2
@ বামফুট চক্র: আপনি যখনই কাসল করতে পারেন, আপনি কেবল পরিবর্তে রুকটি সরাতে পারেন, যাতে আপনি কমপক্ষে এর জন্য যুক্তিটি এড়িয়ে যেতে পারেন।
হামার

2
... এবং এ সম্পর্কে আরও কিছু চিন্তা করে, "এন পাসেন্ট" পদক্ষেপে পূর্ববর্তী পদক্ষেপগুলি কী হয়েছে সে সম্পর্কে তথ্য প্রয়োজন, যা কেবল টুকরোগুলির অবস্থান থেকে অনুমান করা যায় না, তাই আমার ধারণা যে এটি ফেলে দেওয়া নিরাপদ। যাইহোক, ডাবল প্রথম পদক্ষেপ উপলব্ধ কিনা তা পদ্মার পদমর্যাদা থেকে অনুমান করা যায়, তাই আপনি এটি অন্তর্ভুক্ত করতে চাইতে পারেন।
হামার

@ হ্যামার: আপনি ঠিক বলেছেন, আমি সে সম্পর্কে ভেবে দেখিনি। একটি ক্ষেত্রে বাদে দ্বিগুণ পদক্ষেপটিও গুরুত্বপূর্ণ নয় : আপনি যখন দুটি পদক্ষেপে যেতে পারেন তখন আপনি একটিতেও যেতে পারেন, সুতরাং আপনি যখন তদন্তে থাকবেন তখনই এটি গুরুত্বপূর্ণ হয়ে ওঠে এবং ডাবল-মুভটি একমাত্র পদক্ষেপ যা রাজাকে coversেকে রাখে। এছাড়াও, আপনি যখন প্রতিটি পদক্ষেপ ব্যবহার করতে সক্ষম হবেন না তখনও আপনাকে এখনও বিবেচনা করতে হবে যে কালো কোনও সম্ভাবনা দিয়ে উত্তর দিতে পারে।
বন্ধ হয়ে গেছে

9
পদত্যাগ করা কি আইনী পদক্ষেপ হিসাবে গণ্য? :)
gnibbler

উত্তর:


16

আমি upvotes সম্পর্কে অভিযোগ করছি না, তবে ন্যায্য হতে হবে ... আমার সমাধান এখানে আসলে আসলে এত দুর্দান্ত নয়। ইউনিকোরেনের পক্ষে ইউনিকোড সহায়তার অভাব বাদে আরও ভাল। আপনি যদি এখনই এই প্রশ্নটি জুড়ে এসেছেন তবে ভোট দেওয়ার আগে সমস্ত উত্তর অবশ্যই লক্ষ্য করুন!
যাই হোক।

হাস্কেল, 893 888 904 952 (castালাই ছাড়াই)

862 (পদ্ম ডাবল মুভ ছাড়াই)

(এটি কোড গল্ফ বলে মনে করা হয় কিনা আপনি নির্দিষ্ট করেননি, তবে আমার কাছে এটি হওয়া উচিত বলে মনে হচ্ছে)

χ=w⋈b;w="♙♢♤♔♕♖♗♘";b="♟♦♠♚♛♜♝♞"
μ=t⤀ζ++((\(x,y)->(x,-y))⤀)⤀μ;q c|((_,m):_)<-((==c).fst)☂(χ⋎μ)=m
t(x:y:l)=(d x,d y):t l;t _=[];d c=fromEnum c-78
ζ=["NM","NL","MMOM","MMMNMONMNOOMONOO",σ⋈δ,σ,δ,"MLOLPMPOOPMPLOLM"]
σ=l>>=(\c->'N':c:c:"N");δ=[l⋎l,reverse l⋎l]>>=(>>=(\(l,r)->[l,r]))
l="GHIJKLMOPQRSTU"
α c|c∊"♢♤"='♙'|c∊"♦♠"='♟'|c∊χ=c;π('♙':_)=6;π _=1
(⋎)=zip;(⤀)=map;(∊)=elem;(✄)=splitAt;(☂)=filter;(⋈)=(++)
φ r@(x,y)p a
 |x>7=φ(0,y+1)p a
 |y>7=[]
 |c<-a✠r=(c⌥r)p a y⋈φ(x+1,y)p a
(c⌥r)p a y
 |c==p!!0=(a☈r)c χ++const(y==π p)☂(a☈r)(p!!1)χ++(a☈r)(p!!2)('…':w)
 |c∊p=(a☈r)c χ
 |True=[]
a✠(x,y)=a!!y!!(x*2);o(x,y)=x>=0&&x<8&&y>=0&&y<8
(n➴a)(x,y)|(u,m:d)<-y✄a,(l,_:r)<-(x*2)✄m=u⋈(l⋈(n:r):d)
(a☈r@(x,y))c b=(α c➴('…'➴a)r)⤀((\r->o r&&not((a✠r)∊b))☂((\(ξ,υ)->(x+ξ,y+υ))⤀q c))
main=interact$unlines.uncurry((⋈).zipWith((⋈).(:" ║"))['8','7'..]
 .head.((all(any('♔'∊)).φ(0,0)b)☂).φ(0,0)w.(drop 3⤀)).(8✄).lines

আপনি যখন জিএইচসি ইনস্টল করেছেন (উদাহরণস্বরূপ হাস্কেল প্ল্যাটফর্মের অংশ হিসাবে ) আপনি ঠিক করতে পারেন

$ runhaskell def0.hs < examplechessboard.txt
8 ║♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟ … ♟ ♟ ♟
6 ║… … … … … … … …
5 ║… ♘ … … ♟ … … …
4 ║… … … … … … … …
3 ║… … … … … … … …
2 ║♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
1 ║♖ … ♗ ♕ ♔ ♗ ♘ ♖
——╚═══════════════
—— a b c d e f g h

এখন এটি পাগল :) আমি এটি যাচাই করবো :)
হিস্তো হ্রিস্টভ

এই ধারণাটি কীভাবে পরীক্ষা করবেন? Ideone.com এটি পরিচালনা না ...
hristo Hristov

@ হিস্টো হিস্টোভ: আজব এটি আইডিয়নে কাজ করে না। সম্ভবত অ-এসসিআইআই অক্ষরগুলি করতে হবে।
পালা বন্ধ হয়ে counterclockwis

হ্যাঁ, এই ideone সঙ্গে সমস্যা
hristo Hristov

14
অভিনন্দন, আপনি হাস্কেলকে এপিএলের মতো করে তুলেছেন। :-)
ইলমারি করোনেন

11

সি, 734 672 640 টি অক্ষর

অপসারণযোগ্য সাদা স্থান ছাড়া অক্ষরগুলি গণনা করা।
আমি যে ফাইল ফর্ম্যাটটি ব্যবহার করেছি তা অনুরোধ হিসাবে নয়, তবে এএসসিআইআইকে সহজতর করা হয়েছে।
আমার ইউনিকোড অক্ষর সমর্থন যুক্ত করা দরকার, এটিতে কিছু পাঠ্যক্রমের জন্য ব্যয় হবে।

char*r=" kpnbrq  KPNBRQ $ ,&)$wxy()879()8(6:GI(",B[256],*b=B,i;
e(x,d,m,V,c,r,n,p){
    for(r=0,p=b[x];m/++r;){
        n=x+d*r;
        if(p==2+8*(d<0)||n&136||!(b[n]?r=8,8^p^b[n]^8&&c&65^64:c&65^65)
            ? r=m,0
            : V?v(n,x):b[n]==1)
            return b[x]=0,b[n]=p%8-2||n/16%7?p:p+4;
    }
    return d>0&&e(x,-d,m,V,c);
}
d(x,v,m,i)char*m;{
    return(i=*m-40)?e(x,i%64,b[x]%8-2?b[x]&4?7:1:(x/16-1)%5|i%2?1:2,v,i)||d(x,v,m+1):0;
}
v(t,f){
    bcopy(B,b+=128,128);
    b[t]=b[f];b[f]=0;
    i=a(1,63);
    b=B;
    return!i;
}
a(c,n){
    return b[i=n*2-n%8]&&b[i]/8==c&&d(i,!c,r+r[b[i]%8+15]-10)||n--&&a(c,n);
}
main(){
    for(;gets(b);b+=8)for(;*b;b++)*b=strchr(r,*b)-r;b=B;
    for(i=64*!a(0,63);i<64;i++%8-7||puts(""))putchar(r[b[i*2-i%8]]);
}

ইনপুট / আউটপুট ফাইল ফর্ম্যাট:
অবশ্যই 8 টি অক্ষরের ঠিক 8 লাইন হওয়া আবশ্যক। pnbrqkসাদা টুকরা PNBRQKজন্য, কালো টুকরা জন্য, স্পেসের জন্য স্পেস ব্যবহার করা হয়:

RNBQKBNR
PPPP PPP

 n  P


pppppppp
r bqkbnr

যুক্তিটি বেশ সহজ:
প্রতিটি সাদা টুকরোটির প্রতিটি সম্ভাব্য পদক্ষেপের জন্য, প্রতিটি কালো টুকরোটির প্রতিটি সম্ভাব্য পদক্ষেপ চেষ্টা করুন।
কোনও কালো পদক্ষেপ যদি সাদা রাজাকে ধরে না ফেলে তবে সাদা পদক্ষেপটি বৈধ।

বোর্ডটি char[256]16x16 ম্যাট্রিক্স হিসাবে ধরে রাখা হয় , যেখানে কেবল উপরের বাম 8x8 ব্যবহৃত হয়। পজিশন এবং মুভমেন্ট ভেক্টরগুলিকে 8-বিট পূর্ণসংখ্যায় ( x:4,y:4) রাখা হয়। অতিরিক্ত বিট new_pos = old_pos + steps*directionবোর্ড প্রান্তের সহজ সনাক্তকরণ ( &0x88যাদু করে) সহ সাধারণ গাণিতিক ( ) ব্যবহার করে allows r[]তিনটি জিনিস এনকোড করে:

  1. প্রথম 15 বাইট চিঠিপত্রের অভ্যন্তরীণ টুকরা কোডগুলি (কে = 1, পি = 2, এন = 3, বি = 4, আর = 5, কিউ = 6) মানচিত্র করে।
  2. পরবর্তী 6 বাইটস শেষ অংশে অফসেটগুলিতে অভ্যন্তরীণ পিস কোডগুলি মানচিত্র করে (কে এবং কিউ একই, বি তাদের লেজ)।
  3. সর্বশেষ 16 বাইট সমস্ত টুকরাটির চলাচলকে এনকোড করে '('+vector

কার্যাবলী:

  1. mainবোর্ড পড়ে, অভ্যন্তরীণ কোডগুলিতে চিঠিগুলি রূপান্তর aকরে, সাদা পদক্ষেপগুলি অনুসন্ধান করার জন্য কল দেয়, বোর্ডটি মুদ্রণ করে।
  2. aপুনরাবৃত্তভাবে 64 স্কোয়ারের উপরে লুপ হয়। ডান রঙের প্রতিটি অংশের জন্য (প্যারামিটার c), এটি টুকরা এবং কলগুলির জন্য আন্দোলনের নিয়মটি সন্ধান করে d
  3. dপুনরাবৃত্তভাবে এনকোডেড চলাচলের নিয়মের উপরে আড়াল হয়, যা ভেক্টরগুলির একটি তালিকা, eপ্রত্যেককে ডাকছে । এটি eআসল অবস্থান, ভেক্টর এবং ব্যাপ্তি সীমা দেয় (বি এর উপরে টুকরাগুলির জন্য 7, দ্বিতীয় র‌্যাঙ্কের পদ্মাগুলির জন্য 2, অন্যথায় 1) দেয়।
  4. eএকটি ভেক্টর বরাবর সমস্ত আন্দোলন পরীক্ষা করে। যদি সরানো সম্ভব হয় (অর্থাত্ प्याরাগুলি বোর্ডের মধ্যে, অবরুদ্ধ নয়, তির্যকভাবে পদ্ম ক্যাপচার) এগিয়ে যায়, দুটি জিনিসের একটি পরীক্ষা করে। সাদা পদক্ষেপের জন্য, vচালটি বৈধ করার জন্য রান করে। কৃষ্ণচূড়ার জন্য, সাদা রাজা ধরা পড়েছে কিনা তা পরীক্ষা করে দেখুন। মান সত্য হলে, সরানোটি বোর্ডে প্লে হবে।
  5. vএকটি সাদা পদক্ষেপ বৈধ। এটি বোর্ডটি একপাশে অনুলিপি করে, পরীক্ষার জন্য সরানোটি কার্যকর করে এবং aকালো চালগুলি সন্ধানের জন্য আবার কল করে।

শেষ অবধি, সম্ভাব্য পদক্ষেপগুলির সঠিক সংকুচিত এনকোডিং সহ একটি সমাধান ! এবং এটি খুব দ্রুত। আপনি কি মনে করেন না যে আপনি একটি ইউনিকোড র‌্যাপার যুক্ত করতে পারেন এবং এখনও আমার কোডের চেয়ে কম?
ঘড়ির

@ বাম দিক থেকে, আমি অনুমান করতে পারি মূল সমস্যাটি হ'ল আমি লিনাক্স কমান্ড লাইনে কাজ করছি, যেখানে আপনি ইউনিকোড দেখতে পাচ্ছেন না, তাই ডিবাগিংটি বিরক্তিকর হবে। আমার আরও একটি সংস্করণ রয়েছে যা প্রায় 40 টি বাইট সংরক্ষণ করে (আমি শীঘ্রই আপডেট করব), তাই আমার সাথে প্রচুর চর রয়েছে rs
ugoren

@ ইউগোরেন: অবশ্যই কোনও অর্ধপথের আধুনিক লিনাক্স বিতরণটি বাক্সের বাইরে ইউটিএফ -8 সমর্থন করে?
হান

@ এখন, আমি উইন্ডোজে কাজ করছি এবং এসএসএইচ দ্বারা লিনাক্সের সাথে সংযুক্ত হয়েছি এবং ইউনিকোড কাজ করে না। আমি একটি ফাইল লিখতে এবং উইন্ডোজ খুলতে পারেন, কিন্তু এটি আর আকর্ষণীয় নয়।
ugoren

এটি কি জিসিসির সাথে সংকলন করবে? আমি জিএনজি উইন্ডোজকে মিনজিডব্লু সহ ব্যবহার করছি এবং এটি একগুচ্ছ ত্রুটি ও সতর্কবার্তা সংকলন করবে তবে এটি নির্মাণ / রান করবে না: সি: \ ব্যবহারকারীগণ xx এক্সএক্সএক্স \ অ্যাপডাটা \ স্থানীয় \ টেম্প \ সিসিপিবিজি9zy.o: কোডগলফেসসিএসসি :(। পাঠ্য + 0x2d8): `বিসিপি 'কালেক্ট 2'র অপরিজ্ঞাত রেফারেন্সটি এলডি 1 প্রস্থান স্থিতি ফিরে এসেছে
আরপিডি

5

পাইথন 2.6, 886 - 1425 টি অক্ষর

আমার প্রাথমিক সংস্করণ (সংশোধনগুলিতে) ৮৮6 টি অক্ষর এসেছে তবে অনুমানটি পুরোপুরি সন্তুষ্ট করেনি (এটি চেকমেট এড়ানোর জন্য চেক করেনি; এটি কালো টুকরোগুলির সম্ভাব্য পদক্ষেপগুলি বিবেচনাও করে না)।

এখন এটি করে (এবং আমি মূলটিতে বেশ কয়েকটি বাগ স্থির করেছি)। হায়রে এটি অক্ষরের ব্যয় নিয়ে আসে: আপাতত 1425, তবে উন্নতির জন্য এখনও খুব কম জায়গা থাকা উচিত। এই সংস্করণটি পূর্বের সংস্করণগুলি পরিচালনা করার ক্ষেত্রে অনেক বেশি শক্ত হওয়া উচিত।

#-*-coding:utf8-*-
import sys;e=enumerate
B,W=["♟","♜","♞","♝","♛","♚"],["♙","♖","♘","♗","♕","♔"]
R={"♙":[11,42],"♖":[28],"♘":[31],"♗":[8],"♕":[8,28],"♔":[1,21]}
def F(w):return sum([[(i,j)for j,p in e(o)if p==w]for i,o in e(Z)],[])
def G(x,y):
 P=Z[x][y];D=P in W;L=[]
 for o in R[P]if D else R[unichr(ord(P.decode('utf8'))-6).encode('utf8')]:
  r,k="%02d"%o        
  for g,h in[[(-1,-1),(1,1),(-1,1),(1,-1)],[[(1,-1),(1,1)],[(-1,-1),(-1,1)]][D],[(-1,0),(1,0),(0,-1),(0,1)],[(-2,-1),(-2,1),(-1,-2),(-1,2),(1,-2),(1,2),(2,-1),(2,1)],[(-1,0)]][int(r)]:
   J=0
   for i in range(int(k)):
    T=x+(i+1)*g;U=y+(i+1)*h
    if T<0 or T>7 or U<0 or U>7:break
    M=Z[T][U]
    if not J:L.append((T,U,P,M))
    else:break
    if r in"02"and(M in W+B):
     J=1
     if not((D and M in B)or(not D and M in W)):L.pop()
    elif(r=="1"and not((D and M in B)or(not D and M in W)))or(r=="4"and((i==1 and x!=6)or M!="…")):L.pop()
 return L  
Z=[[y for y in l[5:].split()]for l in sys.stdin.readlines()[:-2]]
Q=[]
for p in R:
 for i,j in F(p):
  for M,L,c,_ in G(i,j):
   O=Z[M][L];Z[i][j]="…";Z[M][L]=c;E=[];map(E.extend,map(F,B))
   if not any(any(1 for _,_,_,I in G(v,h)if I==["♔","♚"][c in B])for v,h in E):Q.append((i,j,M,L,c))
   Z[i][j]=c;Z[M][L]=O
(x,y,X,Y,p)=Q[0];Z[x][y]="…";Z[X][Y]=p
for i,h in e(Z):print`8-i`+' ║'+' '.join(h)
print"——╚"+"═"*16+"\n—— a b c d e f g h"

ইনপুট এবং আউটপুট উদাহরণ:

# ইনপুট

8 ║♜ ♞ ♝… ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟… ♟ ♟ ♟
6 ║……………………
5 ║………… ♟………
4 ║……………… ♙ ♛
3 ║…………… ♙……
2 ║♙ ♙ ♙ ♙ ♙… ♙…
1 ║♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
--╚═══════════════
C abcdefgh
# আউটপুট

8 ║♜ ♞ ♝… ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟… ♟ ♟ ♟
6 ║……………………
5 ║………… ♟………
4 ║……………… ♙ ♛
3 ║…………… ♙ ♙…
2 ║♙ ♙ ♙ ♙ ♙………
1 ║♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
--╚════════════════
C abcdefgh

এটি 886 বাইট, তবে কেবল 854 অক্ষর। (আমার প্রোগ্রামটিতে 1 কেবি এরও বেশি রয়েছে, অনেকগুলি অ-এসকিআইআই অপারেটরকে ধন্যবাদ!) - আপনি কি এখনও রাজাকে নেওয়ার জন্য চেক যোগ করতে যাচ্ছেন?
ঘড়ির

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