ASCII कला शतरंज की बिसात


12

इस चुनौती में, आप नीचे दिए गए शतरंज की बिसात को खींचना चाहते हैं, और आगे बढ़ने की अनुमति देते हैं।

1. आरेखण

प्रत्येक सफेद वर्ग में 5x9 स्थान होते हैं।

प्रत्येक काले वर्ग में 5x9 कॉलोन हैं।

बोर्ड कॉलोनियों की सीमा से घिरा हुआ है।

टुकड़े 5 वर्णों के चौड़े होते हैं और केंद्र में वर्ग की निचली पंक्ति पर बैठते हैं।

पंजे 4 वर्णों के चौड़े होते हैं। वे दाईं ओर थोड़ा दूर केंद्र में, बाईं तरफ 3 खाली वर्गों और दाईं ओर 2 खाली वर्गों के साथ बैठते हैं। वे वर्ग के नीचे एक पंक्ति ऊपर बैठते हैं।

एक वैकल्पिक अनुगामी न्यूलाइन के अपवाद के साथ, बोर्ड के क्षेत्र के बाहर कोई व्हाट्सएप नहीं होगा।

बोर्ड और शतरंज को बिल्कुल उसी तरह दिखाया जाएगा, जैसे कि:

  1. आप :अलग-अलग प्रतीक के लिए काले वर्गों और बॉर्डर में सब्सक्राइब कर सकते हैं, और आप @काले टुकड़ों में एक अलग प्रतीक के लिए स्थानापन्न कर सकते हैं (लेकिन काले वर्गों के लिए उपयोग नहीं किया गया।)

  2. यदि आप चाहें तो आप एक वर्ण को बाईं ओर ले जा सकते हैं।

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:         :::::::::         :::www:::   _+_   :::::::::         ::::::::::
:  |_|_|  :: _,,:::   (/)   :::)@(:::   )@(   :::(/):::   _,,   ::|_|_|:::
:   |@|   ::"- \~::   |@|   :::|@|:::   |@|   :::|@|:::  "- \~  :::|@|::::
:   |@|   :::|@|:::   |@|   :::|@|:::   |@|   :::|@|:::   |@|   :::|@|::::
:  /@@@\  ::/@@@\::  /@@@\  ::/@@@\::  /@@@\  ::/@@@\::  /@@@\  ::/@@@\:::
::::::::::         :::::::::         :::::::::         :::::::::         :
:::::():::    ()   ::::():::    ()   ::::():::    ()   ::::():::    ()   :
:::::)(:::    )(   ::::)(:::    )(   ::::)(:::    )(   ::::)(:::    )(   :
::::/@@\::   /@@\  :::/@@\::   /@@\  :::/@@\::   /@@\  :::/@@\::   /@@\  :
::::::::::         :::::::::         :::::::::         :::::::::         :
:         :::::::::         :::::::::         :::::::::         ::::::::::
:         :::::::::         :::::::::         :::::::::         ::::::::::
:         :::::::::         :::::::::         :::::::::         ::::::::::
:         :::::::::         :::::::::         :::::::::         ::::::::::
:         :::::::::         :::::::::         :::::::::         ::::::::::
::::::::::         :::::::::         :::::::::         :::::::::         :
::::::::::         :::::::::         :::::::::         :::::::::         :
::::::::::         :::::::::         :::::::::         :::::::::         :
::::::::::         :::::::::         :::::::::         :::::::::         :
::::::::::         :::::::::         :::::::::         :::::::::         :
:         :::::::::         :::::::::         :::::::::         ::::::::::
:         :::::::::         :::::::::         :::::::::         ::::::::::
:         :::::::::         :::::::::         :::::::::         ::::::::::
:         :::::::::         :::::::::         :::::::::         ::::::::::
:         :::::::::         :::::::::         :::::::::         ::::::::::
::::::::::         :::::::::         :::::::::         :::::::::         :
::::::::::         :::::::::         :::::::::         :::::::::         :
::::::::::         :::::::::         :::::::::         :::::::::         :
::::::::::         :::::::::         :::::::::         :::::::::         :
::::::::::         :::::::::         :::::::::         :::::::::         :
:         :::::::::         :::::::::         :::::::::         ::::::::::
:    ()   ::::():::    ()   ::::():::    ()   ::::():::    ()   ::::()::::
:    )(   ::::)(:::    )(   ::::)(:::    )(   ::::)(:::    )(   ::::)(::::
:   /__\  :::/__\::   /__\  :::/__\::   /__\  :::/__\::   /__\  :::/__\:::
:         :::::::::         :::::::::         :::::::::         ::::::::::
::::::::::         :::::::::   www   :::_+_:::         :::::::::         :
:::|_|_|::   _,,   :::(/):::   ) (   :::) (:::   (/)   :::_,,:::  |_|_|  :
::::| |:::  "- \~  :::| |:::   | |   :::| |:::   | |   ::"- \~::   | |   :
::::| |:::   | |   :::| |:::   | |   :::| |:::   | |   :::| |:::   | |   :
:::/___\::  /___\  ::/___\::  /___\  ::/___\::  /___\  ::/___\::  /___\  :
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

2. हिलना

कॉलम को एएच को बाएं से दाएं और नीचे से ऊपर तक 1 से 8 तक लेबल किया जाता है। उपयोगकर्ता निम्नलिखित रूप में एक कदम दर्ज करने में सक्षम होगा:

<start column><start row><space><destination column><destination row>

उदाहरण के लिए B1 C3बिशप के मोहरे के सामने वर्ग को नाइट को स्थानांतरित करें (यह मानते हुए कि खेल अभी शुरू हुआ है)।

वैकल्पिक रूप से ICCF प्रणाली का उपयोग किया जा सकता है, जिसमें स्तंभों को A से H के बजाय 1 से 8 तक लेबल किया जाता है 21 33। इसलिए ऊपर उल्लेखित नाइट चाल बन जाती है ।

निम्नलिखित छवि ( स्रोत ) दोनों प्रणालियों को स्पष्ट करती है:

यहाँ छवि विवरण दर्ज करें

इस कदम को निष्पादित किया जाएगा और नए बोर्ड को प्रदर्शित किया जाएगा। किसी भी परिणामी कैप्चरिंग चलती शतरंज के साथ बोर्ड से गंतव्य वर्ग पर शतरंज हटाने वाले के साथ होगी।

कानूनी शतरंज की चाल की जाँच करने की कोई आवश्यकता नहीं है, क्योंकि यह अन्य चुनौतियों में शामिल किया गया है: सबसे छोटा शतरंज कार्यक्रम और सबसे छोटा शतरंज मध्यस्थ यदि उपयोगकर्ता खाली वर्ग से जाने की कोशिश करता है, तो आपके प्रोग्राम या फ़ंक्शन को इस कदम को अनदेखा करना चाहिए। यदि उपयोगकर्ता एक दोस्ताना टुकड़े को पकड़ने की कोशिश करता है, तो आप या तो इस कदम को अनदेखा कर सकते हैं या स्थिर टुकड़े को पकड़ने की अनुमति दे सकते हैं।

En passant या castling का समर्थन करने की कोई आवश्यकता नहीं है।

आप मान सकते हैं कि इनपुट अच्छी तरह से बनेगा, यानी हमेशा ऊपर वर्णित प्रारूप में। पत्र हमेशा एक ही मामले में होंगे, आप तय कर सकते हैं कि मामला क्या है।

3. स्कोरिंग और बोनस

यह कोड गोल्फ है। सबसे छोटा कोड जीतता है।

-10% बोनस अगर आपका कार्यक्रम या समारोह पदोन्नति के लिए अनुमति देता है। उपयोगकर्ता एक तीसरा इनपुट दर्ज करता है, इस बार निम्न अक्षरों में से एक: क्यूबीआर एन। यह केवल तभी अनुमति दी जानी चाहिए यदि चाल अंतिम पंक्ति पर एक मोहरे के साथ समाप्त होती है। नामित टुकड़े के लिए मोहरे का आदान-प्रदान किया जाता है। QBRN।

-10% बोनस यदि आपका कार्यक्रम या फ़ंक्शन चाल के उत्क्रमण के लिए एक विशेष "पूर्ववत" कदम को लागू करता है (यदि आवश्यक हो तो खेल की शुरुआत के रूप में वापस।) जाहिर है कि शौकिया खिलाड़ियों के लिए अवैध चालें करना संभव है, और वे चाहें तो कर सकते हैं। उन्हें पूर्ववत करने के लिए। आप इस "पूर्ववत" चाल के लिए उपयोगकर्ता द्वारा दिए गए इनपुट को परिभाषित कर सकते हैं (यह हमेशा ऐसा ही होना चाहिए।) यदि उपयोगकर्ता गेम की शुरुआत से परे पूर्ववत करने का प्रयास करता है तो व्यवहार अपरिभाषित है।

बोनस राशि, यानी यदि आप दोनों बोनस के लिए जाते हैं तो आपको -20% मिलता है।


सबसे पहले आप कहते हैं "एक चाल दर्ज करें", और मेरे लिए इसका मतलब है "बस 1 चाल"। तब "पूर्व की ओर जहाँ तक" पूर्ववत करने के लिए बोनस है: तो यह चालों का एक पूरा
सीरी है

@ edc65 यह चालों की एक पूरी श्रृंखला है। पहली पंक्ति देखें "चाल के लिए अनुमति दें।" एक चीज जो मैंने निर्दिष्ट नहीं की थी वह लूप के लिए निकास की स्थिति है। जब राजाओं में से किसी एक को पकड़ लिया जाता है, तो इसे रोकने का विचार हो सकता है, लेकिन मौजूदा उत्तर में एक अनंत लूप है, जो लिखित रूप में कल्पना के तहत स्वीकार्य है, इसलिए मैं इसे छोड़ दूँगा।
लेवल रिवर सेंट

काले वर्गों पर दो शूरवीरों पर प्रारूपण मेल नहीं खाता है। क्या सही है?
JWT

@JWT वाह, पहले किसी ने नहीं देखा! इस स्तर पर मुझे दोनों को स्वीकार करना होगा। मैं देख रहा हूं कि आपने अपने उत्तर को थोड़ा और बढ़ा दिया है। इससे पहले कि मैं आपके उत्तर का परीक्षण करूं और स्वीकृति बदलूं, क्या आप समाप्त कर चुके हैं?
लेवल रिवर सेंट

@ steveverril मैं समाप्त कर रहा हूँ, हाँ।
JWT

जवाबों:


4

सप्तक, 776 688 बाइट्स

688:

  • मुख्य लूप में कार्य किए गए (दोनों का उपयोग केवल एक बार किया गया था),
  • {'foo','bar'}{i}थोड़ी देर के स्थान पर सेल संकेतन का उपयोग किया['foo';'bar'](i,:)

फिर भी कोई भी बोनस लागू नहीं हुआ।


ICCF प्रणाली का उपयोग करता है।

चाल विवरण में कोई अग्रणी स्थान नहीं हो सकता है और स्रोत और गंतव्य क्षेत्र को एक ही व्हाट्सएप द्वारा अलग किया जाना चाहिए, इसलिए 42 44यह सही है, जबकि 42 44और 42 44नहीं है।

R=@repmat;s=[t='BFJbRJFB';R(('@    A')',1,8);t+1]';while 1q=' ';c=R(':',42,74);m=R([m=R(q,5,9) l=m+26;l m],4,4);c(2:41,2:73)=m;for i=1:8 for j=1:8 f=s(i,j);z=@(c)bitand(+f,c);if z(64)b=z(1)+1;W={') (',')@('}{b};U=43-5*j;Z=9*i-2;T=Z-2:Z;Q=Z-3:Z+1;if z(2)c(U+3,Q)={'/___\','/@@@\'}{b};a=c(U+2,T)={'| |','|@|'}{b};if z(4)c(U+1,Q)='"- \~';c(U,Z-3:Z)=' _,,';else c(U+1,T)=a;if z(8)c(U,T)='(/)';elseif z(16)||z(32)c(U,T)=W;c(U-1,T)={'_+_','www'}{1+z(32)/32};else c(U,Q)='|_|_|';end
end
else c(U+2,Z-2:Z+1)={'/__\','/@@\'}{b};c(U:U+1,Z-1:Z)=['()';')('];end;end;end;end;c
m=input(q,'s')-'0';x=m(1);y=m(2);X=m(4);Y=m(5);if s(x,y)~=q&&(s(X,Y)==q||mod(s(x,y)-s(X,Y),2))s(X,Y)=s(x,y);s(x,y)=q;end
end

कुछ असम्बद्ध संस्करण:

# draw an empty chessboard
function n=cb
R=@repmat;
n=R(':',42,74);
m=R([m=R(' ',5,9) m+26;m+26 m],4,4);
n(2:41,2:73)=m;
end

# function n=put(n,f,c,r) :
#
# put a chessman f on column c and row r of chessboard n,
# returning new chessboard
# chessman is described by single character defined following way
# (please excuse naming bits by value rather than position):
# bit valued  127 -     unused
# bit valued  64  -     0 = field empty, 64 = field occupied.
# bits valued 32,16,8 - 0 = rook, 8 = bishop, 16 = king, 32 = queen
# bit valued  4 -       0 = not knight 4 = knight (only checked if "other piece" bit is set)
# bit valued  2 -       0 = pawn       2 = other piece
# bit valued  1 -       0 = white      1 = black

# this gives the following chars:

# pawns   - 64      (+1)  => @ , A
# knights - 64+4+2  (+1)  => F , G
# rooks   - 64+2    (+1)  => B , C
# bishops - 64+8+2  (+1)  => J , K
# kings   - 64+16+2 (+1)  => R , S
# queens  - 64+32+2 (+1) =>  b , a
# empty space - any character with bit valued 64 unset (space char does)

function n=put(n,f,c,r)
z=@(n)bitand(f-0,n);
if z(64)
    b=z(1);
    W=') ()@('(1+3*b:3+3*b);
    R=5*r;C=9*c;
    if z(2)
            n(46-R,C-5:C-1)='/___\/@@@\'(1+5*b:5+5*b);
            a=n(45-R,C-4:C-2)='| ||@|'(1+3*b:3+3*b);
            if z(4) # knight
                    n(44-R,C-5:C-1)='"- \~';
                    n(43-R,C-5:C-2)=' _,,';
            else
                    n(44-R,C-4:C-2)=a;
                    if z(8) # bishop
                            n(43-R,C-4:C-2)='(/)';
                    elseif z(16) # king
                            n(43-R,C-4:C-2)=W;
                            n(42-R,C-4:C-2)='_+_';
                    elseif z(32) # queen
                            n(43-R,C-4:C-2)=W;
                            n(42-R,C-4:C-2)='www';
                    else  # rook
                            n(43-R,C-5:C-1)='|_|_|';
                    end
            end
    else
            n(45-R,C-4:C-1)='/  \/@@\'(1+4*b:4+4*b);
            n(43-R:44-R,C-3:C-2)=['()';')('];
    end
end
end

# here we can easily define the chessboard.
s=['BFJbRJFB';repmat(('@    A')',1,8);'CGKcSKGC']';
c=cb;for i=1:8 for j=1:8 c=put(c,s(i,j),i,j);end;end
c

# We scan five characters. They must be positions in ICCF without leading spaces separated by single space.
while m=input('','s')-'0'
x=m(1)
y=m(2)
X=m(4)
Y=m(5)
# if the move is not allowed (capture piece of the same color or the start field is blank,
# do nothing
if s(x,y)==' ' || (s(X,Y) ~=' ' && mod(s(x,y)-s(X,Y),2)==0) continue; end;
# make the move
s(X,Y)=s(x,y);
s(x,y)=' ';
# redraw the board
c=cb;for i=1:8 for j=1:8 c=put(c,s(i,j),i,j);
end end
c
end

मैंने इसे ideone.com पर चलाया और बोर्ड को प्रदर्शित किया, लेकिन इसे किसी भी इनपुट को स्वीकार करने के लिए नहीं मिला। यह Tutorialspoint.com/codingground.htm पर बहुत अच्छा काम करता है (आपके पास राजा और रानी को उलट देने के अलावा - कोई भी अनुभवी शतरंज खिलाड़ी आपको बताएगा कि इससे फर्क पड़ता है।) मैं आपको एक मित्र को पकड़ने की अनुमति नहीं देने के लिए एक अतिरिक्त +1 दूँगा। टुकड़ा, और सभ्य स्पष्टीकरण के लिए एक और, अगर मैं कर सकता था।
लेवल रिवर सेंट

@steveverrill वास्तव में, राजा और रानी पदों को उलट दिया गया था, इसके लिए इशारा करने के लिए धन्यवाद। यह अब तय हो गया है।
pawel.boczarski

5

माणिक, 715 696 693 683 बाइट्स

यह एक काफी गन्दा समाधान है लेकिन मेरे पास इस समय इसे और साफ़ करने का धैर्य नहीं है।

न ही बोनस किया।

ICCF प्रणाली का उपयोग करता है।

a,b,c=->f,x,y,p{p.map{|ln|ln.gsub(/\d/){|z|f*(z.to_i)}.tr('AB',x+y)}},Array.new(64){|i|((i%56<8?[4,2,3,5,6,3,2,4][i%56]:(i-8)%40<8?1:0)<<2)+(i<16?2:0)},':'*74
loop{puts c
b.each_slice(8).with_index{|r,y|d,*e=r.map.with_index{|v,x|a[*([[' '],[':']][(x+y)%2]+[[' ','_'],['@','@']][v&2==2?1:0]+[('9@9@9@9@9;9@4()3@4)(3@3/BB\2@9;9@3_,,3@2"- \~2@3|A|3@2/BBB\2;9@3(/)3@3|A|3@3|A|3@2/BBB\2;9@2|_|_|2@3|A|3@3|A|3@2/BBB\2;3www3@3)A(3@3|A|3@3|A|3@2/BBB\2;3_+_3@3)A(3@3|A|3@3|A|3@2/BBB\2'.split(';').map{|s|s.split '@'})[v>>2]])]}
d.zip(*e).each{|r|puts ":#{r.join}:"}}
puts c
gets.scan(/(.)(.) (.)(.)/){|f,g,h,i|j,k=63+(f.to_i)-(g.to_i)*8,63+(h.to_i)-(i.to_i)*8
b[k],b[j]=b[j]>0?b[j]: b[k],0}}

बहुत बढ़िया, पूरी तरह से काम करने लगता है!
लेवल रिवर सेंट

@LevelRiverSt लगता है कि यह उत्तर वर्तमान में स्वीकृत एक से कम है।
निकोलग्राफर

3

पायथन, 1136 890 753 बाइट्स

आंशिक उत्तर के लिए क्षमा याचना लेकिन मैं एक नौसिखिया हूं और मुझे वास्तव में इस चुनौती का आनंद मिला। मुझे पता है कि यह वास्तव में क्रिया है, लेकिन यहाँ मेरा मोटा मसौदा है:

y=':'*9
z=' '*9
b='::/___\::'
c=':::|@|:::'
d=':::)@(:::'

ps = {'r': [y,'::|*|*|::', c, c,b],'n': [y,':::,,::::', '::"- \~::', c,b],'b': [y,':::(/):::',c,c,b],'k': [':::www:::',d,c,c,b],'q': [':::*+*:::',d,c,c,b],'p': [y, '::::():::','::::)(:::',':::/__\::',y]}

def cell(p,c):
  if p == '!':
    return ([z]*5,[y]*5)[c]
  s = []
  for l in ps[p.lower()]:
    l = (l.replace('@', ' '), l.replace('_', '@'))[p.islower()]
    l = (l.replace(':', ' '), l)[c].replace('*', '_')
    s.append(l)
  return s


b = {8:'rnbkqbnr',7:'p'*8,2:'P'*8}
b[1] = b[8].upper()
for i in range(3,7):
  b[i] = '!'*8

o=[y*8]
c=0
for r in b:
  l=['']*5
  for p in b[r]:
    cc=cell(p,c)
    for i in range(0,5):
      l[i]+=cc[i]
    c=not c
  o.extend(l)
  c=not c
o.append(o[0])
for l in o:
  print ':'+l+':'

जवाब के लिए धन्यवाद। उत्तर पर एक शीर्षक पंक्ति को भाषा और बाइट की गिनती के साथ शामिल करना हमारा रिवाज है। यह कौनसी भाषा है? यह अजगर जैसा दिखता है, लेकिन मैं इसे ideone.com पर नहीं चला सकता
लेवल रिवर सेंट

1
चारों ओर सभी रिक्त स्थान निकालें =, और यदि एक forया ifइसके अंदर एक ही लाइन है, तो यह सभी एक ही लाइन पर जा सकते हैं। पायथन में गोल्फ के लिए युक्तियों पर एक नज़र डालें ।
mbomb007
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.