问题:
在国际象棋中,有一个关于重复抽奖的众所周知的规则。如果同一位置重复3次(或更多次),则打算进行此举动的玩家将引起平局。
有时候,如果最后几步只是球员的来回移动,这对于仲裁员来说是一件容易的事。有时,当零件在重复的位置之间显着移动时,它会变得不那么琐碎。
挑战中的问题是,给定坐标坐标的移动列表,如果要求的位置是通过重复绘制(已被看到3次或多次),则输出真值;如果要求的位置不是通过重复绘制,则输出假值。如下所述,或您选择的任何符号(但您必须转换测试用例)。
什么是职位?
在现实世界中,位置会受到诸如玩家是否可以装城堡或是否有传球之类的因素的影响;你应该不是在你的解决问题的办法考虑这些。在这个问题中,仅通过板上的部件的配置来确定位置。因此,出于此问题的目的,如果两个板上的每个正方形都被相同类型的相同颜色的零件占据,则两个位置被视为相同。这不一定是确切的棋子,例如,怀特的骑士可以交换正方形,并且如果所有其他棋子都符合条件,则该棋子仍将位于同一位置。
有效符号是什么样的?
尽管我将继续解释坐标符号,但是您可以自由选择所选择的符号系统进行输入。规定:
- 符号中的每一项都描述以下任何一项或全部:涉及的一件或多件;是否已交付检查,将死,再次检查,将死或僵持;是否发生了被动捕获;初始位置;最后的位置。
- 您的符号中可能没有重复的信息。
因此,只要满足这些条件,只要您在回答中指定,我就会很乐意接受您的符号系统。例如,可以是0索引行,列元组或任何对您的程序有意义的内容。
坐标符号
坐标符号是一种纯粹将移动描述为坐标系的符号。
首先将移动描述为来自该集合的初始坐标{A1-H8}
,然后再次描述为来自同一集合的目标坐标。因此,国王的甘比特看起来像(作为字符串的集合)
{"E2-E4","E7-E5","F2-F4"}
我认为这是解决此问题的最佳方法,因为它不会散布无关紧要的信息,例如是否进行过检查或工件移动的类型。如前所述,可以选择一种表示法,因此您可以使用另一种表示法,例如代数表示法,也可以改写该表示法(例如,删除破折号或作为元组列表)
规则:
- 你应该不考虑位置或移动是否有效,只有它是否会导致重复
- 您可以假设将不会进行小规模促销和典当促销。
- 您应该将字符串列表作为输入,并输出与最后一次移动是否发生了第三次(或更多次)重复相对应的真实或错误值
- 游戏始终在国际象棋的标准起始位置开始。初始位置可以计入重复。
- 如果最后一步没有重复该位置,则不会发生重复绘制
通用规则:
- 这是代码高尔夫球,因此最短答案以字节为单位。
不要让代码高尔夫球语言阻止您发布使用非代码高尔夫球语言的答案。尝试针对“任何”编程语言提出尽可能简短的答案。 - 标准规则适用于具有默认I / O规则的答案,因此允许您使用STDIN / STDOUT,具有正确参数的函数/方法以及返回类型的完整程序。你的来电。
- 默认漏洞是禁止的。
- 如果可能的话,请添加一个带有测试代码的链接(即TIO)。
- 另外,强烈建议为您的答案添加说明。
测试用例
您应该为以下内容返回真实值:
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}
和虚假的值:
{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}
C6-B8
位置之后,初始位置发生了三次。