예제 #1
0
        public override IEnumerable <string> Solve(TextReader inputStream)
        {
            var(n, q) = inputStream.ReadValue <int, int>();
            var a = inputStream.ReadIntArray();
            var s = inputStream.ReadIntArray();

            var gcds = new long[n];

            gcds[0] = a[0];

            for (int i = 1; i < a.Length; i++)
            {
                gcds[i] = BasicAlgorithm.Gcd(a[i], gcds[i - 1]);
            }

            foreach (var si in s)
            {
                var index = BoundaryBinarySearch(gcds, (long l) => BasicAlgorithm.Gcd(l, si) == 1, -1, gcds.Length);
                if (index < gcds.Length)
                {
                    yield return((index + 1).ToString());
                }
                else
                {
                    yield return(BasicAlgorithm.Gcd(gcds[^ 1], si).ToString());
예제 #2
0
 public void TestBasicAlgProfit()
 {
     using (var provider = new TextCandleProvider())
     {
         provider.SetTextParams("data/si-9-17.dat", ';');
         var alg = new BasicAlgorithm(5, 5);
         var acc = new TestAccAgregator();
         while (provider.MoveNext())
         {
             var answer = alg.Check(provider.Current);
             if (answer == FortsRobotLib.AlgResult.Buy)
             {
                 acc.Buy(1 - acc.Assets, provider.Current);
             }
             if (answer == FortsRobotLib.AlgResult.Sell)
             {
                 acc.Sell(1 + acc.Assets, provider.Current);
             }
             if (answer == FortsRobotLib.AlgResult.Exit)
             {
                 acc.Close(provider.Current);
             }
         }
         acc.Close(provider.Current);
         Assert.IsTrue(acc.Balance > 0);
     }
 }
예제 #3
0
 public void TestBasicAlgMatrix()
 {
     using (var provider = new TextCandleProvider())
     {
         var alg = new BasicAlgorithm(13, 12, 11, 10, 9, 8, 7, 6, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13);
         provider.SetTextParams("data/si-9-17.dat", ';');
         while (provider.MoveNext() && provider.Current.TimeStamp != new DateTime(2017, 6, 1, 15, 0, 0))
         {
         }
         Assert.IsTrue(provider.Current.Close == 58054);
         while (provider.MoveNext() && provider.Current.TimeStamp != new DateTime(2017, 6, 8, 11, 0, 0))
         {
             alg.Check(provider.Current);
         }
         alg.Check(provider.Current);
         Assert.IsTrue(provider.Current.Close == 58204);
         using (var reader = new StreamReader("../../data/basic_data.dat"))
         {
             while (provider.MoveNext() && provider.Current.TimeStamp != new DateTime(2017, 6, 10, 0, 0, 0))
             {
                 var answer = alg.Check(provider.Current);
                 var data   = alg.Data.Last();
                 var values = reader.ReadLine().Split(';').ToArray();
                 for (var i = 3; i < 12; i++)
                 {
                     Assert.AreEqual(Math.Truncate((data[i - 2])), Math.Truncate(float.Parse(values[i], NumberStyles.Any, CultureInfo.InvariantCulture)));
                 }
                 Assert.AreEqual(Math.Truncate(float.Parse(values[2], NumberStyles.Any, CultureInfo.InvariantCulture)), Math.Truncate(data[0]));
                 System.Diagnostics.Trace.WriteLine(answer);
             }
         }
         Assert.IsTrue(provider.Current.Close == 58220);
     }
 }
예제 #4
0
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var ab = inputStream.ReadIntArray();
            var a  = ab[0];
            var b  = ab[1];

            yield return(BasicAlgorithm.Lcm(a, b));
        }
예제 #5
0
        int GetCount(string n, int k)
        {
            n = n.TrimStart('0');
            if (n == string.Empty)
            {
                n = "0";
            }

            if (k <= 0)
            {
                return(1);
            }

            var nInt = BigInteger.Parse(n);

            if (k == 1 && nInt < 1)
            {
                return(0);
            }
            if (k == 2 && nInt < 11)
            {
                return(0);
            }
            else if (k == 3 && nInt < 111)
            {
                return(0);
            }

            int sum      = 0;
            var digit    = n.Length;
            var maxDigit = n[0] - '0';

            // 最上位桁が0
            if (digit > k)
            {
                sum += (int)BasicAlgorithm.Combination(digit - 1, k) * Pow(9, k);
            }

            // 最上位桁が1以上maxDigit未満
            sum += (maxDigit - 1) * (int)BasicAlgorithm.Combination(digit - 1, k - 1) * Pow(9, k - 1);

            // 最上位桁がmaxDigit
            sum += GetCount(n.Substring(1), k - 1);

            return(sum);
        }
예제 #6
0
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var k = inputStream.ReadInt();

            long sum = 0;

            for (int a = 1; a <= k; a++)
            {
                for (int b = 1; b <= k; b++)
                {
                    for (int c = 1; c <= k; c++)
                    {
                        sum += BasicAlgorithm.Gcd(BasicAlgorithm.Gcd(a, b), c);
                    }
                }
            }

            yield return(sum);
        }
예제 #7
0
        static void Main()
        {
            techVar = new TechnicalVariables
            {
                pauseValue = 0,
                fieldY     = 4,
                fieldX     = 4
            };

            chessField = new char[techVar.fieldY, techVar.fieldX];

            CreateChessField(ref chessField);
            DrawChessField(chessField);

            var algorithm = new BasicAlgorithm(chessField, techVar);

            algorithm.StartSearching();

            ReadKey();
        }