Anonymous user
Set puzzle: Difference between revisions
Added Prolog
(Added C#) |
(Added Prolog) |
||
Line 3,063:
6: purple squiggle three solid
8: red diamond two open
</pre>
=={{header|Prolog}}==
<lang Prolog>do_it(N) :-
card_sets(N, Cards, Sets),
!,
format('Cards: ~n'),
maplist(print_card, Cards),
format('~nSets: ~n'),
maplist(print_set, Sets).
print_card(Card) :- format(' ~p ~p ~p ~p~n', Card).
print_set(Set) :- maplist(print_card, Set), nl.
n(9,3).
n(12,4).
card_sets(N, Cards, Sets) :-
n(N,L),
repeat,
random_deal(N, Cards),
setof(Set, is_card_set(Cards, Set), Sets),
length(Sets, L).
random_card([C,S,N,Sh]) :-
random_member(C, [red, green, purple]),
random_member(S, [oval, squiggle, diamond]),
random_member(N, [one, two, three]),
random_member(Sh, [solid, open, striped]).
random_deal(N, Cards) :-
length(Cards, N),
maplist(random_card, Cards).
is_card_set(Cards, Result) :-
select(C1, Cards, Rest),
select(C2, Rest, Rest2),
select(C3, Rest2, _),
match(C1, C2, C3),
sort([C1,C2,C3], Result).
match([],[],[]).
match([A|T1],[A|T2],[A|T3]) :-
match(T1,T2,T3).
match([A|T1],[B|T2],[C|T3]) :-
dif(A,B), dif(B,C), dif(A,C),
match(T1,T2,T3).</lang>
{{out}}
<pre>
?- do_it(9).
Cards:
purple oval one striped
purple squiggle three open
purple oval three open
green diamond three open
red oval three striped
red diamond one open
red squiggle two solid
red squiggle one open
green squiggle one striped
Sets:
green diamond three open
purple oval one striped
red squiggle two solid
green squiggle one striped
purple squiggle three open
red squiggle two solid
red diamond one open
red oval three striped
red squiggle two solid
true.
?- do_it(12).
Cards:
red diamond three solid
green diamond three solid
purple squiggle three striped
purple squiggle two open
red squiggle one open
green oval three open
green diamond three striped
red oval two solid
red diamond one solid
green oval two solid
purple squiggle one solid
red diamond one striped
Sets:
green diamond three solid
purple squiggle one solid
red oval two solid
green oval three open
purple squiggle three striped
red diamond three solid
green oval two solid
purple squiggle one solid
red diamond three solid
purple squiggle one solid
purple squiggle three striped
purple squiggle two open
true.
</pre>
|