void CalculatePathChainForAndGate(Gate.AndGate andGate, Requirement requirementChain) { /* return andGate.Gates * //.InRandomOrder(random) //Aggregate always goes in order of definition it doesnt go in random order * .Aggregate(requirementChain, (chain, singleGate) => chain | CalculatePathChain(singleGate, chain));*/ foreach (var gate in andGate.Gates) { CalculatePathChain(gate, requirementChain); } }
bool GateCanBeOpenedWithoutSuppliedRequirements(Gate.AndGate gate, Requirement requirementToAvoid) { return(gate.Gates.All(g => GateCanBeOpenedWithoutSuppliedRequirements(g, requirementToAvoid))); }