2016-11-17 55 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個立方體對象時,您所要做的就是比較具有相同「面部」屬性的面。

編輯:這是一種抽象的思維方式,您可以應用於許多類似的問題。你不需要用物體做這件事,只是更容易把握你的想法。

相關問題