Peri satranç “leaper” hareket kalıpları


14

Bir leaper tarafından hareket peri satranç taşını bir kategoridir "atlama". Normal bir şövalye (1,2) -yapıcıdır, yani her hareket dikey bir yönde 1 kare ve dik yönde 2 kare hareket etmeyi içerir.

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

Çok farklı sıçanlar var. (1,3) leaper'a Uzun Şövalye veya Deve denir. Hareket şekli şöyle görünür:

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

Ayrıca (2,2) Alfil var ...

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

... ve hatta (0,1) Vezir.

.o.
oWo
.o.

Meydan okuma

Giriş olarak bir çift sayı verildiğinde, karşılık gelen hareket diyagramını çıktılayın. Girdi STDIN / komut satırı veya bağımsız değişken olarak sağlanan bir program veya işlev yazabilir ve çıktı STDOUT veya dönüş değeri tarafından sağlanır. Bu kod golfü .

Giriş

Girdi, iki tamsayının virgülle ayrılmış bir listesi ve bir büyük harf olacaktır. İki tamsayı aralık 0-7(dahil) ve azalan düzende olacaktır. Giriş ve çıkış için isteğe bağlı yeni satır sonu.

Yukarıdaki dört örnek için girdiler şunlardır:

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

Çıktı

Çıktı kare şeklinde çok satırlı bir dize olacaktır. Büyük harf, parçanın geçerli yerini temsil etmek için ortaya yerleştirilecektir. Hareket konumları 4 veya 8 küçük harfle temsil edilecektir o. Meydandaki diğer tüm alanlar noktalarla doldurulacaktır.

Hareket düzeni ise 0,0, yalnızca büyük harf verin.

Bir ipucu olarak, ikinci tamsayı (daha büyük olan) N değerine sahipse, kare her zaman 2N + 1 yan uzunluğuna sahip olacaktır. oHep meydanın çevre olacak.

Ek Test Durumları

1,1,F

o.o
.F.
o.o

5,7,Q

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


0,0,J

J

Deve testcase harfi neden 'L'? Ben önemli değil biliyorum ama bir 'C' değiştirmek için yararlı olabilir.
Rɪᴋᴇʀ

1
@RikerW Seçimim tamamen keyfi değildi, bu onun "standart" mektubu.
PhiNotPi

1
Tamam. Mantıklı.
Rɪᴋᴇʀ

1
Bir işlev için 3 bağımsız değişken uygun mu yoksa tek bir dize bağımsız değişkeninin virgülle ayrılmasını mı istiyorsunuz?
edc65

Yanıtlar:


2

Yakut, 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}}

Test programında yönlendirilmemiş

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

Pyth, 40 bayt

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

Pyth öğreniyorum! Deneyin .

açıklama

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

JavaScript (ES6), 163 161 145 bayt

(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)

\nDeğişmez yeni satır karakteri nerede . Sağ alt kadranı oluşturarak ve her iki eksen boyunca aynalayarak çalışır.

Düzenleme: @ edc65 sayesinde 2 bayt kaydedildi.

(Burada 19 bayt daha kısa olurdu, ancak 8 bayt boşa azalan sipariş garanti vermedi bir dizi sonucu izin yinelenen bir soru ile var.)


Parantez fill
içermeyen

@ edc65 Değişmez satırsonu için ayarlama yapmaya çalışmıştım (bunu yaptığımda her zaman "Sıradan \nyeni satır karakteri nerede" yazıyorum ) ama diğer ipucu için teşekkürler.
Neil

0

JavaScript (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`
`

Daha az golf

(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')
}

Ölçek

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.