fix missing ones

This commit is contained in:
Florian Baumann 2022-01-12 13:57:40 +01:00
parent 2f77b7f32c
commit c78c766825
2 changed files with 36 additions and 23 deletions

View File

@ -52,6 +52,25 @@ func stringToTime(s primitive.DateTime) string {
return time.UnixMilli(int64(s)).Format("2006-01-02") return time.UnixMilli(int64(s)).Format("2006-01-02")
} }
// missing compares two slices and returns slice of differences
func missing(a, b []string) []string {
type void struct{}
// create map with length of the 'a' slice
ma := make(map[string]void, len(a))
diffs := []string{}
// Convert first slice to map with empty struct (0 bytes)
for _, ka := range a {
ma[ka] = void{}
}
// find missing values in a
for _, kb := range b {
if _, ok := ma[kb]; !ok {
diffs = append(diffs, kb)
}
}
return diffs
}
func find_set_by_code(coll *Collection, setcode string) (*Set, error) { func find_set_by_code(coll *Collection, setcode string) (*Set, error) {
stored_sets, err := coll.storage_find_set(bson.D{{"code", setcode}}, bson.D{{"_id", 1}}) stored_sets, err := coll.storage_find_set(bson.D{{"code", setcode}}, bson.D{{"_id", 1}})

View File

@ -180,33 +180,27 @@ func Missing(setname string) error {
set := sets[0] set := sets[0]
LogMessage(fmt.Sprintf("Missing cards in %s", sets[0].Name), "green") LogMessage(fmt.Sprintf("Missing cards in %s", sets[0].Name), "green")
// generate set with all setnumbers
var complete_set []string
var i int64 var i int64
// iterate over all cards in set for i = 1; i <= set.CardCount; i++ {
for i = 1; i < set.CardCount; i++ { complete_set = append(complete_set, strconv.FormatInt(i, 10))
fmt.Printf("Checking usg/%d\n", i) }
var found bool
found = false
// iterate over all cards in collection // iterate over all cards in collection
for _, c := range cards { var in_collection []string
found = false for _, c := range cards {
// check if current card has collector number that we look for in_collection = append(in_collection, c.CollectorNumber)
if c.CollectorNumber == strconv.FormatInt(i, 16) { }
// if yes, set found to true, and stop looking misses := missing(in_collection, complete_set)
found = true for _, m := range misses {
break ncard, err := fetch_card(fmt.Sprintf("%s/%s", setname, m))
} if err != nil {
continue
} }
if !found { fmt.Printf("%s (%s)\n", ncard.Name, ncard.SetName)
ncard, err := fetch_card(fmt.Sprintf("%s/%s", setname, strconv.FormatInt(i, 16)))
if err != nil {
continue
}
fmt.Printf("%s (%s)\n", ncard.Name, ncard.SetName)
}
} }
return nil return nil
} }