Jump to content

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>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.