Advertisement
jokerbg

Angry Bits solution

Feb 18th, 2014
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.48 KB | None | 0 0
  1. using System;
  2. class AngryBits
  3. {
  4.     public static int[,] matrix = new int[8, 16];
  5.  
  6.     static void PrintMatrix()
  7.     {
  8.         for (int i = 0; i < 8; i++)
  9.         {
  10.             for (int j = 0; j < 16; j++)
  11.             {
  12.                 string print = (j == 7) ? (matrix[i, j] + "|") : (matrix[i, j] + " ");
  13.                 Console.Write(print);
  14.             }
  15.             Console.WriteLine();
  16.         }
  17.         Console.WriteLine();
  18.     }
  19.  
  20.     public static int Shoot(int birdRow, int birdCol)
  21.     {
  22.         int path = 0;
  23.         bool pigFound = false;
  24.         int upDownMark = -1;
  25.  
  26.         while (!pigFound)
  27.         {
  28.             if ((birdRow > 0) || (birdRow == 0 & birdCol == 0))
  29.             {
  30.                 birdRow += upDownMark;
  31.                 birdCol++;
  32.                 path++;
  33.                 if (birdCol > 7 && matrix[birdRow, birdCol] == 1)
  34.                 {
  35.                     pigFound = true;
  36.                     KillPigs(birdRow, birdCol);
  37.                 }
  38.                 else if ((birdCol == 15 && matrix[birdRow, birdCol] == 0) || (birdCol > 7 && birdRow == 7))
  39.                 {
  40.                     break;
  41.                 }
  42.                 else
  43.                 {
  44.                     continue;
  45.                 }
  46.             }
  47.             else
  48.             {
  49.                 upDownMark = 1;
  50.                 birdRow += upDownMark;
  51.                 birdCol++;
  52.                 path++;
  53.                 if (birdCol > 7 && matrix[birdRow, birdCol] == 1)
  54.                 {
  55.                     pigFound = true;
  56.                     KillPigs(birdRow, birdCol);
  57.                 }
  58.                 else if ((birdCol == 15 && matrix[birdRow, birdCol] == 0) || (birdCol > 7 && birdRow == 7))
  59.                 {
  60.                     break;
  61.                 }
  62.                 else
  63.                 {
  64.                     continue;
  65.                 }
  66.             }
  67.         }
  68.         return path;
  69.     }
  70.  
  71.     public static void KillPigs(int birdRow, int birdCol)
  72.     {
  73.         matrix[birdRow, birdCol] = 0;
  74.  
  75.         if (birdRow == 0)
  76.         {
  77.             if (birdCol == 15)
  78.             {
  79.                 matrix[birdRow, birdCol - 1] = 0;
  80.                 matrix[birdRow + 1, birdCol] = 0;
  81.             }
  82.             else if (birdCol == 8)
  83.             {
  84.                 matrix[birdRow, birdCol + 1] = 0;
  85.                 matrix[birdRow + 1, birdCol] = 0;
  86.                 matrix[birdRow + 1, birdCol + 1] = 0;
  87.             }
  88.             else
  89.             {
  90.                 matrix[birdRow, birdCol + 1] = 0;
  91.                 matrix[birdRow, birdCol - 1] = 0;
  92.                 matrix[birdRow + 1, birdCol - 1] = 0;
  93.                 matrix[birdRow + 1, birdCol] = 0;
  94.                 matrix[birdRow + 1, birdCol + 1] = 0;
  95.             }
  96.         }
  97.  
  98.         else if (birdRow == 7)
  99.         {
  100.             if (birdCol == 15)
  101.             {
  102.                 matrix[birdRow, birdCol - 1] = 0;
  103.                 matrix[birdRow - 1, birdCol] = 0;
  104.             }
  105.             else if (birdCol == 8)
  106.             {
  107.                 matrix[birdRow, birdCol + 1] = 0;
  108.                 matrix[birdRow - 1, birdCol] = 0;
  109.                 matrix[birdRow - 1, birdCol + 1] = 0;
  110.             }
  111.             else
  112.             {
  113.                 matrix[birdRow, birdCol + 1] = 0;
  114.                 matrix[birdRow, birdCol - 1] = 0;
  115.                 matrix[birdRow - 1, birdCol - 1] = 0;
  116.                 matrix[birdRow - 1, birdCol] = 0;
  117.                 matrix[birdRow - 1, birdCol + 1] = 0;
  118.             }
  119.         }
  120.  
  121.         else
  122.         {
  123.             if (birdCol == 15)
  124.             {
  125.                 matrix[birdRow + 1, birdCol] = 0;
  126.                 matrix[birdRow + 1, birdCol - 1] = 0;
  127.                 matrix[birdRow, birdCol - 1] = 0;
  128.                 matrix[birdRow - 1, birdCol] = 0;
  129.                 matrix[birdRow - 1, birdCol - 1] = 0;
  130.             }
  131.             else if (birdCol == 8)
  132.             {
  133.                 matrix[birdRow, birdCol + 1] = 0;
  134.                 matrix[birdRow - 1, birdCol] = 0;
  135.                 matrix[birdRow + 1, birdCol] = 0;
  136.                 matrix[birdRow - 1, birdCol + 1] = 0;
  137.                 matrix[birdRow + 1, birdCol + 1] = 0;
  138.             }
  139.             else
  140.             {
  141.                 matrix[birdRow, birdCol + 1] = 0;
  142.                 matrix[birdRow, birdCol - 1] = 0;
  143.                 matrix[birdRow - 1, birdCol - 1] = 0;
  144.                 matrix[birdRow - 1, birdCol] = 0;
  145.                 matrix[birdRow - 1, birdCol + 1] = 0;
  146.                 matrix[birdRow + 1, birdCol - 1] = 0;
  147.                 matrix[birdRow + 1, birdCol] = 0;
  148.                 matrix[birdRow + 1, birdCol + 1] = 0;
  149.             }
  150.         }
  151.     }
  152.  
  153.     public static int CountPigs()
  154.     {
  155.         int pigsCount = 0;
  156.         for (int i = 0; i < 8; i++)
  157.         {
  158.             for (int j = 8; j < 16; j++)
  159.             {
  160.                 pigsCount += matrix[i, j];
  161.             }
  162.         }
  163.         return pigsCount;
  164.     }
  165.  
  166.     static void Main()
  167.     {
  168.         int score = 0;
  169.  
  170.         //read input data
  171.         string[] arr = new string[8];
  172.         for (int i = 0; i < 8; i++)
  173.         {
  174.             arr[i] = Convert.ToString(int.Parse(Console.ReadLine()), 2).PadLeft(16, '0');
  175.             for (int j = 0; j < 16; j++)
  176.             {
  177.                 matrix[i, j] = arr[i][j] - '0';
  178.             }
  179.         }
  180.  
  181.         //PrintMatrix();
  182.         bool foundBird = false;
  183.         int birdRow = 0;
  184.         int birdCol = 0;
  185.  
  186.         for (int j = 7; j >= 0; j--)
  187.         {
  188.             for (int i = 0; i < 8; i++) //find bird to shoot
  189.             {
  190.                 if (matrix[i, j] == 1)
  191.                 {
  192.                     birdRow = i;
  193.                     birdCol = j;
  194.                     foundBird = true;
  195.                     break;
  196.                 }
  197.             }
  198.  
  199.             if (foundBird)
  200.             {
  201.                 //Console.WriteLine("X={0}  Y={1}", birdRow, birdCol); // show coordinates of bird
  202.                 int scorePreshoot = CountPigs();
  203.                 //Console.WriteLine("Current pigs: {0}", CountPigs());
  204.                 score += Shoot(birdRow, birdCol) * (scorePreshoot - CountPigs());
  205.                 foundBird = false;
  206.                 matrix[birdRow, birdCol] = 0;
  207.                 //PrintMatrix();
  208.                 //Console.WriteLine("Current score: {0}", score);
  209.             }
  210.         }
  211.  
  212.         //check and print final result
  213.         string checkWin;
  214.         checkWin = ((CountPigs() == 0) ? "Yes" : "No");
  215.         Console.WriteLine("{0} {1}", score, checkWin);
  216.     }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement