コード例 #1
0
        public int GetShortestPossiblePasscode(int[] table)
        {
            int shortestPossiblePasscode = 0;

            HashSet <int>[] trailingNumbersSet = new HashSet <int> [10];
            for (int i = 0; i < 10; i++)
            {
                trailingNumbersSet[i] = new HashSet <int>();
            }

            HashSet <int> foundDigits = new HashSet <int>();


            for (int linenr = 0; linenr < table.Length; linenr++)
            {
                var digitsList = DigitsList.ConvertToDigitListe(table[linenr]);
                trailingNumbersSet[digitsList[2]].Add(digitsList[1]);
                trailingNumbersSet[digitsList[2]].Add(digitsList[0]);
                trailingNumbersSet[digitsList[1]].Add(digitsList[0]);

                foundDigits.Add(digitsList[0]);
                foundDigits.Add(digitsList[1]);
                foundDigits.Add(digitsList[2]);
            }

            var l = foundDigits.OrderBy(i => trailingNumbersSet[i].Count()).ToList();

            shortestPossiblePasscode = DigitsList.ConvertToNumber(l);

            return(shortestPossiblePasscode);
        }
コード例 #2
0
 /*
  *     145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.
  */
 public bool IsCuriousNumber(int number)
 {
     return(number == DigitsList
            .ConvertToDigitListe(number)
            .Select(digit => FactorialArray[digit])
            .Sum());
 }
コード例 #3
0
        public void Test_Product_multiplier(int initValue, int multiplier, int expectedResult)
        {
            var digitsList = DigitsList.ConvertToDigitListe(initValue);
            var resultList = DigitsList.Product(digitsList, multiplier);
            var result     = DigitsList.ConvertToNumber(resultList);

            Assert.Equal(expectedResult, result);
        }
コード例 #4
0
        public void TestConvertToDigitListe()
        {
            var digitsList = DigitsList.ConvertToDigitListe(12345);

            Assert.Equal(5, digitsList.Count);
            Assert.Equal(5, digitsList[0]);;
            Assert.Equal(1, digitsList[4]);;
        }
コード例 #5
0
        public void TestConvertToNumber()
        {
            List <int> liste = new List <int> {
                5, 4, 3, 2, 1
            };

            var number = DigitsList.ConvertToNumber(liste);

            Assert.Equal(12345, number);
        }
コード例 #6
0
        public static BigFraction AddFraction(BigFraction a, BigFraction b)
        {
            List <int> t1  = DigitsList.Product(a.Numerator, b.Denominator);
            List <int> t2  = DigitsList.Product(b.Numerator, a.Denominator);
            var        num = DigitsList.Sum(t1, t2);
            var        dem = DigitsList.Product(a.Denominator, b.Denominator);

            return(new BigFraction {
                Numerator = num, Denominator = dem
            });
        }
コード例 #7
0
        public int GetFactorialdigitsum(int factorial)
        {
            List <int> digits = new List <int>()
            {
                1
            };

            for (int i = 1; i <= factorial; i++)
            {
                digits = DigitsList.Product(digits, multiplier: i);
            }

            return(digits.Sum(e => e));
        }
コード例 #8
0
        public bool IsLychrelNumber(long number)
        {
            bool       isPalindrome      = false;
            int        numberOfIteration = 0;
            List <int> digits            = DigitsList.ConvertToDigitListe(number);

            while (!isPalindrome && numberOfIteration < 50)
            {
                digits = DigitsList.Sum(digits, DigitsList.ReverseCopy(digits));

                isPalindrome = Palindrome.IsPalindrome(digits);
                numberOfIteration++;
            }
            return(!isPalindrome);
        }
コード例 #9
0
        public long GetSumOfDigits(int exponent)
        {
            List <int> digits = new List <int>()
            {
                1
            };

            for (int i = 0; i < exponent; i++)
            {
                digits = DigitsList.Product(digits, multiplier: 2);
            }

            var sumOfDigit = digits.Sum(e => e);

            return(sumOfDigit);
        }
