我在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. 如何判斷C#中GPS形狀是否相交?
- 2. 使用Python,如何判斷矩形和形狀是否重疊?
- 3. 如何判斷一個區域是否屬於某個形狀?
- 4. 如何判斷兩個網頁內容是否相似?
- 5. 如何判斷用戶的狀態?
- 6. 如何判斷Kinesis碎片的狀態?
- 7. iOS:我如何判斷UISearchBar的狀態?
- 8. 如何判斷Python等待Selenium?
- 9. 如何判斷密碼是否等於另一個密碼?
- 10. 如何判斷一個Type是否是靜態類?
- 11. 靜態解析:判斷兩個Javascript函數是否相同
- 12. 如何判斷一個Android應用程序是否處於「停止」狀態?
- 13. 如何判斷2個數組是否共享相同的元素
- 14. Javascript如何判斷兩個對象是否相同?
- 15. 如何判斷兩個字體在GDI中是否相同+
- 16. 如何判斷兩個多邊形是否相交?
- 17. 如何判斷兩個時間序列是否相似?
- 18. 如何判斷兩個主題是否相同?
- 19. Python - 如何判斷一個進程是否受I/O限制?
- 20. 如何判斷某個鍵是否在Python中被按下?
- 21. Selenium/Phantomjs:如何判斷是否導航?
- 22. C++ 11可以判斷std :: thread是否處於活動狀態?
- 23. 如何判斷「ZipArchiveEntry」是否是目錄?
- 24. Python:如何判斷我的Python是否有SSL?
- 25. 判斷Python str是否包含中文
- 26. 如何判斷tween.js是否等待在three.js中顯示紋理
- 27. 如何判斷遠程tty是否在等待輸入?
- 28. 如何判斷等待事件是否超時?
- 29. HTML4和HTML5 - 如何判斷是否存在沒有導航的「後退」狀態?
- 30. OpenGL,GLUT:如何判斷手柄鍵是否處於活動狀態(按下)?
很難說不知道您用來表示多維數據集狀態的數據結構。例如,如果您正在使用每張臉的清單列表,則可以比較每張臉的清單。 – kindall
只需考慮將任何多維數據集轉換爲1d列表的一些規範化(預定義排序)展平操作。然後做一個基本的列表比較。 – sascha
@sascha你的意思是說,1.用紅色/白色/藍色找到角落2.應用展平操作3.建造牆壁? –