Advertisement
elena1234

Crossroads-C# Advanced

Dec 14th, 2020 (edited)
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.04 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace Crossroads
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             int greenLightSeconds = int.Parse(Console.ReadLine());
  11.             int freeWindowSeconds = int.Parse(Console.ReadLine());
  12.             int initialGreenLightSeconds = greenLightSeconds;
  13.             int initialFreeWindowSeconds = freeWindowSeconds;
  14.             var queueForAllCars = new Queue<string>();
  15.             string input = Console.ReadLine();
  16.             int countPassedCars = 0;
  17.             while (true)
  18.             {
  19.                 if (input == "END")
  20.                 {
  21.                     break;
  22.                 }
  23.  
  24.                 else if (input == "green" == false)
  25.                 {
  26.                     string car = input;
  27.                     queueForAllCars.Enqueue(car);
  28.                     input = Console.ReadLine();
  29.                 }
  30.  
  31.                 if (input == "green")
  32.                 {
  33.                     greenLightSeconds = initialGreenLightSeconds;
  34.                     freeWindowSeconds = initialFreeWindowSeconds;
  35.  
  36.                     while (greenLightSeconds > 0 && queueForAllCars.Count > 0) // there are green light and some cars
  37.                     {
  38.                         string currentCar = queueForAllCars.Peek();
  39.                         int currentCarLength = currentCar.Length;
  40.                         if (greenLightSeconds >= currentCarLength) //the whole car passed
  41.                         {
  42.                             greenLightSeconds = TheWholeCarPassedDurringGreenLight(greenLightSeconds, queueForAllCars, currentCarLength);
  43.                             countPassedCars++;
  44.                         }
  45.  
  46.                         else if (greenLightSeconds < currentCarLength)
  47.                         {
  48.                             var queueForCurrentCar = new Queue<char>(); // put the currentCarName in another queue
  49.  
  50.                             for (int i = 0; i < currentCarLength; i++)
  51.                             {
  52.                                 queueForCurrentCar.Enqueue(currentCar[i]);
  53.                             }
  54.  
  55.                             greenLightSeconds = SomeCarPartsPassedDuringGreenLight(greenLightSeconds, queueForCurrentCar); // car parts passed durring green light
  56.  
  57.                             if (freeWindowSeconds >= queueForCurrentCar.Count) // car parts passed durring free window
  58.                             {
  59.                                 freeWindowSeconds = ТheRestPartAndTheWholeCarPassedDuringFreeWindow(queueForAllCars, queueForCurrentCar);
  60.                                 countPassedCars++;
  61.                             }
  62.  
  63.                             else if (freeWindowSeconds < queueForCurrentCar.Count) // there is a crash
  64.                             {
  65.                                 WhatHappendIfThereIsACrash(freeWindowSeconds, currentCar, queueForCurrentCar);
  66.                                 return;
  67.                             }
  68.                         }
  69.                     }
  70.  
  71.                     input = Console.ReadLine();
  72.                 }
  73.             }
  74.  
  75.             Console.WriteLine("Everyone is safe.");
  76.             Console.WriteLine($"{countPassedCars} total cars passed the crossroads.");
  77.         }
  78.  
  79.  
  80.  
  81.         private static int TheWholeCarPassedDurringGreenLight(int greenLightSeconds, Queue<string> queue, int currentCarLength)
  82.         {
  83.             queue.Dequeue(); // car passed durring green light
  84.             greenLightSeconds -= currentCarLength;
  85.             return greenLightSeconds;
  86.         }
  87.  
  88.         private static int SomeCarPartsPassedDuringGreenLight(int greenLightSeconds, Queue<char> queueForCurrentCar)
  89.         {
  90.             for (int i = 0; i < greenLightSeconds; i++) // only some car parts passed durring green light
  91.             {
  92.                 queueForCurrentCar.Dequeue();
  93.             }
  94.  
  95.             greenLightSeconds = 0;
  96.             return greenLightSeconds;
  97.         }
  98.  
  99.         private static int ТheRestPartAndTheWholeCarPassedDuringFreeWindow(Queue<string> queueForAllCars, Queue<char> queueForCurrentCar)
  100.         {
  101.             int freeWindowSeconds;
  102.             for (int i = 0; i < queueForCurrentCar.Count; i++)
  103.             {
  104.                 queueForCurrentCar.Dequeue();
  105.             }
  106.  
  107.             freeWindowSeconds = 0; // red light
  108.             queueForAllCars.Dequeue(); // currentCar passed
  109.             return freeWindowSeconds;
  110.         }
  111.  
  112.         private static void WhatHappendIfThereIsACrash(int freeWindowSeconds, string currentCar, Queue<char> queueForCurrentCar)
  113.         {
  114.             char crashSymbol = currentCar[0];
  115.             for (int i = 0; i <= freeWindowSeconds; i++)
  116.             {
  117.                 if (queueForCurrentCar.TryPeek(out char currenSymbol))
  118.                 {
  119.                     crashSymbol = queueForCurrentCar.Dequeue();
  120.                 }
  121.             }
  122.  
  123.             Console.WriteLine($"A crash happened!");
  124.             Console.WriteLine($"{currentCar} was hit at {crashSymbol}.");
  125.             return;
  126.         }
  127.     }
  128. }
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement