Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace NumberWars
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- public class StartUp
- {
- public static void Main()
- {
- Queue<string> firstPlayer = new Queue<string>(SplitConsoleInput());
- Queue<string> secondPlayer = new Queue<string>(SplitConsoleInput());
- string result = string.Empty;
- int currentTurn = 0;
- while (firstPlayer.Count > 0 && secondPlayer.Count > 0 && currentTurn != 1000000)
- {
- string cardOfLeftPlayer = firstPlayer.Dequeue();
- string cardOfRightPlayer = secondPlayer.Dequeue();
- int powerOfLeftCard = GetNumberOfCard(cardOfLeftPlayer);
- int powerOfRightCard = GetNumberOfCard(cardOfRightPlayer);
- if (powerOfLeftCard > powerOfRightCard)
- {
- //left player gets the cards
- firstPlayer.Enqueue(cardOfLeftPlayer);
- firstPlayer.Enqueue(cardOfRightPlayer);
- }
- else if (powerOfLeftCard < powerOfRightCard)
- {
- //right player gets the cards
- secondPlayer.Enqueue(cardOfRightPlayer);
- secondPlayer.Enqueue(cardOfLeftPlayer);
- }
- else
- {
- //every player pulls out three more cards
- List<string> cardsToSort = new List<string>
- {
- cardOfLeftPlayer,
- cardOfRightPlayer
- };
- int leftPlayerDrawPower = 0;
- int rightPlayerDrawPower = 0;
- while (true)
- {
- int cardsTook = 0;
- while (cardsTook != 3)
- {
- if (firstPlayer.Count == 0 || secondPlayer.Count == 0)
- {
- goto PrintResult;
- }
- string cardToPlaceInFirstPlayer = firstPlayer.Dequeue();
- string cardToPlaceInSecondPlayer = secondPlayer.Dequeue();
- leftPlayerDrawPower += cardToPlaceInFirstPlayer[cardToPlaceInFirstPlayer.Length - 1];
- rightPlayerDrawPower += cardToPlaceInSecondPlayer[cardToPlaceInSecondPlayer.Length - 1];
- cardsToSort.Add(cardToPlaceInFirstPlayer);
- cardsToSort.Add(cardToPlaceInSecondPlayer);
- cardsTook++;
- }
- if (leftPlayerDrawPower != rightPlayerDrawPower)
- {
- break;
- }
- }
- if (leftPlayerDrawPower > rightPlayerDrawPower)
- {
- GiveTheCardsToPlayer(cardsToSort, firstPlayer);
- }
- else if (leftPlayerDrawPower < rightPlayerDrawPower)
- {
- GiveTheCardsToPlayer(cardsToSort, secondPlayer);
- }
- }
- currentTurn++;
- }
- PrintResult:
- if (firstPlayer.Count == 0 && secondPlayer.Count == 0)
- {
- result = $"Draw after {currentTurn} turns";
- }
- else if (firstPlayer.Count < secondPlayer.Count)
- {
- result = $"Second player win after {currentTurn} turns";
- }
- else if (firstPlayer.Count > secondPlayer.Count)
- {
- result = $"First player win after {currentTurn} turns";
- }
- Console.WriteLine(result);
- }
- private static void GiveTheCardsToPlayer(IEnumerable<string> cardsToGive, Queue<string> playerToGiveTo)
- {
- foreach (string card in SortCardsByNumber(cardsToGive))
- {
- playerToGiveTo.Enqueue(card);
- }
- }
- private static IEnumerable<string> SortCardsByNumber(IEnumerable<string> cards)
- {
- return cards.OrderByDescending(s => GetNumberOfCard(s)).ThenByDescending(s => s[s.Length - 1]);
- }
- private static int GetNumberOfCard(string card)
- {
- return int.Parse(card.Substring(0, card.Length - 1));
- }
- private static IEnumerable<string> SplitConsoleInput()
- {
- return Console.ReadLine().Split();
- }
- }
- }
Add Comment
Please, Sign In to add comment