Prolog domino game

前端 未结 2 1474
借酒劲吻你
借酒劲吻你 2021-01-07 06:55

i\'m making a game in prolog, with a given set of domino pieces, it should make a correct domino row using all the pieces in the initial set. we must use an inference system

相关标签:
2条回答
  • 2021-01-07 07:22
    domino(X) :tasselli(L), member(T,L), componibile(X,L,[T]).
    componibile(X,L,X) :length(L,N), length(X,N).
    componibile(X,L,A) :member(T,L),
                        \+(member(T,A)),
                        T = t(_,N2),
                        A = [t(N2,_)|_],
                        componibile(X,L,[T|A]).
    

    So if you have:

    tasselli([t(3,4),t(5,3),t(4,1),t(1,5)]).

    Then the result will be:

    ?domino(X).

    X = [t(4, 1), t(1, 5), t(5, 3), t(3, 4)] ;

    X = [t(3, 4), t(4, 1), t(1, 5), t(5, 3)] ;

    X = [t(1, 5), t(5, 3), t(3, 4), t(4, 1)] ;

    X = [t(5, 3), t(3, 4), t(4, 1), t(1, 5)] ;

    false.

    0 讨论(0)
  • 2021-01-07 07:38

    Consider something like this:

    % L1 is a list of domino pieces (of the form X-Y)
    % L2 is L1 in domino order
    domino_order(L1, L2) :-
        domino_order(L1, _, L2).
    
    domino_order([], _, []) :- !.
    domino_order(In, X, [X-Y | Out]) :-
        select(Piece, In, Remaining),
        swap_or_not(Piece, X-Y),
        domino_order(Remaining, Y, Out).
    
    swap_or_not(X-Y, X-Y).
    swap_or_not(X-Y, Y-X).
    

    Usage:

    ?- domino_order([5-4, 1-2, 4-3, 2-3], Out).
    Out = [5-4, 4-3, 3-2, 2-1] ;
    Out = [1-2, 2-3, 3-4, 4-5] ;
    false.
    
    0 讨论(0)
提交回复
热议问题