Set puzzle: Difference between revisions
Content added Content deleted
(Added C#) |
(Added Prolog) |
||
Line 3,063: | Line 3,063: | ||
6: purple squiggle three solid |
6: purple squiggle three solid |
||
8: red diamond two open |
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> |
</pre> |
||