Set puzzle: Difference between revisions

m
Better deck/0
(Added Erlang)
m (Better deck/0)
Line 307:
-module( set ).
 
-export( [deck/0, is_set/3, shuffle_deck/1, task/0] ).
 
-record( card, {number, symbol, shading, colour} ).
 
deck() Sorted =-> [#card{number=N, symbol=Sy, shading=Sh, colour=C} || N <- [1,2,3], Sy <- [diamond, squiggle, oval], Sh <- [solid, striped, open], C <- [red, green, purple]],.
deck() ->
Sorted = [#card{number=N, symbol=Sy, shading=Sh, colour=C} || N <- [1,2,3], Sy <- [diamond, squiggle, oval], Sh <- [solid, striped, open], C <- [red, green, purple]],
knuth_shuffle:list( Sorted ).
 
is_set( Card1, Card2, Card3 ) ->
Line 320 ⟶ 318:
andalso is_shading_correct( Card1, Card2, Card3 )
andalso is_symbol_correct( Card1, Card2, Card3 ).
 
shuffle_deck( Deck ) -> knuth_shuffle:list( SortedDeck ).
 
task() ->
Line 332:
 
common( X, Y ) ->
{Sets, Cards} = find_x_sets_in_y_cards( X, Y, deck() ),
io:fwrite( "Cards ~p~n", [Cards] ),
io:fwrite( "Gives sets:~n" ),
[io:fwrite( "~p~n", [S] ) || S <- Sets].
 
find_x_sets_in_y_cards( X, Y, Deck ) ->
{Cards, _T} = lists:split( Y, shuffle_deck(Deck) ),
Deck = deck(),
{Cards, _T} = lists:split( Y, Deck ),
find_x_sets_in_y_cards( X, Y, Cards, make_sets1(Cards, []) ).
 
find_x_sets_in_y_cards( X, _Y, _Deck, Cards, Sets ) when erlang:length(Sets) =:= X -> {Sets, Cards};
find_x_sets_in_y_cards( X, Y, Deck, _Cards, _Sets ) -> find_x_sets_in_y_cards( X, Y, Deck ).
 
is_colour_correct( Card1, Card2, Card3 ) -> is_colour_different( Card1, Card2, Card3 ) orelse is_colour_same( Card1, Card2, Card3 ).
Anonymous user