Software requirements come in different forms. Most are written informally in plain English, others use a logical formalism.
As successful software engineers you need to be familiar with both. If you get a plain English description, it is beneficial to translate it to a logical formalism before you attempt an implementation.
Claim HappyWedding(Families,Tables,C) = Families fi with ai members each, i in [1..n] Tables tj with bj seats each, j in [1..m] 0 <= C <= sum [i in [1..n]] fi.ai Let Members be all family members: union [i in [1..n]] fi.members Let Seats be all seats: union [j in [1..n]] tj.seats Let Table be a function: Seats -> Tables, returning the table at which the seat is located Exists function Seating: Members -> Seats which assigns seats to family members such that: (1) C family members are seated; (2) Socializing Property holds: ForAll pairs (p,q) of seated family members of the same family: Table(Seating(p)) != Table(Seating(q)) i.e., no two members of the same family sit at the same table. Claim MaximumHappyWedding() = ForAll Families fi with ai members each, i in [1..n] ForAll Tables tj with bj seats each, j in [1..m] Exists C in Nat: (HappyWedding(Families,Tables,C) and (ForAll C' in Nat, C'>C: !HappyWedding(Families,Tables,C') ) )When you make claim MaximumHappyWedding() you should be equipped with an algorithm that finds the maximum seating assignment: There is no other seating which seats more members.
Provide a specific set of families [a1,a2,a3, ... ,an] and tables [b1,b2,b3, ... ,bm] and provide your maximum C. For example: claim HappyWedding([3,4,5,6],[3,4,5,6],12).
During the debate, Seating-objects are exchanged. We use the following notation:
[ [f4.1,t4.1] ,// member 1 of family f4 is seated at seat 1 of table t4 ...
[ [f4.1,t4.1] ,// member 1 of family f4 is seated at seat 1 of table t4 [f4.2,t3.1], [f4.3,t2.1], [f4.4,t1.1] ,// two of f4 not seated [f3.1,t4.2], [f3.2,t3.2], [f3.3,t2.2], [f3.4,t1.2] ,// one of f3 not seated [f2.1,t4.3], [f2.2,t3.3], [f2.3,t2.3], [f2.4,t1.3] ,// f2 completely seated, t1 is full [f1.1,t4.4], [f1.2,t3.4], [f1.3,t2.4]// f1 completely seated, t2 full ]Bob has won as Falsifier. Alice needs to go back and improve here algorithm. Both Alice and Bob keep their algorithm secret.
Turn in a link to your Piazza group and the following statistics: For each player: number of losses where player was not forced. Go to the groups tab on the Piazza course page and sign up for a group if you have not done so yet. It is recommended that one Piazza note is edited to record one entire debate. Suggested format:
Computational Problem: Player 1: Chosen Side: Player 2: Chosen Side: Admin: (can also be played by both players jointly) Who is forced: (none or one of the players) Move 1: Move 2: Move 3: ... winner:
It is useful to know R because R might be a helpful resource to learn from and useful in future debates.