# 童话棋“游刃有余”的运动模式

14

``````.o.o.
o...o
..N..
o...o
.o.o.
``````

``````..o.o..
.......
o.....o
...L...
o.....o
.......
..o.o..
``````

``````o...o
.....
..A..
.....
o...o
``````

...甚至（0,1）Wazir。

``````.o.
oWo
.o.
``````

## 挑战

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

## 其他测试用例

``````1,1,F

o.o
.F.
o.o

5,7,Q

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

0,0,J

J
``````

Rɪᴋᴇʀ

1
@RikerW我的选择并不完全是任意的，那是它的“标准化”字母。
PhiNotPi

1

Rɪᴋᴇʀ

1

edc65 '16

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

# Pyth，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

## 的JavaScript（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`文字换行符在哪里。通过生成右下象限并沿两个轴镜像将其工作。

（我是通过一个重复的问题到达这里的，该问题允许将数组结果缩短19个字节，但不能保证不减少顺序，这浪费了8个字节。）

edc65

@ edc65我已经尝试调整文字换行符（这样做时我总是写“文字换行符在哪里`\n`”），但感谢其他技巧。

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

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