Challenge 11 - Sets and Subsets
👋 Welcome Gophers! In this challenge, you are tasked with trying to implement a function that checks to see if a set is a sub-set of another set.
We’ll be carrying on the flying theme where the function takes in a slice
of Flights and then checks to see if they exist within another slice
of flights.
Hint
There are a number of ways to solve this. You may be able to use the reflect
package or you may be able to serialize each flight and create a hash of them which you can store in a hash.
View Solution
package main
import (
"bytes"
"encoding/gob"
"fmt"
)
// Flight struct which contains
// the origin, destination and price of a flight
type Flight struct {
Origin string
Destination string
Price int
}
// IsSubset checks to see if the first set of
// flights is a subset of the second set of flights.
func IsSubset(first, second []Flight) bool {
// implement
set := make(map[Flight]int)
for _, value := range second {
set[value] += 1
}
for _, value := range first {
if count, found := set[value]; !found {
return false
} else if count < 1 {
return false
} else {
set[value] = count - 1
}
}
return true
}
func Hash(f Flight) []byte {
var b bytes.Buffer
gob.NewEncoder(&b).Encode(f)
return b.Bytes()
}
func main() {
fmt.Println("Sets and Subsets Challenge")
firstFlights := []Flight{
Flight{Origin: "GLA", Destination: "CDG", Price: 1000},
Flight{Origin: "GLA", Destination: "JFK", Price: 5000},
Flight{Origin: "GLA", Destination: "SNG", Price: 3000},
}
secondFlights := []Flight{
Flight{Origin: "GLA", Destination: "CDG", Price: 1000},
Flight{Origin: "GLA", Destination: "JFK", Price: 5000},
Flight{Origin: "GLA", Destination: "SNG", Price: 3000},
Flight{Origin: "GLA", Destination: "AMS", Price: 500},
}
subset := IsSubset(firstFlights, secondFlights)
fmt.Println(subset)
}
Further Reading:
If you enjoyed this challenge, then feel free to try some of the other challenges on the site: