Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace osiuzenet
- {
- class Program
- {
- private static Dictionary<char,string> hexToBin = new Dictionary<char, string>{
- {'0',"0000"},
- {'1',"0001"},
- {'2',"0010"},
- {'3',"0011"},
- {'4',"0100"},
- {'5',"0101"},
- {'6',"0110"},
- {'7',"0111"},
- {'8',"1000"},
- {'9',"1001"},
- {'a',"1010"},
- {'b',"1011"},
- {'c',"1100"},
- {'d',"1101"},
- {'e',"1110"},
- {'f',"1111"}
- };
- private static Dictionary<int,char> symbolNames = new Dictionary<int, char>{
- {0,'W'},
- {1,'A'},
- {2,'K'},
- {3,'J'},
- {4,'S'},
- {5,'D'},
- };
- private static List<char> symbols;
- private static int[,] matrix;
- private static List<int[]> visited;
- private static Queue<int[]> neighbours;
- private static Queue<int[]> nullList;
- private static int rowNum;
- private static int columnNum;
- static string Decode(string hex){
- StringBuilder s = new StringBuilder();
- foreach(var c in hex){
- s.Append(hexToBin[c]);
- //System.Console.WriteLine(hexToBin[c]);
- }
- return s.ToString();
- }
- static void ReadMatrix(){
- string s = Console.ReadLine();
- rowNum = int.Parse(s.Split(' ')[0]);
- columnNum = int.Parse(s.Split(' ')[1])*4;
- matrix = new int[rowNum,columnNum];
- for(int i = 0; i<rowNum; i++){
- string l = Decode(Console.ReadLine());
- for(int j = 0; j<columnNum; j++){
- matrix[i,j] = int.Parse(l[j].ToString());
- //System.Console.Write(matrix[i,j]);
- }
- //System.Console.WriteLine();
- }
- }
- static bool Contain(int[] Array){
- bool t = true;
- foreach(var a in neighbours){
- if(a[0]==Array[0] && a[1]==Array[1]){
- t = false;
- }
- }
- foreach(var a in visited){
- if(a[0]==Array[0] && a[1]==Array[1]){
- t = false;
- }
- }
- if(t){
- return true;
- } else {
- return false;
- }
- }
- static void DisplayMatrix(){
- for(int i = 0; i<rowNum; i++){
- for(int j = 0; j<columnNum; j++){
- System.Console.Write(matrix[i,j]);
- }
- System.Console.WriteLine();
- }
- }
- static void SymbolCoordinate(int i, int j, int from){
- int[] coordinateArray = new int[]{i,j};
- if(i<rowNum && i>=0 && j<columnNum && j>=0){
- if(matrix[i,j]==from && Contain(coordinateArray)){
- neighbours.Enqueue(new int[]{i,j});
- }
- }
- }
- static void Symbol(int i, int j, int from, int to){
- int count = 0;
- if(matrix[i,j]==from || matrix[i,j]==0){
- visited.Add(new int[]{i,j});
- matrix[i,j] = to;
- if(matrix[i+1,j]==0){
- nullList.Enqueue(new int[]{i+1,j});
- } else
- if(matrix[i-1,j]==0){
- nullList.Enqueue(new int[]{i-1,j});
- } else
- if(matrix[i,j+1]==0){
- nullList.Enqueue(new int[]{i,j+1});
- } else
- if(matrix[i,j-1]==0){
- nullList.Enqueue(new int[]{i,j-1});
- }
- SymbolCoordinate(i+1,j, from);
- SymbolCoordinate(i-1,j, from);
- SymbolCoordinate(i,j+1, from);
- SymbolCoordinate(i,j-1, from);
- }
- int[] tmp;
- if(neighbours.Count>0){
- tmp = neighbours.Dequeue();
- Symbol(tmp[0],tmp[1], from, to);
- } else {
- foreach(var a in nullList){
- if(matrix[a[0],a[1]]==0){
- ProcessMatrix(a[0],a[1],0,3);
- count++;
- }
- }
- symbols.Add(symbolNames[count]);
- }
- }
- static void ProcessCoordinate(int i, int j, int from){
- int[] coordinateArray = new int[]{i,j};
- if(i<rowNum && i>=0 && j<columnNum && j>=0){
- if(matrix[i,j]==from && Contain(coordinateArray)){
- neighbours.Enqueue(new int[]{i,j});
- }
- }
- }
- static void ProcessMatrix(int i, int j, int from, int to){
- if(matrix[i,j]==from){
- visited.Add(new int[]{i,j});
- matrix[i,j] = to;
- ProcessCoordinate(i+1,j, from);
- ProcessCoordinate(i-1,j, from);
- ProcessCoordinate(i,j+1, from);
- ProcessCoordinate(i,j-1, from);
- }
- int[] tmp;
- if(neighbours.Count>0){
- tmp = neighbours.Dequeue();
- ProcessMatrix(tmp[0],tmp[1], from, to);
- }
- }
- static void Main(string[] args)
- {
- nullList = new Queue<int[]>();
- neighbours = new Queue<int[]>();
- visited = new List<int[]>();
- symbols = new List<char>();
- ReadMatrix();
- //DisplayMatrix();
- //System.Console.WriteLine();
- //System.Console.WriteLine();
- for(int i = 0; i<rowNum; i++){
- for(int j = 0; j<columnNum; j++){
- if(matrix[i,j]==0){
- ProcessMatrix(i,j,0,2);
- goto Break;
- }
- }
- }
- Break:;
- //DisplayMatrix();
- for(int i = 0; i<rowNum; i++){
- for(int j = 0; j<columnNum; j++){
- if(matrix[i,j]==1){
- Symbol(i,j,1,5);
- //DisplayMatrix();
- //System.Console.WriteLine();
- }
- }
- }
- foreach(var a in symbols){
- System.Console.Write(a);
- }
- System.Console.WriteLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement