2016-11-17 60 views
0

我在Python中创建了一个Rubiks多维数据集,并且遇到检查2个多维数据集是否相同的问题。我将立方体的侧面表示为北,东,南,西,前,后。我最初只是有我的功能检查cube1.north = cube2.north,cube1.south = cube2.south等,如果所有的地方都是真的,那么他们是一样的。这留下了cube1.north = cube2.south,cube1.south = cube2.north等等的多维数据集以及许多其他情况下它们相等但特定的面不完全匹配的多维数据集。有没有人有一个想法,如何检查是否有任何2立方体相等,没有吨的if语句为每一种可能性?Python Rubiks Cube如何判断2个状态是否相等

+1

很难说不知道您用来表示多维数据集状态的数据结构。例如,如果您正在使用每张脸的清单列表,则可以比较每张脸的清单。 – kindall

+2

只需考虑将任何多维数据集转换为1d列表的一些规范化(预定义排序)展平操作。然后做一个基本的列表比较。 – sascha

+0

@sascha你的意思是说,1.用红色/白色/蓝色找到角落2.应用展平操作3.建造墙壁? –

回答

1

为什么不尝试根据它们在中心的颜色来索引立方体的脸部?然后,您可以检查一个立方体上的白色中心人脸是否与另一个立方体上的白色人脸人脸相匹配。

换句话说,北脸上总会有在中央的白色正方形,南面脸上总会有在中央的黄色方形等只有保持中心的方向操作是不允许的。

-1

这取决于你如何构建你的数据,但一般的解决方案很有趣。
想一想:方向并不存在,它们是主观的。上,下,左,右......这些都是关系,而不是职位。

现在让我们试着看看它是如何适用于您的问题。
直觉我会去制作Cube对象,包含Side对象,其中每一方都有它与其他各方自己的关系列表,因此它有它的的立方体看起来像自己的观点。
这样,Cube并不真正知道或关心您正在查看的哪一面。

为简单起见,我只想用字符串来表示每一方的关系,但理想情况下,他们应该是对方实例的引用:

侧1:

  • FACE =“白色”
  • 左= '红'
  • 右= '绿色'
  • 底部= '蓝'
  • 顶= '橙色'
  • 后面= '黄色'

侧2:

  • 面= '红色'
  • 左= '黄色'
  • 权利= '白色'
  • 底部= '蓝色'
  • 顶= '橙色'
  • 背后= '绿色'

等..

立方:

  • 双方= [边的列表,顺序无关紧要]

每一面都代表一个整体的立方体,但与它自己的观点。
现在,当您获得2个立方体对象时,您所要做的就是比较具有相同“面部”属性的面。

编辑:这是一种抽象的思维方式,您可以应用于许多类似的问题。你不需要用物体做这件事,只是更容易把握你的想法。