fork download
  1. using System;
  2.  
  3. public class PuzzleKata
  4. {
  5. private char[,] papan = new char[17, 17]
  6. {
  7. {'J','Y','B','Y','Q','V','W','G','B','Q','F','D','D','U','L','H','M'},
  8. {'D','G','O','C','G','V','N','K','Z','C','R','U','B','A','O','I','K'},
  9. {'U','G','E','U','H','E','W','J','W','T','O','Y','N','U','M','N','V'},
  10. {'N','H','U','R','D','B','R','J','I','V','U','I','T','P','G','H','W'},
  11. {'I','H','H','O','O','I','E','M','Z','W','T','J','M','D','T','S','V'},
  12. {'T','M','V','O','I','P','O','U','A','N','B','E','D','X','T','W','X'},
  13. {'E','Z','H','B','B','Q','A','U','E','N','W','C','W','C','B','O','N'},
  14. {'D','L','U','S','A','D','F','G','N','R','Y','Y','G','W','W','S','R'},
  15. {'K','H','Y','I','I','R','R','M','N','I','P','H','A','B','R','W','P'},
  16. {'I','T','Q','M','S','A','H','I','M','I','R','U','N','Z','Y','H','S'},
  17. {'N','E','T','H','E','R','L','A','N','D','S','H','U','N','K','E','Z'},
  18. {'G','F','K','L','N','L','A','G','U','T','R','O','P','B','I','U','E'},
  19. {'D','C','P','G','O','G','G','A','R','U','P','U','E','O','P','K','M'},
  20. {'O','J','B','T','D','N','T','A','X','O','B','X','Z','M','J','C','C'},
  21. {'M','J','F','P','N','S','L','L','X','B','V','C','Y','W','T','K','E'},
  22. {'R','X','I','S','I','I','Z','W','A','M','K','S','L','N','H','V','S'},
  23. {'A','O','J','O','A','E','G','T','X','M','C','Z','P','C','I','O','U'}
  24. };
  25.  
  26. // Define arah
  27. private int[,] arah = new int[,] {
  28. { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 1 }, { 1, -1 }, { 1, 0 }, { 1, 1 }
  29. };
  30.  
  31. public List<(int, int)> CariKata(string kata)
  32. {
  33. int n = papan.GetLength(0); // baris
  34. int m = papan.GetLength(1); // kolom
  35. kata = kata.ToUpper();
  36.  
  37. for (int row = 0; row < n; row++)
  38. {
  39. for (int col = 0; col < m; col++)
  40. {
  41. if (papan[row, col] != kata[0]) continue;
  42.  
  43. for (int d = 0; d < 8; d++)
  44. {
  45. int dx = arah[d, 0]; // perubahan baris
  46. int dy = arah[d, 1]; // perubahan kolom
  47. int x = row, y = col;
  48. List<(int, int)> posisi = new List<(int, int)>();
  49.  
  50. int k;
  51. for (k = 0; k < kata.Length; k++)
  52. {
  53. if (x < 0 || x >= n || y < 0 || y >= m || papan[x, y] != kata[k])
  54. break;
  55.  
  56. posisi.Add((y, x)); // Urutan kolom ke baris sesuai contoh dari soal
  57. x += dx;
  58. y += dy;
  59. }
  60.  
  61. if (k == kata.Length)
  62. return posisi;
  63. }
  64. }
  65. }
  66.  
  67. return new List<(int, int)>(); // kata tidak ditemukan
  68. }
  69. }
  70.  
  71. public class Test
  72. {
  73. public static void Main()
  74. {
  75. PuzzleKata puzzle = new PuzzleKata();
  76.  
  77. var kata1 = puzzle.CariKata("germany");
  78. PrintHasil("germany", kata1);
  79.  
  80. var kata2 = puzzle.CariKata("italy");
  81. PrintHasil("italy", kata2);
  82. }
  83.  
  84. public static void PrintHasil(string kata, List<(int, int)> koordinat)
  85. {
  86. Console.WriteLine($"Kata: {kata}");
  87. if (koordinat.Count == 0)
  88. {
  89. Console.WriteLine("[ ]");
  90. }
  91. else
  92. {
  93. foreach (var (col, row) in koordinat)
  94. Console.Write($"[{col},{row}] ");
  95. Console.WriteLine();
  96. }
  97. Console.WriteLine();
  98. }
  99. }
  100.  
Success #stdin #stdout 0.08s 31648KB
stdin
Standard input is empty
stdout
Kata: germany
[4,1] [5,2] [6,3] [7,4] [8,5] [9,6] [10,7] 

Kata: italy
[ ]