svephoto

The Fight for Gondor [C#]

Jul 27th, 2021 (edited)
574
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace TheFightForGondor
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             int wavesOfOrcs = int.Parse(Console.ReadLine());
  12.  
  13.             Queue<int> platesOfTheAragornsDefence = new Queue<int>(Console.ReadLine()
  14.                 .Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)
  15.                 .Select(int.Parse).ToArray());
  16.  
  17.             Stack<int> warriorOrcsLeft = new Stack<int>();
  18.             bool isTheDefenceOfGondorDestroyed = false;
  19.  
  20.             for (int i = 1; i <= wavesOfOrcs; i++)
  21.             {
  22.                 Stack<int> newWaveOrcs = new Stack<int>(Console.ReadLine()
  23.                     .Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)
  24.                     .Select(int.Parse).ToArray());
  25.  
  26.                 if (i % 3 == 0)
  27.                 {
  28.                     int additionalPlate = int.Parse(Console.ReadLine());
  29.                     platesOfTheAragornsDefence.Enqueue(additionalPlate);
  30.                 }
  31.  
  32.                 while (newWaveOrcs.Count != 0 && platesOfTheAragornsDefence.Count != 0)
  33.                 {
  34.                     if (newWaveOrcs.Peek() > platesOfTheAragornsDefence.Peek())
  35.                     {
  36.                         newWaveOrcs.Push(newWaveOrcs.Pop() - platesOfTheAragornsDefence.Dequeue());
  37.                     }
  38.                     else if (platesOfTheAragornsDefence.Peek() > newWaveOrcs.Peek())
  39.                     {
  40.                         Queue<int> updatedPlatesOfTheAragornsDefence = new Queue<int>();
  41.  
  42.                         updatedPlatesOfTheAragornsDefence.Enqueue(platesOfTheAragornsDefence.Dequeue() - newWaveOrcs.Pop());
  43.  
  44.                         for (int j = 0; j < platesOfTheAragornsDefence.Count; j++)
  45.                         {
  46.                             updatedPlatesOfTheAragornsDefence.Enqueue(platesOfTheAragornsDefence.ElementAt(j));
  47.                         }
  48.  
  49.                         platesOfTheAragornsDefence = updatedPlatesOfTheAragornsDefence;
  50.                     }
  51.                     else
  52.                     {
  53.                         platesOfTheAragornsDefence.Dequeue();
  54.                         newWaveOrcs.Pop();
  55.                     }
  56.  
  57.                     if (platesOfTheAragornsDefence.Count == 0)
  58.                     {
  59.                         isTheDefenceOfGondorDestroyed = true;
  60.                         warriorOrcsLeft = newWaveOrcs;
  61.                         break;
  62.                     }
  63.                 }
  64.             }
  65.  
  66.             if (isTheDefenceOfGondorDestroyed)
  67.             {
  68.                 Console.WriteLine("The orcs successfully destroyed the Gondor's defense.");
  69.                 Console.WriteLine($"Orcs left: {string.Join(", ", warriorOrcsLeft)}");
  70.             }
  71.             else
  72.             {
  73.                 Console.WriteLine("The people successfully repulsed the orc's attack.");
  74.                 Console.WriteLine($"Plates left: {string.Join(", ", platesOfTheAragornsDefence)}");
  75.             }
  76.         }
  77.     }
  78. }
  79.  
RAW Paste Data