Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.60 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace osiuzenet
  6. {
  7.     class Program
  8.     {
  9.         private static Dictionary<char,string> hexToBin = new Dictionary<char, string>{
  10.             {'0',"0000"},
  11.             {'1',"0001"},
  12.             {'2',"0010"},
  13.             {'3',"0011"},
  14.             {'4',"0100"},
  15.             {'5',"0101"},
  16.             {'6',"0110"},
  17.             {'7',"0111"},
  18.             {'8',"1000"},
  19.             {'9',"1001"},
  20.             {'a',"1010"},
  21.             {'b',"1011"},
  22.             {'c',"1100"},
  23.             {'d',"1101"},
  24.             {'e',"1110"},
  25.             {'f',"1111"}
  26.         };
  27.         private static Dictionary<int,char> symbolNames = new Dictionary<int, char>{
  28.             {0,'W'},
  29.             {1,'A'},
  30.             {2,'K'},
  31.             {3,'J'},
  32.             {4,'S'},
  33.             {5,'D'},
  34.         };
  35.         private static List<char> symbols;
  36.         private static int[,] matrix;
  37.         private static List<int[]> visited;
  38.         private static Queue<int[]> neighbours;
  39.         private static int rowNum;
  40.         private static int columnNum;
  41.         static string Decode(string hex){
  42.             StringBuilder s = new StringBuilder();
  43.             foreach(var c in hex){
  44.                 s.Append(hexToBin[c]);
  45.                 //System.Console.WriteLine(hexToBin[c]);
  46.             }
  47.             return s.ToString();
  48.         }
  49.  
  50.         static void ReadMatrix(){
  51.             string s = Console.ReadLine();
  52.             rowNum = int.Parse(s.Split(' ')[0]);
  53.             columnNum = int.Parse(s.Split(' ')[1])*4;
  54.             matrix = new int[rowNum,columnNum];
  55.             for(int i = 0; i<rowNum; i++){
  56.                 string l = Decode(Console.ReadLine());
  57.                 for(int j = 0; j<columnNum; j++){
  58.                     matrix[i,j] = int.Parse(l[j].ToString());
  59.                     //System.Console.Write(matrix[i,j]);
  60.                 }
  61.                 //System.Console.WriteLine();
  62.             }
  63.         }
  64.         static bool Contain(int[] Array){
  65.             bool t = true;
  66.             foreach(var a in neighbours){
  67.                 if(a[0]==Array[0] && a[1]==Array[1]){
  68.                     t = false;
  69.                 }
  70.             }
  71.             foreach(var a in visited){
  72.                 if(a[0]==Array[0] && a[1]==Array[1]){
  73.                     t = false;
  74.                 }
  75.             }
  76.             if(t){
  77.                 return true;
  78.             } else {
  79.                 return false;
  80.             }
  81.         }
  82.         static void DisplayMatrix(){
  83.             for(int i = 0; i<rowNum; i++){
  84.                 for(int j = 0; j<columnNum; j++){
  85.                     System.Console.Write(matrix[i,j]);
  86.                 }
  87.                 System.Console.WriteLine();
  88.             }
  89.         }
  90.         static void SymbolCoordinate(int i, int j, int from){
  91.             int[] coordinateArray = new int[]{i,j};
  92.             if(i<rowNum && i>=0 && j<columnNum && j>=0){
  93.                 if(matrix[i,j]==from && Contain(coordinateArray)){
  94.                     neighbours.Enqueue(new int[]{i,j});
  95.                 }
  96.             }
  97.         }
  98.         static void Symbol(int i, int j, int from, int to){
  99.             int count = 0;
  100.             if(matrix[i,j]==from || matrix[i,j]==0){
  101.                 //valamiért ha nullára érek akkor visszalép és így több jelet számlál de a lyukak száma rendben van
  102.                 visited.Add(new int[]{i,j});
  103.                 matrix[i,j] = to;
  104.                 if(matrix[i+1,j]==0){
  105.                     ProcessMatrix(i+1,j,0,3);
  106.                     count++;
  107.                     System.Console.WriteLine(count);
  108.                 }
  109.                 if(matrix[i-1,j]==0){
  110.                     ProcessMatrix(i-1,j,0,3);
  111.                     count++;
  112.                     System.Console.WriteLine(count);
  113.                 }
  114.                 if(matrix[i,j+1]==0){
  115.                     ProcessMatrix(i,j+1,0,3);
  116.                     count++;
  117.                     System.Console.WriteLine(count);
  118.                 }
  119.                 if(matrix[i,j-1]==0){
  120.                     ProcessMatrix(i,j-1,0,3);
  121.                     count++;
  122.                     System.Console.WriteLine(count);
  123.                 }
  124.                 SymbolCoordinate(i+1,j, from);
  125.                 SymbolCoordinate(i-1,j, from);
  126.                 SymbolCoordinate(i,j+1, from);
  127.                 SymbolCoordinate(i,j-1, from);
  128.             }
  129.             int[] tmp;
  130.             symbols.Add(symbolNames[count]);
  131.             if(neighbours.Count>0){
  132.                 tmp = neighbours.Dequeue();
  133.                 Symbol(tmp[0],tmp[1], from, to);
  134.             }
  135.         }
  136.         static void ProcessCoordinate(int i, int j, int from){
  137.             int[] coordinateArray = new int[]{i,j};
  138.             if(i<rowNum && i>=0 && j<columnNum && j>=0){
  139.                 if(matrix[i,j]==from && Contain(coordinateArray)){
  140.                     neighbours.Enqueue(new int[]{i,j});
  141.                 }
  142.             }
  143.         }
  144.         static void ProcessMatrix(int i, int j, int from, int to){
  145.             if(matrix[i,j]==from){
  146.                 visited.Add(new int[]{i,j});
  147.                 matrix[i,j] = to;
  148.                 ProcessCoordinate(i+1,j, from);
  149.                 ProcessCoordinate(i-1,j, from);
  150.                 ProcessCoordinate(i,j+1, from);
  151.                 ProcessCoordinate(i,j-1, from);
  152.             }
  153.             int[] tmp;
  154.             if(neighbours.Count>0){
  155.                 tmp = neighbours.Dequeue();
  156.                 ProcessMatrix(tmp[0],tmp[1], from, to);
  157.             }
  158.         }
  159.         static void Main(string[] args)
  160.         {
  161.             neighbours = new Queue<int[]>();
  162.             visited = new List<int[]>();
  163.             symbols = new List<char>();
  164.             int ct = 0;
  165.             ReadMatrix();
  166.             DisplayMatrix();
  167.             for(int i = 0; i<rowNum; i++){
  168.                 for(int j = 0; j<columnNum; j++){
  169.                     if(matrix[i,j]==0){
  170.                         ProcessMatrix(i,j,0,2);
  171.                         goto Break;
  172.                     }
  173.                 }
  174.             }
  175.             Break:;
  176.             //DisplayMatrix();
  177.             for(int i = 0; i<rowNum; i++){
  178.                 for(int j = 0; j<columnNum; j++){
  179.                     if(matrix[i,j]==1){
  180.                         Symbol(i,j,1,5);
  181.                         ct++;
  182.                     }
  183.                 }
  184.             }
  185.             System.Console.WriteLine($"Count:{ct}");
  186.             DisplayMatrix();
  187.             /*foreach(var a in symbols){
  188.                 System.Console.WriteLine(a);
  189.             }*/
  190.             //System.Console.WriteLine(count);
  191.         }
  192.     }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement