'''
Below the code is to solve the problem for two colors. If You modify it according to the constraint given in the puzzle and run the code, You may view the result.
You should change the colortable array, its size should be equal to pow(3,8) as there will be 3 colors. One more thing to be changed is the loop end
in 'Solve' function.
The code starts here:
'''
colortable=[[] for i in range(256)]
#The table below holds the same configuration of a cube labeled (1-2-3-4 (On top) and (5-6-7-8 (On bottom). The table's size is 24.
cubes=[[1,2,3,4,5,6,7,8],[1,3,5,7,2,4,6,8],[1,5,2,6,3,7,4,8],
[2,1,6,5,4,3,8,7],[2,4,1,3,6,8,5,7],[2,6,4,8,1,5,3,7],
[3,1,4,2,7,5,8,6],[3,4,7,8,1,2,5,6],[3,7,1,5,4,8,2,6],
[4,3,2,1,8,7,6,5],[4,2,8,6,3,1,7,5],[4,8,3,7,2,6,1,5],
[5,6,1,2,7,8,3,4],[5,1,7,3,6,2,8,4],[5,7,6,8,1,3,2,4],
[6,8,2,4,5,7,1,3],[6,5,8,7,2,1,4,3],[6,2,5,1,8,4,7,3],
[7,8,5,6,3,4,1,2],[7,3,8,4,5,1,6,2],[7,5,3,1,8,6,4,2],
[8,6,7,5,4,2,3,1],[8,7,4,3,6,5,2,1],[8,4,6,2,7,3,5,1]]
lis,count=[],0
#This is for generating all possible colors and the count of them is 256 for two colors.
def GenerateAllColors(lis):
global count
for i in range(2):
lis.append(i)
if len(lis)<8:
GenerateAllColors(lis)
else:
colortable[count][0:8]=lis[0:8]
count+=1
lis.pop()
GenerateAllColors([])
def Solve():
indexes=[]
for i in range(256):
colors=colortable[i]
for j in range(len(cubes)):
newcolor=[-1]*8
for k in range(8):
newcolor[k]=colors[cubes[j][k]-1]
#print(colors,newcolor,cubes[j])
for m in range(i+1,len(colortable)):
if colortable[m]==newcolor and m not in indexes:
indexes.append(m)
print(indexes,len(indexes))
# The result is 256-len(indexes) and this means 23.
Solve()
# The result is 256-len(indexes) and this means 23 ile ifade yanıttır örnek için. Örnek için doğrulanmıştır kod önce.Yani toplam renk sayısından, indexes dizisinin boyutu çıkarılıyor. Esas soru için ise, kodda iki yeri değiştirmek gerekiyor, ben değiştirmesine değiştirim de, o zaman bir anlamı kalmaz. Yani, cevap şöyle bulunuyor:
Toplam renksayısı-indexes adlı dizinin boyutu. Bunu neden böyle yapmışım aşağı yukarı 3 yıl önce. Yarışma devam ediyordu muhtemelen...Soruyu çözmek için, kod olsa bile, çok fazla içine girmek gerekiyor sorunun. Yoksa, bulunamaz doğru yanıt. Sorunun mantığını oturttuktan sonra, en güzel kısmı da o, kod yazmak çok kolay. O dönem, 4. olmuştum. Hiç yanlışım yoktu. Sadece, hız faktöründen dolayı puancıklar gittiydi. Aceleyle yazılmış kodlardır bu arada. :)