public void ProcessTriangleProblem()
 {
     using (var readerdata = new StreamReader(this.inputFilename))
     {
         List <RowData>      rows                = ParseRawDataInToRows(readerdata);
         List <string>       distinctProducts    = FindingDistinctProducts(rows);
         MinMax              minmax              = CalculateMinMaxDurationandProductCount(rows, distinctProducts);
         AccumulatedProducts accumulatedProducts = AlgorithmCompressingList(minmax, rows, distinctProducts);
         Output(accumulatedProducts, this.outputFilename);
     }
 }
 private void Output(AccumulatedProducts accumulatedProducts, string fileName)
 {
     using (StreamWriter writer = new StreamWriter(fileName))
     {
         IMinMax range = accumulatedProducts.Range;
         writer.WriteLine(range.Start + ", " + range.Duration);
         foreach (var product in accumulatedProducts.Products)
         {
             string toOutput    = string.Join(", ", product.Values);
             string finalOutput = product.Name + ", " + toOutput;
             writer.WriteLine(finalOutput);
         }
     }
 }