我在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个状态是否相等
0
A
回答
1
为什么不尝试根据它们在中心的颜色来索引立方体的脸部?然后,您可以检查一个立方体上的白色中心人脸是否与另一个立方体上的白色人脸人脸相匹配。
换句话说,北脸上总会有在中央的白色正方形,南面脸上总会有在中央的黄色方形等只有保持中心的方向操作是不允许的。
-1
这取决于你如何构建你的数据,但一般的解决方案很有趣。
想一想:方向并不存在,它们是主观的。上,下,左,右......这些都是关系,而不是职位。
现在让我们试着看看它是如何适用于您的问题。
直觉我会去制作Cube
对象,包含Side
对象,其中每一方都有它与其他各方自己的关系列表,因此它有它的的立方体看起来像自己的观点。
这样,Cube并不真正知道或关心您正在查看的哪一面。
为简单起见,我只想用字符串来表示每一方的关系,但理想情况下,他们应该是对方实例的引用:
侧1:
- FACE =“白色”
- 左= '红'
- 右= '绿色'
- 底部= '蓝'
- 顶= '橙色'
- 后面= '黄色'
侧2:
- 面= '红色'
- 左= '黄色'
- 权利= '白色'
- 底部= '蓝色'
- 顶= '橙色'
- 背后= '绿色'
等..
立方:
- 双方= [边的列表,顺序无关紧要]
每一面都代表一个整体的立方体,但与它自己的观点。
现在,当您获得2个立方体对象时,您所要做的就是比较具有相同“面部”属性的面。
编辑:这是一种抽象的思维方式,您可以应用于许多类似的问题。你不需要用物体做这件事,只是更容易把握你的想法。
相关问题
- 1. 如何判断一个区域是否属于某个形状?
- 2. 如何判断Kinesis碎片的状态?
- 3. 如何判断用户的状态?
- 4. iOS:我如何判断UISearchBar的状态?
- 5. 如何判断两个网页内容是否相似?
- 6. 如何判断Python等待Selenium?
- 7. 如何判断密码是否等于另一个密码?
- 8. 如何判断一个Type是否是静态类?
- 9. 静态解析:判断两个Javascript函数是否相同
- 10. 如何判断2个数组是否共享相同的元素
- 11. Javascript如何判断两个对象是否相同?
- 12. 如何判断两个多边形是否相交?
- 13. 如何判断两个字体在GDI中是否相同+
- 14. 如何判断某个键是否在Python中被按下?
- 15. Selenium/Phantomjs:如何判断是否导航?
- 16. 如何判断等待事件是否超时?
- 17. OpenGL,GLUT:如何判断手柄键是否处于活动状态(按下)?
- 18. HTML4和HTML5 - 如何判断是否存在没有导航的“后退”状态?
- 19. 如何判断soundmanager2是否使用html5?
- 20. 如何判断加载是否有效?
- 21. 如何判断W键是否按下
- 22. 如何判断码头是否冻结?
- 23. 如何判断UITextView是否脏?
- 24. 如何判断AUCTeX是否可用?
- 25. 如何判断UITextField是否为firstResponder
- 26. 如何判断DataRow是否脏
- 27. 如何判断对象是否为空?
- 28. 如何判断MemberInfo是否为内部
- 29. 如何判断NSUserDefaults是否已保存?
- 30. 如何判断GIF是否为动画?
很难说不知道您用来表示多维数据集状态的数据结构。例如,如果您正在使用每张脸的清单列表,则可以比较每张脸的清单。 – kindall
只需考虑将任何多维数据集转换为1d列表的一些规范化(预定义排序)展平操作。然后做一个基本的列表比较。 – sascha
@sascha你的意思是说,1.用红色/白色/蓝色找到角落2.应用展平操作3.建造墙壁? –