WindFell

Iron Girder

Aug 28th, 2018
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.41 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. class IronGirder
  6. {
  7.     static void Main(string[] args)
  8.     {
  9.         Dictionary<string, Town> towns = new Dictionary<string, Town>();
  10.  
  11.         string input;
  12.  
  13.         while ((input = Console.ReadLine()) != "Slide rule")
  14.         {
  15.             string[] commandArgs = input
  16.                 .Split(new string[] { ":", "->" }, StringSplitOptions.RemoveEmptyEntries);
  17.  
  18.             string townName = commandArgs[0];
  19.             int passengers = int.Parse(commandArgs[2]);
  20.  
  21.             if (commandArgs[1] == "ambush")
  22.             {
  23.                 if (towns.ContainsKey(townName))
  24.                 {
  25.                     towns[townName].Ambush(passengers);
  26.                 }
  27.                 continue;
  28.             }
  29.  
  30.             int time = int.Parse(commandArgs[1]);
  31.  
  32.             if (towns.ContainsKey(townName) == false)
  33.             {
  34.                 towns[townName] = new Town(townName, time, passengers);
  35.             }
  36.             else
  37.             {
  38.                 if (towns[townName].Time > time || towns[townName].Time == 0)
  39.                 {
  40.                     towns[townName].ChangeTime(time);
  41.                 }
  42.  
  43.                 towns[townName].AddPassengers(passengers);
  44.             }
  45.         }
  46.  
  47.         towns
  48.             .Select(t => t.Value)
  49.             .Where(t => t.Time != 0 && t.Passengers != 0)
  50.             .OrderBy(t => t.Time)
  51.             .ThenBy(t => t.Name)
  52.             .ToList()
  53.             .ForEach(t => Console.WriteLine(t));
  54.     }
  55. }
  56.  
  57. class Town
  58. {    
  59.     public Town(string name, int time, int passengers)
  60.     {
  61.         this.Name = name;
  62.         this.Time = time;
  63.         this.Passengers = passengers;
  64.     }
  65.  
  66.     public string Name { get; private set; }
  67.     public int Time { get; private set; }
  68.  
  69.     public int Passengers { get; private set; }
  70.  
  71.  
  72.     public void AddPassengers(int passengers)
  73.     {
  74.         this.Passengers += passengers;
  75.     }
  76.  
  77.     public void Ambush(int passengers)
  78.     {
  79.         this.Time = 0;
  80.         this.Passengers -= passengers;
  81.         if (this.Passengers < 0)
  82.         {
  83.             this.Passengers = 0;
  84.         }
  85.     }
  86.  
  87.     public void ChangeTime(int time)
  88.     {
  89.         this.Time = time;
  90.     }
  91.  
  92.     public override string ToString()
  93.     {
  94.         string result = $"{this.Name} -> Time: {this.Time} -> Passemgers: {this.Passengers}";
  95.         return result;
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment