Beispiel #1
0
		public static bool IsSatisfiable(Capability[] required, Capability[] available)
		{
			if (required.OfType<ProduceCapability>().Any() && !available.OfType<ProduceCapability>().Any())
				return false;
			if (required.OfType<ConsumeCapability>().Any() && !available.OfType<ConsumeCapability>().Any())
				return false;

			var requiredAmounts = GroupIngredientAmounts(required);
			var availableAmounts = GroupIngredientAmounts(available);

			foreach (var pair in requiredAmounts)
			{
				int value;
				if (!availableAmounts.TryGetValue(pair.Key, out value) || value < pair.Value)
					return false;
			}

			return true;
		}
Beispiel #2
0
		private static Dictionary<IngredientType, int> GroupIngredientAmounts(Capability[] capabilities)
		{
			return capabilities.OfType<Ingredient>()
							   .GroupBy(ingredient => ingredient.Type, ingredient => (int)ingredient.Amount)
							   .ToDictionary(group => group.Key, group => group.Sum());
		}