コード例 #10
0
        private bool IsPermutations(long n1, long n2, long n3)
        {
            var liste1 = DigitsList.ConvertToDigitListe(n1).OrderBy(e => e).ToArray();
            var liste2 = DigitsList.ConvertToDigitListe(n2).OrderBy(e => e).ToArray();
            var liste3 = DigitsList.ConvertToDigitListe(n3).OrderBy(e => e).ToArray();

            for (int i = 0; i < 4; i++)
            {
                if (liste1[i] != liste2[i] || liste1[i] != liste3[i])
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #11
0
        public bool NumeratorHasMoreDigitsThanDenominator(int iterationNumber)
        {
            /*
             *   1 + 1/(2 + 1/2..)
             *   1+ 1/seriesum
             *
             * seriesum=t/n
             * seriesum=2 +1/seriesum = 2+1/(t/n)=2+n/t=(2*t+n)/t
             *
             */

            List <int> teller = new List <int> {
                2
            };
            List <int> nevner = new List <int> {
                1
            };

            //seriesum=t/n = 2

            while (iterationNumber > 1)
            {
                // (2*t+n)/t

                //2*t
                //       List<int> a = DigitsList.Product(teller, 2);

                //2*t+n
                var tmp2 = DigitsList.Sum(DigitsList.Product(teller, 2), nevner);
                // /t
                nevner = teller;
                teller = tmp2;

                iterationNumber--;
            }

            //1 + 1 / seriesum
            // 1 +1/(t/n) = (n+t)/t
            var tmp = teller;

            teller = DigitsList.Sum(nevner, teller);
            nevner = tmp;

            //finn all siffer i teller og nevner
            return(teller.Count > nevner.Count);
        }
コード例 #12
0
ファイル: E013Largesum.cs プロジェクト: JanArildEileng/Euler
        public string GetSum(string[] stringArray)
        {
            List <int> sumNumbers = stringArray[0].ToCharArray().Reverse().Select(c => Convert.ToInt32(c - '0')).ToList();

            //skip first, used in init above..
            foreach (var s in stringArray.Skip(1))
            {
                List <int> nextNumber = s.ToCharArray().Reverse().Select(c => Convert.ToInt32(c - '0')).ToList();
                sumNumbers = DigitsList.Sum(nextNumber, sumNumbers);
            }

            //lag string ut fra int array , snu tallene
            StringBuilder builder = new StringBuilder();

            sumNumbers.TakeLast(10).Reverse().ToList().ForEach(s => builder.Append(s.ToString()));
            return(builder.ToString());
        }
コード例 #13
0
        public long GetLastTenDigits(int topower)
        {
            List <int> digitlist = new List <int>();

            for (int i = 1; i <= topower; i++)
            {
                List <int> liste = DigitsList.ConvertToDigitListe(i);

                for (int j = 2; j <= i; j++)
                {
                    liste = DigitsList.Product(liste, MaxDigits, i);
                }

                digitlist = DigitsList.Sum(digitlist, liste);
            }

            return(DigitsList.ConvertToNumberLong(digitlist.Take(MaxDigits).ToList()));
        }
コード例 #14
0
        public static bool IsPandigita(int value, int max)
        {
            int [] digitsArray = DigitsList.ConvertToDigitListe(value).OrderBy(e => e).ToArray();


            if (digitsArray.Length != max)
            {
                return(false);
            }
            for (int i = 1; i <= max; i++)
            {
                if (digitsArray[i - 1] != i)
                {
                    return(false);
                }
            }

            return(true);;
        }
コード例 #15
0
        public long GetMaximumDigitalSum(int abelow, int bbelow)
        {
            long maximumDigitalSum = 1;

            for (int a = 1; a < abelow; a++)
            {
                List <int> aliste = DigitsList.ConvertToDigitListe(1);
                for (int b = 1; b < bbelow; b++)
                {
                    aliste = DigitsList.Product(aliste, a);

                    var digitalSum = aliste.Sum();
                    if (digitalSum > maximumDigitalSum)
                    {
                        maximumDigitalSum = digitalSum;
                    }
                }
            }
            return(maximumDigitalSum);
        }
コード例 #16
0
        /*
         *
         *    Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following:
         *    d2d3d4=406 is divisible by 2
         *    d3d4d5=063 is divisible by 3
         *    d4d5d6=635 is divisible by 5
         *    d5d6d7=357 is divisible by 7
         *    d6d7d8=572 is divisible by 11
         *    d7d8d9=728 is divisible by 13
         *    d8d9d10=289 is divisible by 17
         */

        public bool HasSubstringdivisibility(long number)
        {
            var digitListe = DigitsList.ConvertToDigitListe(number);

            digitListe.Reverse();
            var digitArray = digitListe.ToArray();

            int[] dividors = { 2, 3, 5, 7, 11, 13, 17 };

            for (int i = 0; i < dividors.Length; i++)
            {
                int value = DigitsList.ConvertToNumberHighesFirst(digitArray.Skip(i + 1).Take(3).ToArray());
                if (value % dividors[i] != 0)
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #17
0
        public int GetNumberIntegerWhichAreNthPoweres()
        {
            int numberIntegerWhichAreNthPoweres = 0;

            for (int x = 1; x < 10; x++)
            {
                List <int> powerNumber = new List <int> {
                    x
                };                                           //larger than long

                int nthPower = 1;
                while (powerNumber.Count == nthPower)
                {
                    numberIntegerWhichAreNthPoweres++;
                    powerNumber = DigitsList.Product(powerNumber, x);
                    nthPower++;
                }
            }

            return(numberIntegerWhichAreNthPoweres);
        }
コード例 #18
0
        public bool IsTruncatableprime(int number)
        {
            var digits = DigitsList.ConvertToDigitListe(number);

            for (int i = 0; i < digits.Count; i++)
            {
                if (!IsPrime(DigitsList.ConvertToNumber(digits.Skip(i).ToList())))
                {
                    return(false);
                }
            }

            for (int i = 1; i < digits.Count; i++)
            {
                if (!IsPrime(DigitsList.ConvertToNumber(digits.SkipLast(i).ToList())))
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #19
0
        public int GetSumOfPower(int po)
        {
            int sumOfPower = 0;

            //etter denne verdien vil n alltid være større en powerOfNumber
            int max = 9 * 9 * 9 * 9 * 9 * 6;

            int n = 2;

            while (n < max)
            {
                int powerOfNumber = DigitsList.ConvertToDigitListe(n).Select(d => pow(d, po)).Sum();

                if (powerOfNumber == n)
                {
                    sumOfPower += powerOfNumber;
                }
                n++;
            }

            return(sumOfPower);
        }
コード例 #20
0
        public int GetBelow(int below)
        {
            int        counter     = 0;
            List <int> digitsListe = DigitsList.ConvertToDigitListe(0);

            for (int i = 1; i < below; i++)
            {
                digitsListe = DigitsList.Add1(digitsListe);

                if (i % 10 == 0)
                {
                    continue;
                }
                int count = digitsListe.Count();

                bool reverible = true;
                int  rest      = 0;
                for (int d = 0; d < count; d++)
                {
                    int digitplusreverse = digitsListe[d] + digitsListe[count - d - 1] + rest;
                    int s = digitplusreverse % 10;

                    if (s % 2 == 0)
                    {
                        reverible = false;
                        break;
                    }
                    rest = digitplusreverse / 10;
                }

                if (reverible)
                {
                    counter++;
                }
            }

            return(counter);
        }
コード例 #21
0
        public long GetIndexOfFirstTerm(int numberOfdigits)
        {
            List <int> fn1 = new List <int>()
            {
                1
            };
            List <int> fn2 = new List <int>()
            {
                1
            };

            int IndexOfTerm = 2;

            while (fn2.Count < numberOfdigits)
            {
                var fnext = DigitsList.Sum(fn1, fn2);
                fn1 = fn2;
                fn2 = fnext;
                IndexOfTerm++;
            }

            return(IndexOfTerm);
        }
コード例 #22
0
        public int GetNumberOfDistinctTerms(int amax, int bmax)
        {
            /*   Consider all integer combinations of ab for 2 ≤ a ≤ 5 and 2 ≤ b ≤ 5:    */

            List <string> numberAsStringListe = new List <string>();

            for (var a = 2; a <= amax; a++)
            {
                List <int> digitlist = new List <int>()
                {
                    a
                };

                for (var b = 2; b <= bmax; b++)
                {
                    digitlist = DigitsList.Product(digitlist, multiplier: a);
                    numberAsStringListe.Add(digitlist.StringFromArrayReverse());
                }
            }

            var numberOfDistinctTerms = numberAsStringListe.Distinct().Count();

            return(numberOfDistinctTerms);
        }
コード例 #23
0
        public bool IsCircularPrimes(int number)
        {
            var digits       = DigitsList.ConvertToDigitListe(number);
            int antallShifts = digits.Count;


            for (int index = 0; index < antallShifts; index++)
            {
                List <int> nyListe = new List <int>();
                for (int j = 0; j < antallShifts; j++)
                {
                    int t = digits[(j + index) % antallShifts];
                    nyListe.Add(t);
                }


                int number2 = DigitsList.ConvertToNumber(nyListe);
                if (!IsPrime(number2))
                {
                    return(false);
                }
            }
            return(true);
        }
コード例 #24
0
        public int SumFactorialOfItsDigits(int number)
        {
            var digitsList = DigitsList.ConvertToDigitListe(number);

            return((int)digitsList.Select(i => Factorial.Factor(i)).Sum());
        }
コード例 #25
0
        private int SumSquareDigits(int number)
        {
            List <int> list = DigitsList.ConvertToDigitListe(number);

            return(list.Select(e => e * e).Sum());
        }