simonradev

NumberWars

Jun 27th, 2017
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.69 KB | None | 0 0
  1. namespace NumberWars
  2. {
  3.     using System;
  4.     using System.Collections.Generic;
  5.     using System.Linq;
  6.  
  7.     public class StartUp
  8.     {
  9.         public static void Main()
  10.         {
  11.             Queue<string> firstPlayer = new Queue<string>(SplitConsoleInput());
  12.             Queue<string> secondPlayer = new Queue<string>(SplitConsoleInput());
  13.  
  14.             string result = string.Empty;
  15.            
  16.             int currentTurn = 0;
  17.             while (firstPlayer.Count > 0 && secondPlayer.Count > 0 && currentTurn != 1000000)
  18.             {
  19.                 string cardOfLeftPlayer = firstPlayer.Dequeue();
  20.                 string cardOfRightPlayer = secondPlayer.Dequeue();
  21.  
  22.                 int powerOfLeftCard = GetNumberOfCard(cardOfLeftPlayer);
  23.                 int powerOfRightCard = GetNumberOfCard(cardOfRightPlayer);
  24.                 if (powerOfLeftCard > powerOfRightCard)
  25.                 {
  26.                     //left player gets the cards
  27.                     firstPlayer.Enqueue(cardOfLeftPlayer);
  28.                     firstPlayer.Enqueue(cardOfRightPlayer);
  29.                 }
  30.                 else if (powerOfLeftCard < powerOfRightCard)
  31.                 {
  32.                     //right player gets the cards
  33.                     secondPlayer.Enqueue(cardOfRightPlayer);
  34.                     secondPlayer.Enqueue(cardOfLeftPlayer);
  35.                 }
  36.                 else
  37.                 {
  38.                     //every player pulls out three more cards
  39.                     List<string> cardsToSort = new List<string>
  40.                     {
  41.                         cardOfLeftPlayer,
  42.                         cardOfRightPlayer
  43.                     };
  44.  
  45.                     int leftPlayerDrawPower = 0;
  46.                     int rightPlayerDrawPower = 0;
  47.                     while (true)
  48.                     {
  49.                         int cardsTook = 0;
  50.                         while (cardsTook != 3)
  51.                         {
  52.                             if (firstPlayer.Count == 0 || secondPlayer.Count == 0)
  53.                             {
  54.                                 goto PrintResult;
  55.                             }
  56.  
  57.                             string cardToPlaceInFirstPlayer = firstPlayer.Dequeue();
  58.                             string cardToPlaceInSecondPlayer = secondPlayer.Dequeue();
  59.  
  60.                             leftPlayerDrawPower += cardToPlaceInFirstPlayer[cardToPlaceInFirstPlayer.Length - 1];
  61.                             rightPlayerDrawPower += cardToPlaceInSecondPlayer[cardToPlaceInSecondPlayer.Length - 1];
  62.  
  63.                             cardsToSort.Add(cardToPlaceInFirstPlayer);
  64.                             cardsToSort.Add(cardToPlaceInSecondPlayer);
  65.  
  66.                             cardsTook++;
  67.                         }
  68.  
  69.                         if (leftPlayerDrawPower != rightPlayerDrawPower)
  70.                         {
  71.                             break;
  72.                         }
  73.                     }
  74.  
  75.                     if (leftPlayerDrawPower > rightPlayerDrawPower)
  76.                     {
  77.                         GiveTheCardsToPlayer(cardsToSort, firstPlayer);
  78.                     }
  79.                     else if (leftPlayerDrawPower < rightPlayerDrawPower)
  80.                     {
  81.                         GiveTheCardsToPlayer(cardsToSort, secondPlayer);
  82.                     }
  83.                 }
  84.  
  85.                 currentTurn++;
  86.             }
  87.  
  88.             PrintResult:
  89.             if (firstPlayer.Count == 0 && secondPlayer.Count == 0)
  90.             {
  91.                 result = $"Draw after {currentTurn} turns";
  92.             }
  93.             else if (firstPlayer.Count < secondPlayer.Count)
  94.             {
  95.                 result = $"Second player win after {currentTurn} turns";
  96.             }
  97.             else if (firstPlayer.Count > secondPlayer.Count)
  98.             {
  99.                 result = $"First player win after {currentTurn} turns";
  100.             }
  101.  
  102.             Console.WriteLine(result);
  103.         }
  104.  
  105.         private static void GiveTheCardsToPlayer(IEnumerable<string> cardsToGive, Queue<string> playerToGiveTo)
  106.         {
  107.             foreach (string card in SortCardsByNumber(cardsToGive))
  108.             {
  109.                 playerToGiveTo.Enqueue(card);
  110.             }
  111.         }
  112.  
  113.         private static IEnumerable<string> SortCardsByNumber(IEnumerable<string> cards)
  114.         {
  115.             return cards.OrderByDescending(s => GetNumberOfCard(s)).ThenByDescending(s => s[s.Length - 1]);
  116.         }
  117.  
  118.         private static int GetNumberOfCard(string card)
  119.         {
  120.             return int.Parse(card.Substring(0, card.Length - 1));
  121.         }
  122.  
  123.         private static IEnumerable<string> SplitConsoleInput()
  124.         {
  125.             return Console.ReadLine().Split();
  126.         }
  127.     }
  128. }
Add Comment
Please, Sign In to add comment