diff --git a/hotelbusiness/hotels.go b/hotelbusiness/hotels.go index e0214e8..b2b9b16 100644 --- a/hotelbusiness/hotels.go +++ b/hotelbusiness/hotels.go @@ -2,6 +2,8 @@ package hotelbusiness +import "math" + type Guest struct { CheckInDate int CheckOutDate int @@ -13,5 +15,30 @@ type Load struct { } func ComputeLoad(guests []Guest) []Load { - return []Load{} + if len(guests) == 0 { + return []Load{} + } + minDate, maxDate := math.MaxInt, math.MinInt + loadsNoEmptyDays := make(map[int]int) + for _, guest := range guests { + if guest.CheckInDate < minDate { + minDate = guest.CheckInDate + } + if guest.CheckOutDate > maxDate { + maxDate = guest.CheckOutDate + } + for i := guest.CheckInDate; i < guest.CheckOutDate; i++ { + loadsNoEmptyDays[i]++ + } + } + loads, prevGuestCount := make([]Load, 0), 0 + for i := minDate; i <= maxDate; i++ { + guestCount := loadsNoEmptyDays[i] + if prevGuestCount == guestCount { + continue + } + loads = append(loads, Load{i, guestCount}) + prevGuestCount = guestCount + } + return loads }