Prolog 解 Solitaire (一維)

想要玩 Prolog 解題。先想到 Ada Lovelace 當年在思考的題目 “Solitaire" (一種單人盤面遊戲。遊戲盤面,可參考 http://www.woodentoys-uk.co.uk/wooden-games5.html )

先思考一維的題目:


jump([1,1,0], 1, [0,0,1]).
jump([0,1,1], 3, [1,0,0]).
jump(List, _, _) :- length(List, 3), !, fail.
jump([A,B,C|T], J, [A1,B1,C1|T]) :- jump([A,B,C], J, [A1,B1,C1]).
jump([A|Rest], J, [A|State]) :- jump(Rest, J1, State), J is J1+1.

solved(List) :- select(1, List, Rest), not(member(1, Rest)).

solve_1D(List, []) :- solved(List), !.
solve_1D(List, [J|Jumps]) :- jump(List, J, State), solve_1D(State, Jumps).

這樣,?- solve_1D([1,1,0,1,0], Js).會有答案,而?- solved_1D([1,1,1,1,0,1,1,1,1], Js).找不到答案。

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Prolog。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s