পরী দাবা "জাল" আন্দোলনের নিদর্শন


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 বা রিটার্ন মান দ্বারা সরবরাহ করে। এটি কোড-গল্ফ

ইনপুট

ইনপুট দুটি পূর্ণসংখ্যার এবং একটি বড় হাতের অক্ষরের একটি কমা দ্বারা বিযুক্ত তালিকা হবে will দুটি পূর্ণসংখ্যা ব্যাপ্তি 0-7(অন্তর্ভুক্ত) এবং অ-হ্রাস ক্রমে হবে। ইনপুট এবং আউটপুট জন্য নতুন লাইনের Traচ্ছিক অনুসরণ।

উপরের চারটি উদাহরণের ইনপুটগুলি এখানে রয়েছে:

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

উটের টেস্টকেস চিঠিটি কেন 'এল'? আমি জানি আউট কিছু যায় আসে না তবে এটি একটি 'সি' এ পরিবর্তন করতে সহায়ক হতে পারে।
আর

1
@ রিকারডাব্লু আমার পছন্দটি সম্পূর্ণ স্বেচ্ছাচারিতা ছিল না, এটি এটির "মানক" অক্ষর।
PhiNotPi

1
ঠিক আছে. এটা বোধগম্য.
আর

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

জাভাস্ক্রিপ্ট (ES6), 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আক্ষরিক নতুন লাইনের চরিত্রটি কোথায় । নীচের ডান কোয়াড্র্যান্ট তৈরি করে এবং উভয় অক্ষ বরাবর মিরর করে কাজ করে।

সম্পাদনা: @ বর্ধিত 2 বাইট ধন্যবাদ @ edc65।

(আমি এখানে একটি ডুপ্লিকেট প্রশ্নের মাধ্যমে পেয়েছি যা অ্যারের ফলাফলের অনুমতি দিয়েছে যা ১৯ বাইট কম হবে, তবে 8 বাইট নষ্ট হওয়া ননডেক্রেসিং অর্ডারের গ্যারান্টি দেয়নি।)


আপনি কোনও ব্রেকেট fillএবং একটি আক্ষরিক নতুন লাইনের সাথে টেম্পলেট স্ট্রিং ব্যবহার করে 3 বাইট সংরক্ষণ করতে পারেন
edc65

@ edc65 আমি ইতিমধ্যে \nআক্ষরিক নতুন লাইনের জন্য সামঞ্জস্য করার চেষ্টা করেছি ( যখন আমি এটি করি তখন সর্বদা " আক্ষরিক নতুন রেখার অক্ষরটি কোথায় থাকে " লিখি ) তবে অন্য টিপটির জন্য ধন্যবাদ।
নীল

0

জাভাস্ক্রিপ্ট (ES6) 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>

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