Joker
card, which can be used in
place of any other card. As a result, we cannot use a notion of binary
equivalence of two cards, which would not be transitive. Instead, we define
an asymmetric relation agrees_with
: for instance, the card Joker
agrees with King
, but not the converse. For convenience, we also
define the relation disagree_with
, which is the negation of the
symmetric relation agrees_with
.

find_similar
that searches
sets of k
similar cards among a hand
. This function is defined
by induction. If the hand
is empty, there is no solution. If the
first element of the hand
is a Joker
, we search for sets of
k
1
similar elements in the rest of the hand
and add the
Joker
in front of each set. Otherwise, the first element of
hand
is a regular card h
: we first search for the set of all
elements matching the card h
in the rest of the hand; this set
constitutes a solution if its size if at least k
; then, we add all
other solutions among the rest of the hand that disagree with h
.
Otherwise, the solutions are only those that disagree with h
.

 
