परी शतरंज "लीपर" आंदोलन पैटर्न


14

एक लीपर परी शतरंज के टुकड़े की एक श्रेणी है जो "कूद" से चलता है। एक सामान्य शूरवीर (1,2) सस्ता है, जिसका अर्थ है कि प्रत्येक चाल में एक ऑर्थोगोनल दिशा में 1 वर्ग की दूरी और लंबवत दिशा में 2 वर्ग शामिल हैं।

.o.o.
o...o
..N..
o...o
.o.o.

कई अलग-अलग लीपर्स हैं। (1,3) -लॉन्ग को लॉन्ग नाइट या कैमल कहा जाता है। इसकी चाल पैटर्न इस प्रकार है:

..o.o..
.......
o.....o
...L...
o.....o
.......
..o.o..

वहाँ भी (2,2) अल्फिल है ...

o...o
.....
..A..
.....
o...o

... और यहां तक ​​कि (0,1) वज़ीर।

.o.
oWo
.o.

चुनौती

इनपुट के रूप में संख्याओं की एक जोड़ी को देखते हुए, इसी आंदोलन आरेख को आउटपुट करते हैं। आप STDIN / कमांड-लाइन के माध्यम से या एक तर्क के रूप में प्रदान किए गए इनपुट के साथ एक प्रोग्राम या फ़ंक्शन लिख सकते हैं, और आउटपुट STDOUT या रिटर्न वैल्यू द्वारा प्रदान करते हैं। यह कोड-गोल्फ है

इनपुट

इनपुट दो पूर्णांक और एक बड़े अक्षर की अल्पविराम से अलग सूची होगी। दो पूर्णांक सीमा 0-7(समावेशी) और गैर-घटते क्रम में होंगे। इनपुट और आउटपुट के लिए अनुवर्ती newline वैकल्पिक।

यहां उपरोक्त चार उदाहरणों के लिए इनपुट दिए गए हैं:

1,2,N
1,3,L
2,2,A
0,1,W

उत्पादन

आउटपुट एक चौकोर आकार का मल्टीलाइन स्ट्रिंग होगा। टुकड़े के वर्तमान स्थान का प्रतिनिधित्व करने के लिए पूंजी पत्र को केंद्र में रखा जाएगा। आंदोलन स्थानों को 4 या 8 लोअरकेस oएस द्वारा दर्शाया जाएगा । वर्ग के अन्य सभी स्थान पीरियड्स से भरे होंगे।

यदि आंदोलन पैटर्न है 0,0, तो केवल बड़े अक्षर का आउटपुट।

एक संकेत के रूप में, यदि दूसरा पूर्णांक (बड़ा वाला) का मान N है, तो वर्ग की लंबाई हमेशा 2N + 1 होगी। oरों हमेशा वर्ग की परिधि पर होगा।

अतिरिक्त टेस्टकेस

1,1,F

o.o
.F.
o.o

5,7,Q

..o.........o..
...............
o.............o
...............
...............
...............
...............
.......Q.......
...............
...............
...............
...............
o.............o
...............
..o.........o..


0,0,J

J

ऊंट के टेस्टकेस पत्र को 'L' क्यों कहा जाता है? मुझे पता है कि कोई फर्क नहीं पड़ता, लेकिन यह एक 'सी' के लिए बाहर बदलने के लिए उपयोगी हो सकता है।
R

1
@ रिकर मेरी पसंद पूरी तरह से मनमाना नहीं था, यह इसका "मानकीकृत" पत्र है।
फीनोटपी

1
ठीक है। यह समझ आता है।
18

1
किसी फ़ंक्शन के लिए, 3 तर्क ठीक हैं या क्या आप एकल स्ट्रिंग तर्क अल्पविराम को अलग करना चाहते हैं?
edc65

जवाबों:


2

रूबी, 107

->a,b,n{(-b..b).map{|i|s='..'*b+?.
i%b==0&&(i==0?s[b]=n :s[b+a]=s[b-a]=?o)
i.abs==a&&s[0]=s[-1]=?o
puts s}}

परीक्षण कार्यक्रम में अपराजित

