2 using System.Collections.Generic;
3 using System.Collections.ObjectModel;
12 protected internal IList<AnswerSet> answersets;
18 public override object Clone() =>
base.Clone();
20 public virtual IList<AnswerSet> Answersets
24 if (answersets ==
null)
26 answersets =
new List<AnswerSet>();
29 return new ReadOnlyCollection<AnswerSet>(answersets);
33 public virtual IList<AnswerSet> GetOptimalAnswerSets()
36 IList<AnswerSet> answerSets = Answersets, optimalAnswerSets =
new List<AnswerSet>();
38 foreach (
AnswerSet answerSet
in answerSets)
40 int maxLevel = answerSet.LevelWeight.Keys.Max();
46 for (; level >= 1; level--)
48 int minimumCost =
int.MaxValue;
50 foreach (
AnswerSet answerSet
in answerSets)
52 int cost = answerSet.Weights.TryGetValue(level, out cost) ? cost : 0;
54 if (cost < minimumCost)
56 optimalAnswerSets.Clear();
61 if (cost == minimumCost)
62 optimalAnswerSets.Add(answerSet);
65 answerSets =
new List<AnswerSet>(optimalAnswerSets);
68 return optimalAnswerSets;
71 public virtual string AnswerSetsString => output;
73 public void AddAnswerSet()
75 answersets.Add(
new AnswerSet(
new List<string>()));
78 public void StoreAtom(
string result)
80 answersets[answersets.Count - 1].Value.Add(result);
83 public void StoreCost(
int level,
int weight)
85 answersets[answersets.Count - 1].LevelWeight.Add(level, weight);