2013-03-25 68 views
2

在初學者課程中,我們被要求在Prolog中做一些經典的密碼。他們所有的工作,除了這一個,這只是推移和沒有找到任何解決方案,除了試圖讓我的電腦因過熱而爆炸:密碼的執行時間

FORTY + TEN + TEN = SIXTY

crypto2(F,O,R,T,Y,E,N,S,I,X) :- 
    digit(F), digit(O), digit(R), digit(T), digit(Y), digit(E), digit(N), digit(S), digit(I), digit(X), 
    F =\= O, F =\= R, F =\= T, F =\= Y, F =\= E, F =\= N, F =\= S, F =\= I, F =\= X, 
    O =\= R, O =\= T, O =\= Y, O =\= E, O =\= N, O =\= S, O =\= I, O =\= X, 
    R =\= T, R =\= Y, R =\= E, R =\= N, R =\= S, R =\= I, R =\= X, 
    T =\= Y, T =\= E, T =\= N, T =\= S, T =\= I, T =\= X, 
    Y =\= E, Y =\= N, Y =\= S, Y =\= I, Y =\= X, 
    E =\= N, E =\= S, E =\= I, E =\= X, 
    N =\= S, N =\= I, N =\= X, 
    S =\= I, S =\= X, 
    I =\= X, 
    10000 * F + 1000 * O + 100 * R + 210 * T + Y + 20 * E + 2 * N =:= 10000 * S + 1000 * I + 100 * X + 10 * T + Y. 

所有數字到數字的不平等已經寫此位蟒蛇,排除人爲錯誤:

nbs = ["F", "O", "R", "T", "Y", "E", "N", "S", "I", "X"] 
for i in range(len(nbs)): 
    s= "" 
    for j in range(i + 1, len(nbs)): 
    s += nbs[i] + " =\= " + nbs[j] + ", " 
    print s 

不寫在這裏是一系列的十個簡單的事實(數字(0),以數字(9)。)斷言0-9是數字。

有人可以發現一個明顯的錯誤,還是真的需要超過10分鐘,而簡單的六位密碼立即解決?

謝謝!

回答

2

可以固定事情有點動約束的第一個可能的「:

crypto2(F,O,R,T,Y,E,N,S,I,X) :- 
    digit(F), 
    digit(O), F =\= O, 
    digit(R), F =\= R, O =\= R, 
    digit(T), F =\= T, ... 
+0

謝謝你的提示。它現在在幾秒鐘內找到了解決方案。 – pouzzler 2013-03-25 16:54:23