Advertisement
bullit3189

Number Wars

Jun 10th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. class NumberWars
  6. {
  7. static void Main()
  8. {
  9. var firstAllCards = new Queue<string>(Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
  10. var secondAllCards = new Queue<string>(Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
  11.  
  12. int turnsCounter = 0;
  13. bool gameOver = false;
  14.  
  15. while (!gameOver && turnsCounter < 1000000 && firstAllCards.Count != 0 && secondAllCards.Count != 0)
  16. {
  17. turnsCounter++;
  18.  
  19. var firstPlayerCard = firstAllCards.Dequeue();
  20. var secondPlayerCard = secondAllCards.Dequeue();
  21.  
  22. int firstValue = GetNumberValue(firstPlayerCard);
  23. int secondValue = GetNumberValue(secondPlayerCard);
  24.  
  25. if (firstValue > secondValue)
  26. {
  27. firstAllCards.Enqueue(firstPlayerCard);
  28. firstAllCards.Enqueue(secondPlayerCard);
  29. }
  30. else if (secondValue > firstValue)
  31. {
  32. secondAllCards.Enqueue(secondPlayerCard);
  33. secondAllCards.Enqueue(firstPlayerCard);
  34. }
  35. else
  36. {
  37. var winnersHand = new List<string> { firstPlayerCard, secondPlayerCard };
  38.  
  39. while (!gameOver)
  40. {
  41. if (firstAllCards.Count < 3 || secondAllCards.Count < 3)
  42. {
  43. gameOver = true;
  44. break;
  45. }
  46.  
  47. int firstSum = 0;
  48. int secondSum = 0;
  49.  
  50. for (int i = 0; i < 3; i++)
  51. {
  52. firstSum += GetCharValue(firstAllCards.Peek());
  53. secondSum += GetCharValue(secondAllCards.Peek());
  54.  
  55. winnersHand.Add(firstAllCards.Dequeue());
  56. winnersHand.Add(secondAllCards.Dequeue());
  57. }
  58.  
  59. if (firstSum > secondSum)
  60. {
  61. foreach (var card in winnersHand.OrderByDescending(x => GetNumberValue(x)).ThenByDescending(x => GetCharValue(x)))
  62. {
  63. firstAllCards.Enqueue(card);
  64. }
  65. break;
  66. }
  67. else if (secondSum > firstSum)
  68. {
  69. foreach (var card in winnersHand.OrderByDescending(x => GetNumberValue(x)).ThenByDescending(x => GetCharValue(x)))
  70. {
  71. secondAllCards.Enqueue(card);
  72. }
  73. break;
  74. }
  75. }
  76. }
  77. }
  78.  
  79. string winner = GetWinner(firstAllCards, secondAllCards);
  80. Console.WriteLine($"{winner} after {turnsCounter} turns");
  81. }
  82.  
  83. private static int GetCharValue(string v)
  84. {
  85. return v.Last();
  86. }
  87.  
  88. private static int GetNumberValue(string firstPlayerCard)
  89. {
  90. return int.Parse(firstPlayerCard.Substring(0, firstPlayerCard.Length - 1));
  91. }
  92.  
  93. private static string GetWinner(Queue<string> firstAllCards, Queue<string> secondAllCards)
  94. {
  95. if (firstAllCards.Count > secondAllCards.Count)
  96. return "First player wins";
  97. if (secondAllCards.Count > firstAllCards.Count)
  98. return "Second player wins";
  99. else
  100. return "Draw";
  101. }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement