1
0
mirror of https://github.com/captn3m0/modernart.git synced 2024-07-26 20:43:28 +00:00
modernart/double.mzn
Nemo da83f6eda1 Implemented Nominal Turn Counting
- This ensures that every player gets atleast T|T-1 turns per round.
- Comments out drawone stuff for simplicity for now
- Does not consider double cards either
2020-06-11 03:45:17 +05:30

34 lines
1.2 KiB
MiniZinc

% DOUBLE CARDS
% - Double cards are counted as VISIBLE
% - Double cards CANNOT breach the 6 LIMIT
% Total number of DOUBLE CARDS for each artist = 1
% FOR EVERY ROUND+ARTIST combination, only 1 player should have played a double card
% TODO: Check if this is still correct after a second round
% Whether you played a double this round
array[Rounds,Players,Artists] of var bool: double_played;
constraint forall(a in Artists) (
sum(p in Players, r in Rounds) (double_played[r,p,a]) = 1
);
% What is the extra cards you can possibly play
array[Rounds,Players,Artists] of var bool: bonus_due_to_double_cards;
constraint forall(a in Artists, r in Rounds, p in Players) (
% If this player played more than 2 cards of this artist
if visible_count_per_round_per_artist_per_player[r,p,a] >=2
% And this artist is the winning artist this round
/\ row(sorted_artists_per_round,r)[1] = a
% And you closed this round
/\ visible_count_per_round_per_artist_per_player[r,p,a] = max_visible_cards
% and they are claiming their double now
/\ double_played[r,p,a] then
bonus_due_to_double_cards[r,p,a] = true
else
bonus_due_to_double_cards[r,p,a] = false
endif
);
% array[Rounds,Players] of var int: negs_due_to_double_cards;