public HatAssignment DeepCopyHatAssignment() { var newMembers = new IndividualAssignment[this.Assignment.Length]; for (int i = 0; i < this.Assignment.Length; i++) { newMembers[i] = new IndividualAssignment { CitizenId = this.Assignment[i].CitizenId , HatColor = this.Assignment[i].HatColor }; } return new HatAssignment { Assignment = newMembers }; }
public bool VerifySolution(Code code, int numPeople, int numHats) { var possibleCombinationsOfHats = this.GenerateAllPossibleHatAssignments( numPeople, numHats, 1); var numPeopleInSmallerLine = code.Code1.OneWaySignals.First().Signal.Assignment.Length; var numPeopleInLargerLine = code.Code2.OneWaySignals.First().Signal.Assignment.Length; foreach (var combination in possibleCombinationsOfHats) { var signalFromSmallerLineMembers = new IndividualAssignment[numPeopleInSmallerLine]; var signalFromLargerLineMembers = new IndividualAssignment[numPeopleInLargerLine]; for(int i=0; i< numPeopleInSmallerLine; i++) { signalFromSmallerLineMembers[i] = new IndividualAssignment { CitizenId = combination.Assignment[i].CitizenId, HatColor = combination.Assignment[i].HatColor }; } for(int i=0; i<numPeopleInLargerLine; i++) { signalFromLargerLineMembers[i] = new IndividualAssignment { CitizenId = combination.Assignment[i + numPeopleInSmallerLine].CitizenId, HatColor = combination.Assignment[i + numPeopleInSmallerLine].HatColor }; } var signalFromSmallerLine = new HatAssignment { Assignment = signalFromSmallerLineMembers }; var signalFromLargerLine = new HatAssignment { Assignment = signalFromLargerLineMembers }; var responseFromSmallerLine = code.Code2.OneWaySignals.Single(c => c.Signal.Equals(signalFromLargerLine)).Response; var responseFromLargerLine = code.Code1.OneWaySignals.Single(c => c.Signal.Equals(signalFromSmallerLine)).Response; if(!(this.PairContainsAtLeastOneMatchingHat(signalFromSmallerLine, responseFromSmallerLine) || this.PairContainsAtLeastOneMatchingHat(signalFromLargerLine, responseFromLargerLine))) { return false; } } return true; }