staafl

Untitled

Jul 13th, 2013
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.28 KB | None | 0 0
  1. using System;
  2.  
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. // top to bottom
  8. uint row0 = 0;
  9. uint row1 = 0;
  10. uint row2 = 0;
  11. uint row3 = 0;
  12. int score = 0;
  13. bool endEverything = false;
  14.  
  15. string numberAsString = null;
  16.  
  17. var inputLines = int.Parse(Console.ReadLine()) / 4;
  18.  
  19. while (inputLines > 0)
  20. {
  21. inputLines -= 1;
  22. #region OUTER WHILE
  23. numberAsString = Console.ReadLine();
  24. if (numberAsString == null)
  25. break;
  26.  
  27. // DDR
  28. string commands =
  29. Console.ReadLine() +
  30. Console.ReadLine() +
  31. Console.ReadLine();
  32.  
  33. // 112
  34. uint number = uint.Parse(numberAsString);
  35.  
  36. // 1110000 -> 111 -> 3
  37. int numberOfBits = Convert.ToString(number, 2)
  38. .Replace("0", "")
  39. .Length;
  40.  
  41. number &= 255;
  42. // number &= (1 << 8) - 1;
  43.  
  44. for (int thisRowNumber = 0; thisRowNumber <= 3; ++thisRowNumber)
  45. {
  46. uint numberBeforeShift = number;
  47. #region INNER FOR
  48. if (thisRowNumber < 3)
  49. {
  50. char command = commands[thisRowNumber];
  51.  
  52. if (command == 'L')
  53. {
  54. // we need to check bit 7
  55. if ((number & (1 << 7)) == 0)
  56. {
  57. number <<= 1;
  58. }
  59. }
  60. else if (command == 'R')
  61. {
  62. // check bit 0
  63. if ((number & 1) == 0)
  64. {
  65. number >>= 1;
  66. }
  67. }
  68.  
  69. }
  70.  
  71. uint nextRow = 0;
  72. uint thisRow = 0;
  73.  
  74. switch (thisRowNumber)
  75. {
  76. case 0: thisRow = row0; nextRow = row1; break;
  77. case 1: thisRow = row1; nextRow = row2; break;
  78. case 2: thisRow = row2; nextRow = row3; break;
  79. }
  80.  
  81. // 0011100000
  82. // 0000110010
  83. if ((nextRow & number) != 0 || thisRowNumber == 3)
  84. {
  85. // todo: calculate score
  86. if ((thisRow | number) == 255)
  87. {
  88. score += numberOfBits * 10;
  89.  
  90. switch (thisRowNumber)
  91. {
  92. case 0:
  93. row0 = 0;
  94. break;
  95. case 1:
  96. row1 = row0;
  97. break;
  98. case 2:
  99. row2 = row1;
  100. row1 = row0;
  101. break;
  102. case 3:
  103. row3 = row2;
  104. row2 = row1;
  105. row1 = row0;
  106. break;
  107. }
  108. }
  109. else
  110. {
  111. switch (thisRowNumber)
  112. {
  113. case 0: row0 |= number; break;
  114. case 1: row1 |= number; break;
  115. case 2: row2 |= number; break;
  116. case 3: row3 |= number; break;
  117. }
  118. score += numberOfBits;
  119. }
  120. break;
  121. }
  122.  
  123. if (row0 != 0)
  124. {
  125. endEverything = true;
  126. break;
  127. }
  128.  
  129. #endregion
  130. }
  131.  
  132. if (endEverything)
  133. break;
  134. #endregion
  135. }
  136.  
  137. Console.WriteLine(score);
  138. }
  139. }
  140.  
  141.  
  142. // snippet: Test
  143. // snippet: Kernighan
  144.  
  145. // * negative numbers
  146. // * custom exceptions
Advertisement
Add Comment
Please, Sign In to add comment