Advertisement
Infiniti_Inter

Gen v.3.0

Apr 22nd, 2022
778
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.97 KB | None | 0 0
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Threading;
  4.  
  5.  
  6. namespace serialize
  7. {
  8.  
  9.  
  10.     class Generator
  11.     {
  12.  
  13.  
  14.         public (int, int, int, int) GetMod(int diff)
  15.         {
  16.             int mod1 = 1;// +-
  17.             int mod2 = 1;// +-
  18.             int mod3 = 1;// */
  19.             int mod4 = 1;// */
  20.  
  21.             if (diff == 0)//только сумма
  22.             {
  23.                 mod1 = 9;
  24.                 mod2 = 9;
  25.             }
  26.             if (diff == 1)// сумма & разность
  27.             {
  28.                 mod1 = 11;
  29.                 mod2 = 11;
  30.             }
  31.             if (diff == 2)// сумма & разность & произведение
  32.             {
  33.                 mod1 = 10;// +-
  34.                 mod2 = 10;// +-
  35.                 mod3 = 9;// */
  36.                 mod4 = 9;// */
  37.             }
  38.             if (diff == 3)// сумма & разность & произведение
  39.             {
  40.                 mod1 = 19;// +-
  41.                 mod2 = 19;// +-
  42.                 mod3 = 9;// */
  43.                 mod4 = 9;// */
  44.             }
  45.             if (diff > 3)
  46.             {
  47.                 mod1 = 20 + (diff - 2) * (diff - 2);
  48.                 mod2 = 20 + (diff - 2) * (diff - 2);
  49.                 mod3 = 10 + (diff - 2) * 2;
  50.                 mod4 = 10 + (diff - 2) * 2;
  51.             }
  52.  
  53.             return (mod1, mod2, mod3, mod4);
  54.         }
  55.  
  56.         public static char GetSign(int diff = 0)
  57.         {
  58.  
  59.             Random rnd = new Random();
  60.             int l = rnd.Next();
  61.             Thread.Sleep(5);
  62.             int r = rnd.Next();
  63.             int tmp = rnd.Next(Math.Min(l, r), Math.Max(l, r)) % 4;
  64.             char result = '.';
  65.             if (diff == 0)
  66.             {
  67.                 tmp = 0;
  68.             }
  69.  
  70.             if (diff == 1)
  71.             {
  72.                 while (tmp > 1)
  73.                 { tmp = rnd.Next() % 4; }
  74.             }
  75.             if (diff == 2)
  76.             {
  77.                 while (tmp > 2)
  78.                 { tmp = rnd.Next() % 4; }
  79.             }
  80.  
  81.             switch (tmp)
  82.             {
  83.                 case (0):
  84.                     result = '+';
  85.                     break;
  86.                 case (1):
  87.                     result = '-';
  88.                     break;
  89.                 case (2):
  90.                     result = '*';
  91.                     break;
  92.                 case (3):
  93.                     result = '/';
  94.                     break;
  95.                 default:
  96.                     break;
  97.             }
  98.             return result;
  99.         }
  100.  
  101.         public (int, int) GetPair(int mod1, int mod2)
  102.         {
  103.  
  104.             Random rnd = new Random();
  105.             int res1, res2;
  106.             res1 = (rnd.Next() % mod1) + 1;
  107.             Thread.Sleep(10);
  108.             res2 = (rnd.Next() % mod2) + 1;
  109.             return (res1, res2);
  110.         }
  111.  
  112.  
  113.  
  114.         public (string, char, string, int) Build(char Sign, int diff)
  115.         // first sign second result
  116.         {
  117.             (string, char, string, int) result;
  118.             result.Item1 = "";
  119.             result.Item2 = '.';
  120.             result.Item3 = "";
  121.             result.Item4 = 0;
  122.  
  123.             var MOD = GetMod(diff);
  124.  
  125.             if (Sign == '+')
  126.             {
  127.                 do
  128.                 {
  129.                     (int, int) Expression = GetPair(MOD.Item1, MOD.Item2);
  130.                     result.Item1 = Expression.Item1.ToString();
  131.                     result.Item2 = Sign;
  132.                     result.Item3 = Expression.Item2.ToString();
  133.                     result.Item4 = Expression.Item1 + Expression.Item2;
  134.                 } while (diff > 2 && result.Item4 < (diff - 1) * 10);
  135.             }
  136.             else
  137.             if (Sign == '-')
  138.             {
  139.                 (int, int) Expression;
  140.                 do
  141.                 {
  142.                     Expression = GetPair(MOD.Item1, MOD.Item2);
  143.                     if (Expression.Item1 < Expression.Item2)
  144.                     {
  145.                         int a = Expression.Item1;
  146.                         Expression.Item1 = Expression.Item2;
  147.                         Expression.Item2 = a;
  148.                     }
  149.                 } while (diff > 1 && Expression.Item1 < 3 * (diff));
  150.  
  151.                 result.Item1 = Expression.Item1.ToString();
  152.                 result.Item2 = Sign;
  153.                 result.Item3 = Expression.Item2.ToString();
  154.                 result.Item4 = Expression.Item1 - Expression.Item2;
  155.  
  156.             }
  157.             else
  158.             if (Sign == '/')
  159.             {
  160.                 (int, int) Expression = GetPair(MOD.Item3, MOD.Item4);
  161.                 Expression.Item1 = Expression.Item2 * Expression.Item1;
  162.                 result.Item1 = Expression.Item1.ToString();
  163.                 result.Item2 = Sign;
  164.                 result.Item3 = Expression.Item2.ToString();
  165.                 result.Item4 = Expression.Item1 / Expression.Item2;
  166.             }
  167.             else
  168.             {
  169.                 (int, int) Expression = GetPair(MOD.Item3, MOD.Item4);
  170.                 if (Expression.Item1 == 1)
  171.                     Expression.Item1++;
  172.                 if (Expression.Item2 == 1)
  173.                     Expression.Item2++;
  174.                 result.Item1 = Expression.Item1.ToString();
  175.                 result.Item2 = Sign;
  176.                 result.Item3 = Expression.Item2.ToString();
  177.                 result.Item4 = Expression.Item1 * Expression.Item2;
  178.             }
  179.  
  180.             return result;
  181.         }
  182.  
  183.  
  184.         static void Main(string[] args)
  185.         {
  186.             int diff = 8;
  187.             Generator abs = new Generator();
  188.             //for (diff = 0; diff < 10; ++diff)
  189.             {
  190.                 Console.WriteLine();
  191.                 Console.WriteLine();
  192.                 for (int i = 0; i < 10; ++i)
  193.                 {
  194.                    
  195.                     var a = abs.Build(GetSign(diff), diff);
  196.                     Thread.Sleep(100);
  197.                  
  198.  
  199.                     Console.WriteLine(a);
  200.  
  201.  
  202.  
  203.  
  204.                 }
  205.  
  206.             }
  207.         }
  208.  
  209.     }
  210. }
  211.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement