Advertisement
Pavle_nis

Untitled

Mar 27th, 2018
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.71 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. using System.Data;
  8.  
  9. namespace ConsoleApp58
  10. {
  11.     class Program
  12.     {
  13.         static List<string> numbersCombinations = new List<string>();
  14.         static List<string> operatorsCombinations = new List<string>();
  15.         static int target = 0;
  16.         static void Main(string[] args)
  17.         {
  18.             var watch = System.Diagnostics.Stopwatch.StartNew();
  19.  
  20.             List<string> nums = new List<string>() { "1", "3", "3", "7", "1", "8" };
  21.             List<string> nums1 = new List<string>() { "0", "1", "2", "3", "4", "5" };
  22.             List<string> operators = new List<string>() { "+", "-", "*", "/" };
  23.             target = 999;
  24.  
  25.             for (int i = 2; i < 7; i++)
  26.             {
  27.                 getCombinations(numbersCombinations, nums1, "", 0, i);
  28.             }
  29.             for (int i = 1; i < 6; i++)
  30.             {
  31.                 getCombinations(operatorsCombinations, operators, "", 0, i);
  32.             }
  33.  
  34.             int x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0;
  35.             StringBuilder expression = new StringBuilder();
  36.             int s = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0;
  37.  
  38.             for (int i = 0; i < operatorsCombinations.Count; i++)
  39.             {
  40.                 string operator1 = operatorsCombinations[i];
  41.  
  42.                 for (int j = 0; j < numbersCombinations.Count; j++)
  43.                 {
  44.                     expression.Clear();
  45.                     x1 = Convert.ToInt32(numbersCombinations[j].Substring(0, 1));
  46.                     x2 = Convert.ToInt32(numbersCombinations[j].Substring(1, 1));
  47.                    
  48.                     if (operator1.Length == 1)
  49.                     {
  50.                         if (j == 30)
  51.                         {
  52.                             break;
  53.                         }
  54.  
  55.                         expression.Append(nums[x1]).Append(operator1[0]).Append(nums[x2]);
  56.  
  57.                         s = calculateExpression(operator1[0].ToString(), int.Parse(nums[x1]), int.Parse(nums[x2]));
  58.  
  59.                         checkExpression(expression.ToString(), s);
  60.                     }
  61.                     else if (operator1.Length == 2)
  62.                     {
  63.                         if (j == 0)
  64.                         {
  65.                             j = 30;
  66.                         }
  67.                         else if (j == 150)
  68.                         {
  69.                             break;
  70.                         }
  71.  
  72.                         x3 = Convert.ToInt32(numbersCombinations[j].Substring(2, 1));
  73.  
  74.                         expression.Append("((").Append(nums[x1]).Append(operator1[0]).Append(nums[x2]).Append(")").Append(operator1[1]).Append(nums[x3]).Append(")");
  75.  
  76.                         s = calculateExpression(operator1[1].ToString(), calculateExpression(operator1[0].ToString(), int.Parse(nums[x1]), int.Parse(nums[x2])), int.Parse(nums[x3]));
  77.  
  78.                         checkExpression(expression.ToString(), s);
  79.                     }
  80.                     else if (operator1.Length == 3)
  81.                     {
  82.                         if (j == 0)
  83.                         {
  84.                             j = 150;
  85.                         }
  86.                         else if (j == 510)
  87.                         {
  88.                             break;
  89.                         }
  90.  
  91.                         x3 = Convert.ToInt32(numbersCombinations[j].Substring(2, 1));
  92.  
  93.                         x4 = Convert.ToInt32(numbersCombinations[j].Substring(3, 1));
  94.  
  95.                         expression.Append("(((").Append(nums[x1]).Append(operator1[0]).Append(nums[x2])
  96.                             .Append(")").Append(operator1[1]).Append(nums[x3]).Append(")").Append(operator1[2])
  97.                             .Append(nums[x4]).Append(")");
  98.  
  99.                         s1 = calculateExpression(operator1[0].ToString(), int.Parse(nums[x1]), int.Parse(nums[x2]));
  100.                         s2 = calculateExpression(operator1[1].ToString(), s1, int.Parse(nums[x3]));
  101.                         s = calculateExpression(operator1[2].ToString(), s2, int.Parse(nums[x4]));
  102.  
  103.                         checkExpression(expression.ToString(), s);
  104.                     }
  105.                     else if (operator1.Length == 4)
  106.                     {
  107.                         if (j == 0)
  108.                         {
  109.                             j = 510;
  110.                         }
  111.                         else if (j == 1230)
  112.                         {
  113.                             break;
  114.                         }
  115.  
  116.                         x3 = Convert.ToInt32(numbersCombinations[j].Substring(2, 1));
  117.  
  118.                         x4 = Convert.ToInt32(numbersCombinations[j].Substring(3, 1));
  119.  
  120.                         x5 = Convert.ToInt32(numbersCombinations[j].Substring(4, 1));
  121.  
  122.                         expression.Append("((((").Append(nums[x1]).Append(operator1[0]).Append(nums[x2])
  123.                             .Append(")").Append(operator1[1]).Append(nums[x3]).Append(")").Append(operator1[2])
  124.                             .Append(nums[x4]).Append(")").Append(operator1[3]).Append(nums[x5]).Append(")");
  125.  
  126.                         s1 = calculateExpression(operator1[0].ToString(), int.Parse(nums[x1]), int.Parse(nums[x2]));
  127.                         s2 = calculateExpression(operator1[1].ToString(), s1, int.Parse(nums[x3]));
  128.                         s3 = calculateExpression(operator1[2].ToString(), s2, int.Parse(nums[x4]));
  129.                         s = calculateExpression(operator1[3].ToString(), s3, int.Parse(nums[x5]));
  130.  
  131.                         checkExpression(expression.ToString(), s);
  132.                     }
  133.                     else if (operator1.Length == 5)
  134.                     {
  135.                         if (j == 0)
  136.                         {
  137.                             j = 1230;
  138.                         }
  139.  
  140.                         x3 = Convert.ToInt32(numbersCombinations[j].Substring(2, 1));
  141.  
  142.                         x4 = Convert.ToInt32(numbersCombinations[j].Substring(3, 1));
  143.  
  144.                         x5 = Convert.ToInt32(numbersCombinations[j].Substring(4, 1));
  145.  
  146.                         x6 = Convert.ToInt32(numbersCombinations[j].Substring(5, 1));
  147.  
  148.                         expression.Append("(((((").Append(nums[x1]).Append(operator1[0]).Append(nums[x2])
  149.                             .Append(")").Append(operator1[1]).Append(nums[x3]).Append(")").Append(operator1[2])
  150.                             .Append(nums[x4]).Append(")").Append(operator1[3]).Append(nums[x5]).Append(")").Append(operator1[4]).Append(nums[x6]).Append(")");
  151.  
  152.                         s1 = calculateExpression(operator1[0].ToString(), int.Parse(nums[x1]), int.Parse(nums[x2]));
  153.                         s2 = calculateExpression(operator1[1].ToString(), s1, int.Parse(nums[x3]));
  154.                         s3 = calculateExpression(operator1[2].ToString(), s2, int.Parse(nums[x4]));
  155.                         s4 = calculateExpression(operator1[3].ToString(), s3, int.Parse(nums[x5]));
  156.                         s = calculateExpression(operator1[4].ToString(), s4, int.Parse(nums[x6]));
  157.  
  158.                         checkExpression(expression.ToString(), s);
  159.                     }
  160.                 }
  161.             }
  162.  
  163.             string resenje = "";
  164.             int minval = Int32.MaxValue;
  165.  
  166.             resenja = resenja.Distinct().ToList();
  167.  
  168.             foreach (var x in resenja)
  169.             {
  170.                 int k1 = int.Parse(x.Substring(x.IndexOf("=") + 1));
  171.                 if (k1 > 0 && Math.Abs(k1 - target) < minval)
  172.                 {
  173.                     minval = Math.Abs(k1 - target);
  174.                     resenje = x;
  175.                 }
  176.             }
  177.  
  178.             watch.Stop();
  179.             var elapsedMs = watch.ElapsedMilliseconds;
  180.             Console.WriteLine(elapsedMs);
  181.             Console.WriteLine(resenje);
  182.  
  183.             Console.ReadKey();
  184.         }
  185.  
  186.         static List<string> resenja = new List<string>();
  187.         static DataTable dt = new DataTable();
  188.         private static void checkExpression(string expression, int value)
  189.         {
  190.             if (value > 0)
  191.             {
  192.                 if (value == target || (value >= target - 100 && value <= target + 100))
  193.                 {
  194.                     resenja.Add(expression + "=" + value.ToString());
  195.                 }
  196.             }
  197.         }
  198.         private static int calculateExpression(string operator1, int num1, int num2)
  199.         {
  200.             switch (operator1)
  201.             {
  202.                 case "+":
  203.                     return num1 + num2;
  204.                 case "-":
  205.                     return num1 - num2;
  206.                 case "*":
  207.                     return num1 * num2;
  208.                 case "/":
  209.                     return num1 / num2;
  210.             }
  211.  
  212.             return 0;
  213.         }
  214.  
  215.         public static void getCombinations(List<string> combinations, List<string> input, String comb, int pos, int length)
  216.         {
  217.             if (pos < length)
  218.             {
  219.                 foreach (string ch in input)
  220.                 {
  221.                     getCombinations(combinations, input, comb + ch, pos + 1, length);
  222.                 }
  223.             }
  224.             else
  225.             {
  226.                 if (!comb.Contains("+") && !comb.Contains("-") && !comb.Contains("*") && !comb.Contains("/"))
  227.                 {
  228.                     if (CheckForDupicate(comb))
  229.                     {
  230.                         combinations.Add(comb);
  231.                     }
  232.                 }
  233.                 else
  234.                 {
  235.                     combinations.Add(comb);
  236.                 }
  237.             }
  238.         }
  239.         public static bool CheckForDupicate(string input)
  240.         {
  241.             return input.Distinct().Count() == input.Length;
  242.         }
  243.     }
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement