예제 #1
0
        public string Solve(string[] input)
        {
            var encodingList = input.Select(a => ulong.Parse(a)).ToList();

            var encodingQueue = new Queue <ulong>(queueLength);

            for (var index = 0; index < encodingList.Count; index++)
            {
                if (encodingQueue.Count == 25)
                {
                    // Do the checks
                    var result = ArrayCheck.FindTwoValuesWithSum(encodingQueue, encodingList[index]);

                    if (result == null)
                    {
                        return(this.ProcessResult(encodingList, index).ToString());
                    }

                    encodingQueue.Dequeue();
                }

                encodingQueue.Enqueue(encodingList[index]);
            }

            return(ulong.MinValue.ToString());
        }
예제 #2
0
        public string Solve(string[] input)
        {
            var actualArray = input.Select(a => ulong.Parse(a));

            var result = ArrayCheck.FindTwoValuesWithSum(actualArray, 2020);

            return((result.Item1 * result.Item2).ToString());

            throw new System.ArgumentException("Argument must contain two integers that sum to 2020");
        }
예제 #3
0
        /// <summary>
        /// Tridiagonal matrix multiplication (in place) M * x
        /// M = ( diag_0  upper_0   0         0    )
        ///     ( lower_1 diag_1  upper_1     0    )
        ///     (   0     lower_2 diag_2   upper_2 )
        ///     (   0       0     lower_3  diag_3  )
        /// </summary>
        /// <param name="x"></param>
        /// <param name="lower"></param>
        /// <param name="diag"></param>
        /// <param name="upper"></param>
        public static unsafe void MultTridiagonal(this double[] x, double[] lower, double[] diag, double[] upper)
        {
            int n = x.Length;

            if (n == 0)
            {
                return;
            }
            ArrayCheck.EqualSize(n, x, lower, diag, upper);
            fixed(double *px = &x[0], plower = &lower[0], pdiag = &diag[0], pupper = &upper[0])
            {
                MultTridiagonal(px, n, plower, pdiag, pupper);
            }
        }
예제 #4
0
        /// <summary>
        /// Solve tridiagonal system (in place) M * x = y
        /// M = ( diag_0  upper_0   0         0    )
        ///     ( lower_1 diag_1  upper_1     0    )
        ///     (   0     lower_2 diag_2   upper_2 )
        ///     (   0       0     lower_3  diag_3  )
        /// </summary>
        /// <param name="y"></param>
        /// <param name="lower"></param>
        /// <param name="diag"></param>
        /// <param name="upper"></param>
        public static unsafe void SolveTridiagonal(this double[] y, double[] lower, double[] diag, double[] upper)
        {
            int n = y.Length;

            if (n == 0)
            {
                return;
            }
            ArrayCheck.EqualSize(n, y, lower, diag, upper);
            fixed(double *py = &y[0], plower = &lower[0], pdiag = &diag[0], pupper = &upper[0])
            {
                SolveTridiagonal(py, n, plower, pdiag, pupper);
            }
        }