Esempio n. 1
0
        private (string way, int k) GetNewK(string way, int k, StairsWithDicks stairsWithDicks, int step)
        {
            int nextStep = step + 1;
            int jumpStep = step + 2;

            if (jumpStep <= stairsWithDicks.Count)
            {
                (string way, int k)next = GetNewK(way, k, stairsWithDicks, nextStep);
                (string way, int k)jump = GetNewK(way, k, stairsWithDicks, jumpStep);
                if (next.k < jump.k)
                {
                    k  += next.k;
                    way = $"{nextStep};{next.way}";
                }
                else
                {
                    k  += jump.k;
                    way = $"{jumpStep};{jump.way}";
                }
            }
            else
            {
                way = $"End;{way}";
            }
            if (stairsWithDicks.HasStep(step))
            {
                int count = stairsWithDicks.GetDicksForStep(step);
                k += count;
            }
            return(way, k);
        }
Esempio n. 2
0
        public void Test1(int stepCount, int dickCount)
        {
            StairsWithDicks stairsWithDicks = _dickService.DropDicks(stepCount, dickCount);

            (string way, int k)result = _dickService.Find(stairsWithDicks);

            Console.WriteLine("Stairs: " + string.Join(';', Enumerable.Range(1, stepCount).Select(s => stairsWithDicks.GetDicksForStep(s))));
            Console.WriteLine("Way: " + result.way);
            Console.WriteLine("K: " + result.k);
        }