using System.Collections.Generic;
public static class Solution
private static double TimeStringToDouble(string timewindow){
var parts = timewindow.Split(':');
var hour = Convert.ToInt32(parts[0]);
var minute = Convert.ToInt32(parts[1]);
return hour + (minute / 60);
public static List<string> FindOverlappingWindows(string[] windows)
List<(double Start, double End, string Window)> parsedWindows = new List<(double, double, string)>();
foreach (var window in windows)
var parts = window.Split('-');
var start = TimeStringToDouble(parts[0]);
var end = TimeStringToDouble(parts[1]);
parsedWindows.Add((start, end, window));
parsedWindows.Sort((a, b) => a.Item1.CompareTo(b.Item1));
List<string> overlappingWindows = new List<string>();
for (int i = 0; i < parsedWindows.Count - 1; i++)
if (parsedWindows[i].Start <= parsedWindows[i+1].End && parsedWindows[i].End >= parsedWindows[i+1].Start)
overlappingWindows.Add(parsedWindows[i].Window);
overlappingWindows.Add(parsedWindows[i+1].Window);
return overlappingWindows;
public static void Main()
List<string> result = FindOverlappingWindows(windows);
Console.WriteLine(string.Join("\n", result));