public void Translate() { List <long> dataSet = new List <long>(); for (int i = 0; i < (int)(this.text.Count / this.height); i++) { string[] subDigi = new string[this.height]; for (int j = 0; j < this.height; j++) { subDigi[j] = this.text[i * this.height + j]; } dataSet.Add(MayaDigi.Recognize(subDigi)); } // long result = 0; for (int i = dataSet.Count - 1; i >= 0; i--) { long d = dataSet[i]; if (dataSet.Count - 1 - i == 0) { result = result + d; } else { int pow = 1; for (int j = 0; j < dataSet.Count - 1 - i; j++) { pow = 20 * pow; } result = result + pow * d; } } this.digi = result; }
public MayaDigi MakeMayaDigi(string[] symbol) { MayaDigi md = new MayaDigi(this.width, this.height); foreach (string d in symbol) { md.AddSymbol(d); } return(md); }
public void TestCase05() { MayaCal mc = new MayaCal(4, 4); string line = ".oo.o...oo..ooo.oooo....o...oo..ooo.oooo....o...oo..ooo.oooo....o...oo..ooo.oooo"; mc.Init(line); line = "o..o................____________________________________________________________"; mc.Init(line); line = ".oo.....................................________________________________________"; mc.Init(line); line = "............................................................____________________"; mc.Init(line); string[] d1 = new string[8]; d1[0] = "o..."; d1[1] = "____"; d1[2] = "...."; d1[3] = "...."; d1[4] = "ooo."; d1[5] = "...."; d1[6] = "...."; d1[7] = "...."; MayaDigi md1 = mc.MakeMayaDigi(d1); md1.digi = mc.Recognize(md1); string[] d2 = new string[4]; d2[0] = "oo.."; d2[1] = "____"; d2[2] = "...."; d2[3] = "...."; MayaDigi md2 = mc.MakeMayaDigi(d2); md2.digi = mc.Recognize(md2); string op = "-"; string[] result = mc.Caculate(md1, md2, op); StringBuilder answer = new StringBuilder(); foreach (string d in result) { answer.Append(d); } StringBuilder sb = new StringBuilder(); sb.Append("....").Append("____") .Append("....").Append("...."); sb.Append("o...").Append("____") .Append("____").Append("____"); Assert.AreEqual(sb.ToString(), answer.ToString()); }
public string[] Caculate(MayaDigi d1, MayaDigi d2, string op) { long result = 0; switch (op) { case "+": result = d1.digi + d2.digi; break; case "-": result = d1.digi - d2.digi; break; case "*": result = d1.digi * d2.digi; break; case "/": result = (int)(d1.digi / d2.digi); break; }//switch List <long> answer = new List <long>(); long quotient = result; if (quotient > 20) { while (quotient > 20) { answer.Add(quotient % 20); quotient = quotient / 20; } answer.Add(quotient % 20); } else { answer.Add(result); } string[] output = new string[answer.Count * this.height]; // for (int i = answer.Count - 1; i >= 0; i--) { long digi = answer[i]; for (int j = 0; j < this.height; j++) { output[(answer.Count - i - 1) * this.height + j] = MayaDigi.mDigis[(int)digi].text[j]; } } return(output); }
public bool isSame(MayaDigi target) { bool result = true; for (int i = 0; i < this.height; i++) { if (this.text[i] != target.text[i]) { result = false; break; } } return(result); }
public MayaCal(int width, int height) { this.width = width; this.height = height; MayaDigi.mDigis.Clear(); for (int i = 0; i < 20; i++) { MayaDigi md = new MayaDigi(width, height); md.digi = i; MayaDigi.mDigis.Add(md); } }
public void Init(String data) { MayaDigi md = null; StringBuilder sb = new StringBuilder(); for (int i = 1; i <= data.ToCharArray().Length; i++) { sb.Append(data.ToCharArray()[i - 1]); if (i % this.width == 0) { md = MayaDigi.mDigis[(int)(i / this.width) - 1]; md.AddSymbol(sb.ToString()); sb.Clear(); } } }
public void TestCase11() { MayaCal mc = new MayaCal(1, 1); string line = "0123456789ABCDEFGHIJ"; mc.Init(line); string[] d1 = new string[4]; d1[0] = "1"; d1[1] = "0"; d1[2] = "0"; d1[3] = "G"; MayaDigi md1 = mc.MakeMayaDigi(d1); md1.digi = mc.Recognize(md1); string[] d2 = new string[2]; d2[0] = "2"; d2[1] = "2"; MayaDigi md2 = mc.MakeMayaDigi(d2); md2.digi = mc.Recognize(md2); string op = "*"; string[] result = mc.Caculate(md1, md2, op); StringBuilder answer = new StringBuilder(); foreach (string d in result) { answer.Append(d); } StringBuilder sb = new StringBuilder(); sb.Append("2").Append("2").Append("1").Append("D").Append("C"); Assert.AreEqual(sb.ToString(), answer.ToString()); }
public void TestCase12() { MayaCal mc = new MayaCal(11, 11); string line = "....................................................................................................................................................................................XX........XX.XX....XX.XX.XX..XX.XX.XX.XX"; mc.Init(line); line = ".............................................................................................................................XX........XX.XX....XX.XX.XX..XX.XX.XX.XXXXXXXXXXXXX....XX........XX.XX....XX.XX.XX..XX.XX.XX.XX"; mc.Init(line); line = "....XXXX.....................................................................................................................XX........XX.XX....XX.XX.XX..XX.XX.XX.XXXXXXXXXXXXX............................................"; mc.Init(line); line = "...X....X.............................................................XX........XX.XX....XX.XX.XX..XX.XX.XX.XXXXXXXXXXXXX.......................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; mc.Init(line); line = "..X......X.....XX........XX.XX.....XX.XX.XX.XX.XX.XX.XXXXXXXXXXXXX....XX........XX.XX....XX.XX.XX..XX.XX.XX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; mc.Init(line); line = ".X.X....X.X....XX........XX.XX.....XX.XX.XX.XX.XX.XX.XXXXXXXXXXXXX.......................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................................"; mc.Init(line); line = ".XXXXXXXXXX.......................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; mc.Init(line); line = ".X.X....X.X.......................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; mc.Init(line); line = "..X......X...............................................................................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................................"; mc.Init(line); line = "...X....X................................................................................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; mc.Init(line); line = "....XXXX........................................................................................................................................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; mc.Init(line); string[] d1 = new string[33]; d1[0] = "..........."; d1[1] = "..........."; d1[2] = "..........."; d1[3] = "..........."; d1[4] = "XXXXXXXXXXX"; d1[5] = "XXXXXXXXXXX"; d1[6] = "..........."; d1[7] = "..........."; d1[8] = "..........."; d1[9] = "..........."; d1[10] = "..........."; d1[11] = "..........."; d1[12] = "..........."; d1[13] = "....XXXX..."; d1[14] = "...X....X.."; d1[15] = "..X......X."; d1[16] = ".X.X....X.X"; d1[17] = ".XXXXXXXXXX"; d1[18] = ".X.X....X.X"; d1[19] = "..X......X."; d1[20] = "...X....X.."; d1[21] = "....XXXX..."; d1[22] = "..........."; d1[23] = "...XX.XX..."; d1[24] = "...XX.XX..."; d1[25] = "..........."; d1[26] = "XXXXXXXXXXX"; d1[27] = "XXXXXXXXXXX"; d1[28] = "..........."; d1[29] = "..........."; d1[30] = "XXXXXXXXXXX"; d1[31] = "XXXXXXXXXXX"; d1[32] = "..........."; MayaDigi md1 = mc.MakeMayaDigi(d1); md1.digi = mc.Recognize(md1); string[] d2 = new string[44]; d2[0] = "..........."; d2[1] = "..........."; d2[2] = "..........."; d2[3] = "..........."; d2[4] = "...XX.XX..."; d2[5] = "...XX.XX..."; d2[6] = "..........."; d2[7] = "..........."; d2[8] = "..........."; d2[9] = "..........."; d2[10] = "..........."; d2[11] = "..........."; d2[12] = "...XX.XX..."; d2[13] = "...XX.XX..."; d2[14] = "..........."; d2[15] = "XXXXXXXXXXX"; d2[16] = "XXXXXXXXXXX"; d2[17] = "..........."; d2[18] = "..........."; d2[19] = "XXXXXXXXXXX"; d2[20] = "XXXXXXXXXXX"; d2[21] = "..........."; d2[22] = "....XX....."; d2[23] = "....XX....."; d2[24] = "..........."; d2[25] = "XXXXXXXXXXX"; d2[26] = "XXXXXXXXXXX"; d2[27] = "..........."; d2[28] = "XXXXXXXXXXX"; d2[29] = "XXXXXXXXXXX"; d2[30] = "..........."; d2[31] = "XXXXXXXXXXX"; d2[32] = "XXXXXXXXXXX"; d2[33] = "..........."; d2[34] = "..........."; d2[35] = "....XXXX..."; d2[36] = "...X....X.."; d2[37] = "..X......X."; d2[38] = ".X.X....X.X"; d2[39] = ".XXXXXXXXXX"; d2[40] = ".X.X....X.X"; d2[41] = "..X......X."; d2[42] = "...X....X.."; d2[43] = "....XXXX..."; MayaDigi md2 = mc.MakeMayaDigi(d2); md2.digi = mc.Recognize(md2); string op = "*"; string[] result = mc.Caculate(md1, md2, op); StringBuilder answer = new StringBuilder(); foreach (string d in result) { answer.Append(d); } StringBuilder sb = new StringBuilder(); sb.Append("...........").Append(".XX.XX.XX.."). Append(".XX.XX.XX.."). Append("..........."). Append("XXXXXXXXXXX"). Append("XXXXXXXXXXX"). Append("..........."). Append("..........."). Append("XXXXXXXXXXX"). Append("XXXXXXXXXXX"). Append("..........."). Append("..........."). Append("..........."). Append("..........."). Append("..........."). Append("XXXXXXXXXXX"). Append("XXXXXXXXXXX"). Append("..........."). Append("..........."). Append("..........."). Append("..........."). Append("..........."). Append("..........."). Append("....XX....."). Append("....XX....."). Append("..........."). Append("XXXXXXXXXXX"). Append("XXXXXXXXXXX"). Append("..........."). Append("...........") .Append("XXXXXXXXXXX") .Append("XXXXXXXXXXX") .Append("...........") .Append("...........") .Append(".XX.XX.XX..") .Append(".XX.XX.XX..") .Append("...........") .Append("XXXXXXXXXXX") .Append("XXXXXXXXXXX") .Append("...........") .Append("...........") .Append("XXXXXXXXXXX") .Append("XXXXXXXXXXX") .Append("...........") .Append("...........") .Append("...XX.XX...") .Append("...XX.XX...") .Append("...........") .Append("XXXXXXXXXXX") .Append("XXXXXXXXXXX") .Append("...........") .Append("...........") .Append("XXXXXXXXXXX") .Append("XXXXXXXXXXX") .Append("...........") .Append("...........") .Append("...........") .Append("....XXXX...") .Append("...X....X..") .Append("..X......X.") .Append(".X.X....X.X") .Append(".XXXXXXXXXX") .Append(".X.X....X.X") .Append("..X......X.") .Append("...X....X..") .Append("....XXXX..."); Assert.AreEqual(sb.ToString(), answer.ToString()); }
public long Recognize(MayaDigi md) { md.Translate(); return(md.digi); }