fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. struct Queen
  6. {
  7. public int X;
  8. public int Y;
  9. public Queen(int x, int y)
  10. {
  11. this.X = x;
  12. this.Y = y;
  13. }
  14. public bool IsMovable(Queen q)
  15. {
  16. return (this.X == q.X) || (this.Y == q.Y) || this.IsDiagonal(q);
  17. }
  18. public bool IsDiagonal(Queen q)
  19. {
  20. var diffX = this.X - q.X;
  21. var diffY = this.Y - q.Y;
  22. return (diffX == diffY || diffX == -diffY);
  23. }
  24. }
  25.  
  26. class Program
  27. {
  28. static void Main()
  29. {
  30. var letters = new string[]
  31. {
  32. "lhikoav",
  33. "rqsczlp",
  34. "uwalnfo",
  35. "tykajeh",
  36. "ahitsyd",
  37. "efoptxn",
  38. "ruzwyve"
  39. };
  40. var result =
  41. from q1 in Enumerable.Range(1, 7).Select(x => new Queen(x, 1))
  42. from q2 in Enumerable.Range(1, 7).Select(x => new Queen(x, 2))
  43. from q3 in new Queen[] {new Queen(3, 3)}
  44. from q4 in Enumerable.Range(1, 7).Select(x => new Queen(x, 4))
  45. from q5 in new Queen[] {new Queen(4, 5)}
  46. from q6 in Enumerable.Range(1, 7).Select(x => new Queen(x, 6))
  47. from q7 in Enumerable.Range(1, 7).Select(x => new Queen(x, 7))
  48. let queens = new Queen[] {q1, q2, q3, q4, q5, q6, q7}
  49. where Combinations(queens).All(t => !t[0].IsMovable(t[1]))
  50. select new string((from q in queens
  51. orderby q.X * q.Y
  52. select letters[q.Y - 1][q.X - 1])
  53. .ToArray());
  54. foreach (var s in result)
  55. Console.WriteLine(s);
  56. }
  57.  
  58. static IEnumerable<T[]> Combinations<T>(IEnumerable<T> source)
  59. {
  60. var list = new List<T>(source);
  61. for (var i = 0; i < list.Count; i++)
  62. for (var j = i + 1; j < list.Count; j++)
  63. yield return new T[] {list[i], list[j]};
  64. }
  65. }
Success #stdin #stdout 0.11s 37392KB
stdin
Standard input is empty
stdout
healthy