Program.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. namespace D08._1
  5. {
  6. class Program
  7. {
  8. static readonly int W = 50, H = 6;
  9. static bool[,] LCD = new bool[H, W];
  10. static void DrawRect(int w, int h)
  11. {
  12. for (var i = 0; i < h; i++)
  13. for (var j = 0; j < w; j++)
  14. LCD[i, j] = true;
  15. }
  16. static void RotateRow(int r, int d)
  17. {
  18. var row = new bool[W];
  19. for (var i = d; i < W + d; i++) row[i % W] = LCD[r, i - d];
  20. for (var i = 0; i < W; i++) LCD[r, i] = row[i];
  21. }
  22. static void RotateColumn(int c, int d)
  23. {
  24. var col = new bool[H];
  25. for (var i = d; i < H + d; i++) col[i % H] = LCD[i - d, c];
  26. for (var i = 0; i < H; i++) LCD[i, c] = col[i];
  27. }
  28. static void Main(string[] args)
  29. {
  30. if (args.Length < 1) throw new ArgumentException();
  31. if (File.Exists(args[0]) == false) throw new FileNotFoundException();
  32. using (var file = File.OpenText(args[0]))
  33. {
  34. while (true)
  35. {
  36. var line = file.ReadLine();
  37. if (line == null) break;
  38. if (line.StartsWith("rect "))
  39. {
  40. var lr = line.Split(" ")[1].Split("x");
  41. DrawRect(int.Parse(lr[0]), int.Parse(lr[1]));
  42. }
  43. if (line.StartsWith("rotate "))
  44. {
  45. var words = line.Split(" ");
  46. var type = words[1];
  47. var rc = words[2].Split("=")[1];
  48. var d = words[4];
  49. if (type == "row") RotateRow(int.Parse(rc), int.Parse(d));
  50. if (type == "column") RotateColumn(int.Parse(rc), int.Parse(d));
  51. }
  52. }
  53. }
  54. int answer = Print();
  55. Console.WriteLine($"The answer is : {answer}");
  56. }
  57. private static int Print()
  58. {
  59. int answer = 0;
  60. for (var i = 0; i < H; i++)
  61. {
  62. for (var j = 0; j < W; j++)
  63. {
  64. if (LCD[i, j]) answer++;
  65. Console.Write(LCD[i, j] ? '#' : '.');
  66. }
  67. Console.WriteLine();
  68. }
  69. Console.WriteLine();
  70. return answer;
  71. }
  72. }
  73. }