public static void Run(string[] args)
        {
            string algorithmFilePath = string.Empty;
            TicketCountAlgorithms currentAlgorhytm = TicketCountAlgorithms.None;

            if (args.Length == 0)
            {
                algorithmFilePath = UI.RequestFilePath();
            }
            else
            {
                algorithmFilePath = args[0];
            }

            AlgorithmGetter algorithmGet = new AlgorithmGetter(new AlgorithmFileReader());

            currentAlgorhytm = algorithmGet.GetAlgorhytm(algorithmFilePath);

            if (currentAlgorhytm != TicketCountAlgorithms.None)
            {
                ulong ticketCount = 0;
                LuckyTicketsCounter counter;

                try
                {
                    switch (currentAlgorhytm)
                    {
                    case TicketCountAlgorithms.Moscow:
                        counter     = new LuckyTicketsCounterMoscow(DEFAULT_DIGITS_NUMBER);
                        ticketCount = counter.GetLuckyTicketsQuantity();
                        break;

                    case TicketCountAlgorithms.Piter:
                        counter     = new LuckyTicketsCounterPiter(DEFAULT_DIGITS_NUMBER);
                        ticketCount = counter.GetLuckyTicketsQuantity();
                        break;

                    default:
                        break;
                    }
                }
                catch (InvalidTicketDigitsCountException ex)
                {
                    UI.PrintExceptionMessage(ex);
                }
                catch (RecursionDepthTooBigException ex)
                {
                    UI.PrintExceptionMessage(ex);
                }

                UI.PrintTicketsCount(ticketCount);
            }
            else
            {
                UI.PrintHelp(Path.GetFullPath(algorithmFilePath));
            }
        }
        public static void Run(string[] args)
        {
            string algorithmFilePath = string.Empty;

            if (args.Length == 0)
            {
                algorithmFilePath = UI.RequestFilePath();
            }
            else
            {
                algorithmFilePath = args[0];
            }

            algorithmFilePath = Path.GetFullPath(algorithmFilePath);

            if (!TryValidateFilePath(ref algorithmFilePath))
            {
                UI.PrintHelp(algorithmFilePath);
                return;
            }

            TicketCountAlgorithms currentAlgorhytm;

            if (TryGetAlgorhytm(algorithmFilePath, out currentAlgorhytm))
            {
                ulong ticketCount = 0;

                try
                {
                    if (currentAlgorhytm == TicketCountAlgorithms.Moscow)
                    {
                        ticketCount = new LuckyTicketsCounterMoscow(DEFAULT_DIGITS_NUMBER).GetLuckyTicketsQuantity();
                    }

                    if (currentAlgorhytm == TicketCountAlgorithms.Piter)
                    {
                        ticketCount = new LuckyTicketsCounterPiter(DEFAULT_DIGITS_NUMBER).GetLuckyTicketsQuantity();
                    }
                }
                catch (InvalidTicketDigitsCountException ex)
                {
                    UI.PrintExceptionMessage(ex);
                }
                catch (RecursionDepthTooBigException ex)
                {
                    UI.PrintExceptionMessage(ex);
                }

                UI.PrintTicketsCount(ticketCount);
            }
            else
            {
                UI.PrintHelp(algorithmFilePath);
            }
        }