示例#1
0
        private async void RunAlgorithm(IInputService input)
        {
            _pause = false;

            if (_mapInput.Map == null)
            {
                MessageBox.Show("Nie wczytano mapy.");
                return;
            }
            if (_input == null || _algorithm == null || _input != input)
            {
                _input     = input;
                _algorithm = new AlgorithmLogic(input, _mapInput.Map);
            }

            IOutputService output;

            while (!_algorithm.IsFinished() && !_pause)
            {
                output = await Task.Run(() =>
                {
                    return(_algorithm.Execute());
                });

                UpdateState(output);
                await Task.Delay(_delay);
            }
            //ustawiane na nulla, żeby przy kolejnym uruchomieniu pełnego algorytmu podał nowe dane z interfejsu w konstruktorze
            if (!_pause)
            {
                _algorithm = null;
            }
        }
示例#2
0
        public static List <Measurement> Estimate(IAlgorithm algorithm, int beginValues, int endValues,
                                                  int step, int repetitionsCount, IАveragerResults averageResult)
        {
            var measurements = new List <Measurement>();
            var data         = new long[repetitionsCount];
            var memories     = new long[repetitionsCount];
            var stopwatch    = new Stopwatch();

            for (var number = beginValues; number <= endValues; number += step)
            {
                for (var repetition = 0; repetition < repetitionsCount; repetition++)
                {
                    algorithm.Prepare(number);
                    stopwatch.Start();
                    algorithm.Execute();
                    memories[repetition] = Process.GetCurrentProcess().WorkingSet64;
                    stopwatch.Stop();
                    data[repetition] = stopwatch.ElapsedMilliseconds;
                    stopwatch.Reset();
                }
                measurements.Add(new Measurement
                {
                    Size   = number,
                    Time   = averageResult.Calculate(data),
                    Memory = (double)averageResult.Calculate(memories) / (1024 * 1024)
                });
            }
            return(measurements);
        }
示例#3
0
        static void Main(string[] args)
        {
            IAlgorithm algorithm = GetAlgorithm("FirstNonrptnChar_EquilibruimIndex_CommonPrefix");

            algorithm.Execute();
            //Console.WriteLine("value" + val);
        }
示例#4
0
 /// <summary>
 /// Запускает исполнение алгоритма обработки файла
 /// </summary>
 /// <param name="sourceFilePath">Исходный файл (сжимаемый)</param>
 /// <param name="targetFilePath">Результирующий файл (сжатый)</param>
 public void Handle(string sourceFilePath, string targetFilePath)
 {
     //Вообще, в декомпозиции можно было пойти и дальше.
     //Алгоритм однотипен - прочитать с диска, сжать/разжать и записать на диск.
     //Можно было бы применить стратегию непосредственно к классам FileReader, FileCompressor (переименовать его), FileWriter.
     //Но это усложнило бы код. Цель - не максимальное дробление классов, а сокрытие внутренней логики работы обработчика файлов от внешнего пользователя.
     _algorithm.Execute(sourceFilePath, targetFilePath);
 }
 //Should be handled as event trigger, for simplicity handled as event handler
 private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     if (e.AddedItems?.Count > 0)
     {
         IAlgorithm algo = e.AddedItems[0] as IAlgorithm;
         algo?.Execute();
     }
 }
示例#6
0
        public TResult Execute(TInput input)
        {
            var sw     = Stopwatch.StartNew();
            var result = _algorithm.Execute(input);

            sw.Stop();

            WriteTimeToFile(sw.ElapsedMilliseconds);

            return(result);
        }
示例#7
0
文件: ConsoleUi.cs 项目: Mygeen/Algo2
 public void Execute(IAlgorithm algorithm)
 {
     try
     {
         algorithm.Execute();
         algorithm.Visualize();
     }
     catch (ArgumentException e)
     {
         PrintErrorMessage(e.Message);
         Console.ReadKey();
     }
 }
示例#8
0
        public virtual string Evaluate(string expression)
        {
            IList <string> tokens = Regex.Matches(expression, @"([A-Za-z])+|([0-9])+|([\\\]\[\/\.\,\!\@\#\$\%\^\&\*\+\-]){1}")
                                    .Cast <Match>()
                                    .Select(m => m.Value)
                                    .ToList <string>();

            var result = solver.Execute(parser.Execute(cleaner.Execute(tokens)));

            StringBuilder resultString = new StringBuilder();

            foreach (string token in result)
            {
                resultString.Append(token);
            }

            return(resultString.ToString());
        }
示例#9
0
        private static void Check(string path, IAlgorithm algorithm)
        {
            var files    = Directory.GetFiles(path);
            var inFiles  = files.Where(x => x.Split('.').Last() == "in").ToArray();
            var outFiles = files.Where(x => x.Split('.').Last() == "out").ToArray();

            Console.WriteLine(algorithm.Name);

            for (int i = 0; i < inFiles.Length; i++)
            {
                var data     = File.ReadAllText(inFiles[i]).Trim();
                var expected = File.ReadAllText(outFiles[i]).Trim();
                var actual   = algorithm.Execute(data);
                Console.WriteLine($"{i + 1}. {actual == expected}");
            }

            Console.WriteLine("-----------------------------------\n");
        }