private void generateButton_Click(object sender, System.EventArgs e) { CancelRunningTask(); var token = _tokenSource.Token; if (currentSize != (int)blockSizeBox.Value) { Task task = Task.Factory.StartNew(() => { blockSetGenerator = new IncrementalBlockSetGenerator((int)blockSizeBox.Value, token, new Random().Next()); }, token).ContinueWith(_ => { if (token.IsCancellationRequested) { return; } currentSize = (int)blockSizeBox.Value; board.Blocks = blockSetGenerator.GenerateBlocks((int)blockCountBox.Value); var bitmap = BitmapGenerator.DrawBlockList(board.Blocks); pictureBox.ClientSize = new Size(bitmap.Width, bitmap.Height); pictureBox.Image = bitmap; }, TaskScheduler.FromCurrentSynchronizationContext()); } else { board.Blocks = blockSetGenerator.GenerateBlocks((int)blockCountBox.Value); var bitmap = BitmapGenerator.DrawBlockList(board.Blocks); pictureBox.ClientSize = new Size(bitmap.Width, bitmap.Height); pictureBox.Image = bitmap; } }
static void Main(string[] args) { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; Console.WriteLine("Specify block size:"); if (!int.TryParse(Console.ReadLine(), out int size)) { return; } Console.WriteLine("Specify block count:"); if (!int.TryParse(Console.ReadLine(), out int count)) { return; } Console.WriteLine("Specify tests count >= 3:"); if (!int.TryParse(Console.ReadLine(), out int testCount)) { return; } Console.WriteLine("Specify result path:"); var path = Console.ReadLine(); testCount = Math.Max(testCount, 3); var testMethods = new List <Function> { Function.Square, Function.FastSquare, Function.Rectangle, Function.FastRectangle }; using var w = new StreamWriter(path); WriteHeaders(w, testMethods); for (int s = 1; s <= size; s++) { Console.WriteLine($"Starting tests for block size {s}"); IncrementalBlockSetGenerator blockSetGenerator = new IncrementalBlockSetGenerator(size, CancellationToken.None); for (int bc = 1; bc <= count; bc++) { var tests = ConductTest(blockSetGenerator, s, bc, testCount, testMethods); foreach (var test in tests) { WriteTest(w, test.blockSize, test.blockCount, test.results); } var analyzed = AnalyseTests(tests, testMethods); w.WriteLine("Means:"); w.Flush(); WriteTest(w, s, bc, analyzed); w.WriteLine(""); w.Flush(); } } }
private void fromFileButton_Click(object sender, System.EventArgs e) { CancelRunningTask(); var token = _tokenSource.Token; if (currentSize != (int)blockSizeBox.Value) { blockSetGenerator = new IncrementalBlockSetGenerator((int)blockSizeBox.Value, token, new Random().Next()); currentSize = (int)blockSizeBox.Value; } OpenFileDialog openFileDialog = new OpenFileDialog(); DialogResult result = openFileDialog.ShowDialog(); // Show the dialog. if (result != DialogResult.OK) { return; } string file = openFileDialog.FileName; try { var lines = File.ReadAllLines(file); for (int i = 0; i < lines.Length;) { List <Block> blocks = new List <Block>(); if (!int.TryParse(lines[i], out int size)) { return; } string alg = lines[i + 1]; string input = lines[i + 2]; var numbers = input.Split(' '); if (numbers.Length == 1) { if (!int.TryParse(input, out int count)) { return; } blocks = new IncrementalBlockSetGenerator(size, token, new Random().Next()).GenerateBlocks(count); } else { switch (size) { case 5: for (var index = 0; index < numbers.Length; index++) { var num = numbers[index]; if (!int.TryParse(num, out int count)) { return; } for (int j = 0; j < count; j++) { blocks.Add(new PredefinedBlockSet(5).Get(index)); } } break; case 6: for (var index = 0; index < numbers.Length; index++) { var num = numbers[index]; if (!int.TryParse(num, out int count)) { return; } for (int j = 0; j < count; j++) { blocks.Add(new PredefinedBlockSet(6).Get(index)); } } break; default: return; } } board.Blocks = blocks; break; } var bitmap = BitmapGenerator.DrawBlockList(board.Blocks); pictureBox.ClientSize = new Size(bitmap.Width, bitmap.Height); pictureBox.Image = bitmap; } catch (IOException) { } }
static int Main(string[] args) { if (args.Length == 0) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } else { var lines = File.ReadAllLines(args[0]); for (int i = 0; i < lines.Length; i += 3) { List <Block> blocks = new List <Block>(); if (!int.TryParse(lines[i], out int size)) { return(1); } string alg = lines[i + 1]; string input = lines[i + 2]; var numbers = input.Split(' '); if (numbers.Length == 1) { if (!int.TryParse(input, out int count)) { return(1); } blocks = new IncrementalBlockSetGenerator(size, CancellationToken.None, new Random().Next()).GenerateBlocks(count); } else { switch (size) { case 5: for (var index = 0; index < numbers.Length; index++) { var num = numbers[index]; if (!int.TryParse(num, out int count)) { return(1); } for (int j = 0; j < count; j++) { blocks.Add(new PredefinedBlockSet(5).Get(index)); } } break; case 6: for (var index = 0; index < numbers.Length; index++) { var num = numbers[index]; if (!int.TryParse(num, out int count)) { return(1); } for (int j = 0; j < count; j++) { blocks.Add(new PredefinedBlockSet(6).Get(index)); } } break; default: return(1); } } Board board = new Board(); board.Blocks = blocks; Stopwatch sw = new Stopwatch(); switch (alg) { case "ok": { Console.WriteLine("Running optimal square algorithm:"); sw.Start(); var result = board.Square(); sw.Stop(); CLISolutionPrinter.PrintSolution(result); Console.WriteLine($"Found square size: {result.GetLength(0)}x{result.GetLength(0)}, time: {sw.ElapsedMilliseconds} ms\n"); break; } case "hk": { Console.WriteLine("Running heuristic square algorithm:"); sw.Start(); var result = board.FastSquare(); sw.Stop(); CLISolutionPrinter.PrintSolution(result); Console.WriteLine($"Found square size: {result.GetLength(0)}x{result.GetLength(0)}, time: {sw.ElapsedMilliseconds} ms\n"); break; } case "op": { Console.WriteLine("Running optimal rectangle algorithm:"); sw.Start(); var result = board.Rectangle(); sw.Stop(); CLISolutionPrinter.PrintSolution(result.Item1); Console.WriteLine($"Found rectangle, cuts: {result.Item2}, time: {sw.ElapsedMilliseconds} ms"); break; } case "hp": { Console.WriteLine("Running heuristic rectangle algorithm:"); sw.Start(); var result = board.FastRectangle(); sw.Stop(); CLISolutionPrinter.PrintSolution(result.Item1); Console.WriteLine($"Found rectangle, cuts: {result.Item2}, time: {sw.ElapsedMilliseconds} ms\n"); break; } default: return(1); } } } return(0); }