Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Codes_Maker;
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Sochetaniya(int n, int r, out string[] ArrayOfWords)
- {
- int[] x = new int[10000];
- int[] min = new int[10000];
- int[] max = new int[10000];
- int i, j, p, d = 0;
- string s = "";
- ArrayOfWords = new string[1000000];
- for (j = 1; j < r + 1; j++)
- {
- max[j] = n - j + 1;
- min[j] = r - j + 1;
- x[j] = min[j];
- }
- i = 0; p = 0;
- while (i <= r)
- {
- for (j = r; j > 0; j--)
- {
- s = s + Convert.ToString(x[j]);
- }
- ArrayOfWords[d] = s;
- p++; i = 1;
- while ((i <= r) && (x[i] == max[i]))
- {
- i++;
- }
- if (i <= r) x[i]++;
- for (j = i - 1; j >= 0; j--)
- {
- min[j] = x[j + 1] + 1;
- x[j] = min[j];
- }
- s = "";
- d++;
- }
- }
- static public void BornCode(int n, int r, int p, string[] ArrayOfWords, out int[,] Matrix, out int[] Weights)
- {
- Func<int, int> f = null;
- f = x => x > 1 ? x * f(x - 1) : 1;
- Matrix = new int[n - 1, f(n) / f(n - r)];
- int flag1 = 0, flag2 = 0;
- int dlyaL = (f(n) / (f(n - r) * f(r)));
- Weights = new int[n - 1];
- for (int i = 1; i <= n - 1; i++)
- {
- for (int l = 0; l <= dlyaL - 1; l++)
- {
- //charArray = ArrayOfWords[l].ToCharArray(l - 1, r);
- for (int j = 0; j <= r - 1; j++)
- {
- if (Convert.ToByte(ArrayOfWords[l][j] - 48) == i) flag1 = 1;
- if (Convert.ToByte(ArrayOfWords[l][j] - 48) == i + 1) flag2 = 1;
- }
- if (flag1 == flag2)
- {
- Matrix[i - 1, l] = 0; Console.Write(Matrix[i - 1, l]);
- }
- if (flag1 > flag2)
- {
- Matrix[i - 1, l] = 1; Console.Write(Matrix[i - 1, l]); Weights[i - 1]++;
- }
- if (flag1 < flag2)
- {
- Matrix[i - 1, l] = FiniteFieldsMath.inverse(-1, p); Console.Write(Matrix[i - 1, l]); Weights[i - 1]++;
- }
- flag1 = 0;
- flag2 = 0;
- }
- Console.WriteLine();
- }
- }
- static void Main(string[] args)
- {
- Func<int, int> f = null;
- f = x => x > 1 ? x * f(x - 1) : 1;
- int n = 0, r = 0, p = 0;
- n = Convert.ToInt32(Console.ReadLine());
- r = Convert.ToInt32(Console.ReadLine());
- p = Convert.ToInt32(Console.ReadLine());
- int[,] Matrix = new int[n - 1, (f(n) / (f(n - r))) + 10];
- int[] Weights = new int[n - 1];
- string[] ArrayOfWords = new string[1000000];
- Sochetaniya(n, r, out ArrayOfWords);
- BornCode(n, r, p, ArrayOfWords, out Matrix, out Weights);
- var min = Weights.Min();
- Console.WriteLine("d(C) = {0}", min);
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement