public static string AlphanumericCoder(string input) { string BinaryString = " "; while (input.Length >= 2) { var Felement = AllDictionaries.AlphanumericDictionary(input[0]); var Selement = AllDictionaries.AlphanumericDictionary(input[1]); var sum = Felement * 45 + Selement; var buff = Convert.ToString(sum, 2); buff = buff.PadLeft(11, '0'); BinaryString = BinaryString.Insert(BinaryString.Length - 1, buff); input = input.Remove(0, 2); } if (input.Length == 1) { var buff = Convert.ToString(AllDictionaries.AlphanumericDictionary(input[0]), 2); buff = buff.PadLeft(6, '0'); BinaryString = BinaryString.Insert(BinaryString.Length - 1, buff); } BinaryString = BinaryString.Replace(" ", ""); return(BinaryString); }
static string LastAlgorithm(string data, int correctionLevel, int version)// версия минус один { var data2 = data; string[] CountOfBlocks = File.ReadLines("versionsBlocks.txt").ElementAt(correctionLevel - 1).Split(); var NumberOfBlocks = int.Parse(CountOfBlocks[version]); string[] CountOfCorrectionBytes = File.ReadLines("NumberOfCorrectionBytersPerBlock.txt").ElementAt(correctionLevel - 1).Split(); var NumberOfCorrectionBytes = int.Parse(CountOfCorrectionBytes[version]); string[,] ArrayCorrectionBytes = new string[NumberOfBlocks, NumberOfCorrectionBytes]; string[,] info; if (NumberOfBlocks == 1) { info = new string[NumberOfBlocks, data.Length / 8]; } else { info = new string[NumberOfBlocks, (data.IndexOf(' ') + 8) / 8]; } var nb = 0; for (var i = 0; i < NumberOfBlocks; i++) { string block; if (data2.IndexOf(' ') == -1) { block = data2; } else { block = data2.Remove(data2.IndexOf(' ')); } int[] bytes = new int[block.Length / 8]; var j = 0; while (block.Length != 0) { if (block.Length == 8) { bytes[j] = Convert.ToInt32(block, 2); } else { bytes[j] = Convert.ToInt32(block.Remove(8), 2); } block = block.Remove(0, 8); j++; } var g = NumberOfCorrectionBytes; if (bytes.Length > NumberOfCorrectionBytes) { g = bytes.Length; } int[] BArray = new int[g]; for (j = 0; j < bytes.Length; j++) { BArray[j] = bytes[j]; } int[] arrayOfCorrectionBytes = AllDictionaries.PolynomialDict(NumberOfCorrectionBytes); //foreach (var item in arrayOfCorrectionBytes) // Console.Write(item + " "); // Console.WriteLine(); // foreach (var item in BArray) // Console.Write(item + " "); // Console.WriteLine(); for (int h = 0; h < bytes.Length; h++) { int firstItem; if (BArray[0] == 255) { firstItem = int.Parse(File.ReadLines("ReverseTable.txt").ElementAt(1)); } else { firstItem = int.Parse(File.ReadLines("ReverseTable.txt").ElementAt(BArray[0])); } for (int b = 0; b < g - 1; b++) { BArray[b] = BArray[b + 1]; } BArray[g - 1] = 0; if (firstItem == -1) { continue; } // foreach (var item in BArray) // Console.Write(item + " "); // Console.WriteLine(firstIte var B = 0; for (int b = 0; b < NumberOfCorrectionBytes; b++) { B = arrayOfCorrectionBytes[b] + firstItem; if (B > 254) { B = B % 255; } B = int.Parse(File.ReadLines("Table.txt").ElementAt(B)); B = B ^ BArray[b]; BArray[b] = B; //if (arrayOfCorrectionBytes[b] == 0) // arrayOfCorrectionBytes[b] = 255; // Console.WriteLine(arrayOfCorrectionBytes[b] + " "); //Console.WriteLine(arrayOfCorrectionBytes[b]); //arrayOfCorrectionBytes[b] = int.Parse(File.ReadLines("Table.txt").ElementAt(arrayOfCorrectionBytes[b])); //Console.WriteLine(arrayOfCorrectionBytes[b]); //Console.WriteLine($"{arrayOfCorrectionBytes[b]} {BArray[b]} {arrayOfCorrectionBytes[b] ^ BArray[b]} "); //arrayOfCorrectionBytes[b] = arrayOfCorrectionBytes[b] ^ BArray[b]; //Console.WriteLine(arrayOfCorrectionBytes[b]); } } for (var item = 0; item < NumberOfCorrectionBytes; item++) { var f = Convert.ToString(BArray[item], 2); f = f.PadLeft(8, '0'); ArrayCorrectionBytes[nb, item] = f; } //for (var item = 0; item < NumberOfCorrectionBytes; item++) // Console.WriteLine(ArrayCorrectionBytes[nb, item]); data2 = data2.Remove(0, data2.IndexOf(' ') + 1); nb++; } data2 = data; data = data.Insert(data.Length, " "); for (var i = 0; i < NumberOfBlocks; i++) { if (data[0] == ' ') { data = data.Remove(0, 1); } var t = data.IndexOf(' '); for (var j = 0; j < t / 8; j++) { if (data[0] == ' ') { data = data.Remove(0, 1); break; } info[i, j] = data.Remove(8, data.Length - 8); data = data.Remove(0, 8); //Console.WriteLine(); //Console.Write(info[i, j] + " "); } //Console.WriteLine(); } var data3 = ""; //Console.WriteLine(); for (var i = 0; i < info.GetLength(1); i++) { for (var j = 0; j < info.GetLength(0); j++) { if (info[j, i] == null) { continue; } data3 += info[j, i]; } } for (var i = 0; i < ArrayCorrectionBytes.GetLength(1); i++) { for (var j = 0; j < ArrayCorrectionBytes.GetLength(0); j++) { data3 += ArrayCorrectionBytes[j, i]; } } return(data3); }
static string GenerateMatrix(int version, int correctionLevel, string data) { string d = ""; var size = AllDictionaries.SizeDictionary(version - 1); int[,] matrix1 = new int[size, size]; int[,] searchPatterns = { { 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 1, 1, 0, 1 }, { 1, 0, 1, 1, 1, 0, 1 }, { 1, 0, 1, 1, 1, 0, 1 }, { 1, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1 } }; int[,] alignmentPatterns = { { 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 1, 0, 1 }, { 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1 } }; for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { matrix1[i, j] = searchPatterns[i, j]; } } for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { matrix1[i + size - 7, j] = searchPatterns[i, j]; } } for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { matrix1[i, j + size - 7] = searchPatterns[i, j]; } } if (version == 1) { } else if (version < 7) { var alignmentPatternspos = int.Parse(File.ReadLines("alignmentPatternsPos.txt").ElementAt(version - 1)); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { matrix1[i + alignmentPatternspos - 2, j + alignmentPatternspos - 2] = alignmentPatterns[i, j]; } } } else { string[] alignmentPatternspos = File.ReadLines("alignmentPatternsPos.txt").ElementAt(version - 1).Split(); for (int i = 0; i < alignmentPatternspos.Length; i++) { for (int j = 0; j < alignmentPatternspos.Length; j++) { if ((i == 0 && j == alignmentPatternspos.Length - 1) || (i == 0 && j == 0) || (j == 0 && i == alignmentPatternspos.Length - 1)) { continue; } else { int X = int.Parse(alignmentPatternspos[j]); int Y = int.Parse(alignmentPatternspos[i]); int check = 0; for (int k = 0; k < 5; k++) { for (int g = 0; g < 5; g++) { if (matrix1[k + X - 2, g + Y - 2] == 1) { check = 1; break; } matrix1[k + X - 2, g + Y - 2] = alignmentPatterns[k, g]; } if (check == 1) { break; } } } } } char[] versionCode = File.ReadLines("versionCode.txt").ElementAt(version - 1).ToCharArray(); for (var i = 0; i < 3; i++) { for (var j = 0; j < 6; j++) { if (Convert.ToInt32(versionCode[6 * i + j]) == 48) { matrix1[size - 11 + i, j] = 0; matrix1[j, size - 11 + i] = 0; } else { matrix1[size - 11 + i, j] = 1; matrix1[j, size - 11 + i] = 1; } } } } int l = 2; for (int i = 7; i < size - 7; i++) { if (l % 2 == 0) { matrix1[i, 6] = 0; } else { matrix1[i, 6] = 1; } l++; } for (int i = 8; i < size - 7; i++) { if (l % 2 == 0) { matrix1[6, i] = 0; } else { matrix1[6, i] = 1; } l++; } matrix1[8, size - 8] = 1; int[,] matrixResult = new int[size, size]; int h; int gf; for (var maskCount = 0; maskCount <= 7; maskCount++) // data { h = 0; gf = 1; int[,] matrix = new int[size, size]; Array.Copy(matrix1, matrix, size * size); for (var p = 0; p < 2; p++) { for (var i = size - 1; i > 8; i--) { if (matrix[size - gf, i] == 1) { i -= 5; } matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount); h++; matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); h++; } gf += 2; for (var i = 9; i < size; i++) { if (matrix[size - gf, i] == 1) { i += 5; } matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount); h++; matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); h++; } gf += 2; } for (var j = 0; j < (size - 17) / 4; j++) { for (var i = size - 1; i >= 0; i--) { if (i == 6) { i -= 1; } if (version > 6 && i == 5 && gf == 9) { break; } if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 0) { matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); h++; } else { if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 1) { i -= 5; } matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount); h++; matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); h++; } } gf += 2; for (var i = 0; i < size; i++) { if (version > 6 && i < 6 && gf == 11) { matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); h++; continue; } if (i == 6) { i += 1; } if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 0) { matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); h++; } else { if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 1) { i += 5; } matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount); h++; matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); h++; } } gf += 2; } for (var i = size - 9; i > 8; i--) { if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 1) { i -= 5; } matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount); h++; matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); h++; } gf += 3; bool ch = false; for (var p = 0; p < 2; p++) { if (ch) { break; } for (var i = 9; i < size - 8; i++) { if (version > 6 && i >= size - 11) { break; } if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 1) { i += 5; } matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount); if (h == data.Length - 1) { ch = true; break; } h++; matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); if (h == data.Length - 1) { ch = true; break; } h++; } gf += 2; if (ch) { break; } for (var i = size - 9; i > 8; i--) { if (version > 6 && i >= size - 11) { continue; } matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount); if (h == data.Length - 1) { ch = true; break; } h++; matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount); if (h == data.Length - 1) { ch = true; break; } h++; } gf += 2; } matrix = CodeMask(matrix, maskCount, correctionLevel); if (Points(matrixResult) > Points(matrix)) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { matrixResult[i, j] = matrix[i, j]; } } } ////Points(matrix); } for (int i = 0; i < 4; i++) { for (int j = 0; j < size + 8; j++) { Console.Write("██"); } Console.WriteLine(); } for (int i = 0; i < size; i++) { Console.Write("████████"); for (int j = 0; j < size; j++) { if (matrixResult[j, i] == 0) { Console.Write("██"); } else { Console.Write(" "); } } Console.Write("████████"); Console.WriteLine(); } for (int i = 0; i < 4; i++) { for (int j = 0; j < size + 8; j++) { Console.Write("██"); } Console.WriteLine(); } //matrix = matrix. return(d); }