👋 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 There are a number of ways to solve this. You may be able to use the slice of Flights and then checks to see if they exist within another slice of flights.Hint
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)
}
If you enjoyed this challenge, then feel free to try some of the other challenges on the site: