You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.2 KiB
56 lines
1.2 KiB
package main |
|
|
|
import ( |
|
"encoding/json" |
|
"fmt" |
|
"io/ioutil" |
|
) |
|
|
|
func setupGhostTypes() { |
|
var c []Spookster |
|
confFile, _ := ioutil.ReadFile("ghosts.json") |
|
err := json.Unmarshal([]byte(confFile), &c) |
|
if err != nil { |
|
return |
|
} |
|
ghostTypes = c |
|
fmt.Printf("Loaded %+v ghost types\n", len(ghostTypes)) |
|
} |
|
|
|
func (g *Game) EliminateGhosts(newEvidence int) { |
|
var types []Spookster |
|
var evidence []int |
|
for _, v := range g.PossibleGhosts { |
|
possible := false |
|
for _, e := range v.Evidence { |
|
if e == newEvidence { |
|
possible = true |
|
} |
|
} |
|
if possible { |
|
types = append(types, v) |
|
evidence = append(evidence, v.Evidence...) |
|
} |
|
} |
|
g.PossibleGhosts = types |
|
g.PossibleEvidence = removeDuplicateValues(evidence) |
|
|
|
games[g.Identifier] = *g |
|
} |
|
|
|
// https://www.geeksforgeeks.org/how-to-remove-duplicate-values-from-slice-in-golang/ |
|
func removeDuplicateValues(intSlice []int) []int { |
|
keys := make(map[int]bool) |
|
list := []int{} |
|
|
|
// If the key(values of the slice) is not equal |
|
// to the already present value in new slice (list) |
|
// then we append it. else we jump on another element. |
|
for _, entry := range intSlice { |
|
if _, value := keys[entry]; !value { |
|
keys[entry] = true |
|
list = append(list, entry) |
|
} |
|
} |
|
return list |
|
}
|
|
|