Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- class Program
- {
- static void Main(string[] args)
- {
- // top to bottom
- uint row0 = 0;
- uint row1 = 0;
- uint row2 = 0;
- uint row3 = 0;
- int score = 0;
- bool endEverything = false;
- string numberAsString = null;
- var inputLines = int.Parse(Console.ReadLine()) / 4;
- while (inputLines > 0)
- {
- inputLines -= 1;
- #region OUTER WHILE
- numberAsString = Console.ReadLine();
- if (numberAsString == null)
- break;
- // DDR
- string commands =
- Console.ReadLine() +
- Console.ReadLine() +
- Console.ReadLine();
- // 112
- uint number = uint.Parse(numberAsString);
- // 1110000 -> 111 -> 3
- int numberOfBits = Convert.ToString(number, 2)
- .Replace("0", "")
- .Length;
- number &= 255;
- // number &= (1 << 8) - 1;
- for (int thisRowNumber = 0; thisRowNumber <= 3; ++thisRowNumber)
- {
- uint numberBeforeShift = number;
- #region INNER FOR
- if (thisRowNumber < 3)
- {
- char command = commands[thisRowNumber];
- if (command == 'L')
- {
- // we need to check bit 7
- if ((number & (1 << 7)) == 0)
- {
- number <<= 1;
- }
- }
- else if (command == 'R')
- {
- // check bit 0
- if ((number & 1) == 0)
- {
- number >>= 1;
- }
- }
- }
- uint nextRow = 0;
- uint thisRow = 0;
- switch (thisRowNumber)
- {
- case 0: thisRow = row0; nextRow = row1; break;
- case 1: thisRow = row1; nextRow = row2; break;
- case 2: thisRow = row2; nextRow = row3; break;
- }
- // 0011100000
- // 0000110010
- if ((nextRow & number) != 0 || thisRowNumber == 3)
- {
- // todo: calculate score
- if ((thisRow | number) == 255)
- {
- score += numberOfBits * 10;
- switch (thisRowNumber)
- {
- case 0:
- row0 = 0;
- break;
- case 1:
- row1 = row0;
- break;
- case 2:
- row2 = row1;
- row1 = row0;
- break;
- case 3:
- row3 = row2;
- row2 = row1;
- row1 = row0;
- break;
- }
- }
- else
- {
- switch (thisRowNumber)
- {
- case 0: row0 |= number; break;
- case 1: row1 |= number; break;
- case 2: row2 |= number; break;
- case 3: row3 |= number; break;
- }
- score += numberOfBits;
- }
- break;
- }
- if (row0 != 0)
- {
- endEverything = true;
- break;
- }
- #endregion
- }
- if (endEverything)
- break;
- #endregion
- }
- Console.WriteLine(score);
- }
- }
- // snippet: Test
- // snippet: Kernighan
- // * negative numbers
- // * custom exceptions
Advertisement
Add Comment
Please, Sign In to add comment