f=->a,b,n{
  (-b..b).map{|i|                           #iterate from -i to i (lines of grit)
    s='..'*b+?.                             #make a string of 2n+1 .'s
    i%b==0&&(i==0?s[b]=n :s[b+a]=s[b-a]=?o) #if i%b=0 plot the centre character (if i=0) or the o's on the top and bottom rows
    i.abs==a&&s[0]=s[-1]=?o                 #if i.abs=a plot the o's in left and right columns
    puts s                                  #having substituted the .'s with o and centre as necessary, output the current line
  }
}

a=gets.to_i
b=gets.to_i
n=gets.chop
f[a,b,n]

1

अजगर, 40 बाइट्स

JASv<2zFZK+rH_1SHFY,LZKp?qJSY\o?sY\.ez)k

मैं अजगर सीख रहा हूँ! इसे आजमाएं

व्याख्या

J             J =
 A                (G, H) =
  S                        sorted(
   v<2z                           eval(input[:-2]))

FZK+rH_1SH    for Z in K = [H, H-1, ..., 0] + [1, 2, ..., H]:
  FY,LZK          for Y in [(Z, k) for k in K]:
    p                 print the following value without newline:
     ?qJSY\o              if J = sorted(Y): 'o'
       ?sY\.              if sum(Y) != 0:   '.'
         ez               else:             input[-1]
  )               end for
k                 print newline

1

जावास्क्रिप्ट (ईएस 6), 163 161 145 बाइट्स

(x,y,c,m=a=>`\n`+a.slice(1).reverse().join``+a.join``,a=Array(y+1).fill`.`,q=a.map(_=>[...a]))=>m(q.map(m,q[x][y]=q[y][x]='o',q[0][0]=c)).slice(2)

जहां \nशाब्दिक नई लाइन चरित्र है। नीचे दाईं ओर चतुर्भुज बनाकर और दोनों कुल्हाड़ियों के साथ यह काम करता है।

संपादित करें: @ edc65 के लिए 2 बाइट्स सहेजे गए।

(मैं एक डुप्लिकेट प्रश्न के माध्यम से यहां आया था जिसने एक सरणी परिणाम की अनुमति दी थी जो कि 19 बाइट्स कम होगी, लेकिन गैर-आदेशों की गारंटी नहीं दी, जिसने 8 बाइट बर्बाद कर दिए।)


आप किसी भी ब्रैकेट के साथ टेम्पलेट स्ट्रिंग का उपयोग करके 3 बाइट्स बचा सकते हैं fillऔर शाब्दिक नई
रेखा

@ edc65 मैं पहले से ही \nशाब्दिक नई पंक्ति के लिए समायोजित करने की कोशिश कर रहा था (मैं हमेशा लिखता हूं "मैं शाब्दिक नई पंक्ति चरित्र कहां हूं" जब मैं ऐसा करता हूं) लेकिन दूसरे टिप के लिए धन्यवाद।
नील

0

जावास्क्रिप्ट (ईएस 6) 144 150

(a,b,c,g=Array(b-~b).fill`.`)=>(g=g.map(x=>[...g])).map(x=>x.join``,[b-a,b+a].map(t=>g[t][0]=g[0][t]=g[t][2*b]=g[2*b][t]='o'),g[b][b]=c).join`
`

कम गोल्फ वाला

(a,b,c)=> {
  var g=Array(b*2+1).fill('.');
  g=g.map(x=>[...g]);
  var q=(t)=>
    g[t][0] =
    g[0][t] =
    g[t][2*b] =
    g[2*b][t] = 'o';
  q(b+a);
  q(b-a);
  g[b][b] = c;
  return g.map(x=> x.join('')).join('\n')
}

परीक्षा

f=(a,b,c,g=Array(b-~b).fill`.`)=>(g=g.map(x=>[...g])).map(x=>x.join``,[b-a,b+a].map(t=>g[t][0]=g[0][t]=g[t][2*b]=g[2*b][t]='o'),g[b][b]=c).join`
`

console.log=x=>O.textContent+=x+'\n'

t=`1,2,N
1,3,L
2,2,A
0,1,W
1,1,F
5,7,Q`.split`\n`
.forEach(t=>([x,y,z]=t.split`,`, console.log(t+'\n'+f(+x,+y,z)+'\n')))
<pre id=O></pre>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.