首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chess960位置发生器

Chess960位置发生器
EN

Code Golf用户
提问于 2013-06-20 04:11:55
回答 3查看 1.1K关注 0票数 12

上下文

Chess960 (或费舍尔随机国际象棋)是由前世界象棋冠军博比·菲舍尔于1996年6月19日在阿根廷布宜诺斯艾利斯公开宣布的国际象棋的一个变体。它使用与标准棋盘相同的棋盘和棋子;然而,棋子在玩家主场的起始位置是随机的。

规则

  • 白色棋子被放在第二位,就像在标准国际象棋中一样。
  • 所有剩余的白件都被随机放置在一级。
  • 主教必须放在相反的彩色方格上。
  • 国王必须放在车架之间的正方形上。
  • 黑色的棋子与怀特的棋子平分秋色。

来自:http://en.wikipedia.org/wiki/Chess960

对于所有想发帖的人来说.

您必须制作一个Chess960位置生成器,它能够按照上述规则随机生成960个位置中的一个(它必须能够输出960中的任何一个,硬编码的一个位置不被接受!),并且您只需要输出白色秩一段。

示例输出:

rkrbnnbq

其中:

  • K王
  • Q皇后
  • B主教
  • N骑士
  • R型车

这将是密码高尔夫,和平局将是向上。

EN

回答 3

Code Golf用户

发布于 2013-06-20 09:29:44

J,56个字符

代码语言:javascript
复制
{.(#~'(?=.*b(..)*b).*r.*k.*r.*'&rxeq"1)'kqbbnnrr'A.~?~!8

由于算法效率低下,在我的机器上花了几秒钟。在~.之前添加'kqbbnnrr' (删除重复项)可以获得一定的速度。

说明:

  • ?~!80 ... 8!处理8!随机元素
  • 'kqbbnnrr'A.~将它们用作字符串kqbbnnrr的anagram索引。
  • (#~'...'&rxeq"1)'在引号中通过正则表达式对它们进行过滤。
  • {.的意思是“取第一个元素”
票数 4
EN

Code Golf用户

发布于 2013-06-20 15:54:19

K,69

代码语言:javascript
复制
(-8?)/[{~*(*/~~':{m=_m:x%2}@&x="b")&(&x="k")within&"r"=x};"rrbbnnkq"]
票数 4
EN

Code Golf用户

发布于 2013-06-22 20:09:01

Python,105个字符

基本上是chron的技术,除去了优雅的Ruby元素。

代码语言:javascript
复制
import re,random
a='rrbbnnkq'
while re.search('b.(..)*b|r[^k]*r',a):a=''.join(random.sample(a,8))
print a

感谢彼得泰勒缩短了正则表达式。

票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/11901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档