public static float Compare(IMtgDeck deck1, IMtgDeck deck2) { var deck1Space = FeatureSpaceFor(deck1); var deck2Space = FeatureSpaceFor(deck2); return(VectorCompare(deck1Space, deck2Space)); }
public static MongoMtgDeck FromMtgDeck(IMtgDeck deck) { return(new MongoMtgDeck { Name = deck.Name, Cards = deck.Cards, Meta = deck.Meta }); }
public string CreateUniqueIdForDeck(IMtgDeck deck) { var orderedCards = deck.Cards.Values.OrderBy(card => card.Name); var builder = new StringBuilder(); foreach (var card in orderedCards) { builder.Append(card.Name); } var bytes = Encoding.UTF8.GetBytes(builder.ToString()); var hasher = new SHA256Managed(); var id = hasher.ComputeHash(bytes); return(Convert.ToBase64String(id)); }
public static Vector2[] FeatureSpaceFor(IMtgDeck deck) { var space = new Vector2[deck.Cards.Count]; int i = 0; foreach (var key in deck.Cards.Keys) { var card = deck.Cards[key]; var features = new Vector2(card.FeatureIndex, card.Count); space[i] = features; i++; } return(space); }
bool DifferencesExist(IMtgDeck deck1, IMtgDeck deck2) { return(deck1.Name != deck2.Name || System.Math.Abs(deck1.Meta - deck2.Meta) > 0.001 || CardDifferencesExist(deck1.Cards, deck2.Cards)); }