public void AddRow(params int[] numbers)
        {
            var numbersArr = new PositionedNumber[numbers.Length];

            for (int i = 0; i < numbers.Length; i++)
            {
                numbersArr[i] = new PositionedNumber(numbers[i], i);
            }

            this.Rows.Add(numbersArr);
        }
        private void CalculateSumOfPath(HashSet <int> finalSum, int accumulator, int index = 0, int xPosition = 0)
        {
            // When we're at the end of the triangle return the sum of the accumulator
            if (index == this.Rows.Count - 1)
            {
                finalSum.Add(accumulator);
                return;
            }

            //Check each adjacent number on the row below and add
            var rowBelow = this.Rows[index + 1];

            var adjacentNumbers = new PositionedNumber[2];

            adjacentNumbers[0] = rowBelow[xPosition];
            adjacentNumbers[1] = xPosition + 1 <= rowBelow.GetUpperBound(0) ? rowBelow[xPosition + 1] : null;

            adjacentNumbers.Where(num => num != null).ToList().ForEach(
                adjNum => CalculateSumOfPath(finalSum, accumulator + adjNum.Value, this.Rows.IndexOf(rowBelow), adjNum.XPosition));
        }