Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2016
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.77 KB | None | 0 0
  1. namespace Problem04
  2. {
  3.     using System;
  4.     using System.Collections.Generic;
  5.     using System.Linq;
  6.     using System.Text.RegularExpressions;
  7.  
  8.     public class Program
  9.     {
  10.         public static void Main(string[] args)
  11.         {
  12.            
  13.             List<Region> regions = new List<Region>();
  14.             while (true)
  15.             {
  16.                 var inputLine = Console.ReadLine();
  17.                 if (inputLine == "Count em all")
  18.                 {
  19.                     break;
  20.                 }
  21.                 var inputArr = Regex.Split(inputLine, " -> ");
  22.                 var regionName = inputArr[0].Trim();
  23.                 var meteorType = inputArr[1].Trim();
  24.                 long countMeteors = long.Parse(inputArr[2]);
  25.                 var existRegion = regions.FindIndex(r => r.Name == regionName);
  26.                 if (existRegion==-1)
  27.                 {
  28.                     regions.Add(new Region(regionName));
  29.                     var currentRegion = regions.First(r => r.Name == regionName);
  30.                     var greenCount = currentRegion.Meteors[0].Count;
  31.                     var redCount = currentRegion.Meteors[1].Count;
  32.                     var blackCount = currentRegion.Meteors[2].Count;
  33.                     switch (meteorType)
  34.                     {
  35.                         case "Green":
  36.                             currentRegion.Meteors[0].Count += countMeteors;
  37.                             currentRegion.Calculate();
  38.                             break;
  39.                         case "Red":
  40.                             currentRegion.Meteors[1].Count += countMeteors;
  41.                             currentRegion.Calculate();
  42.                             break;
  43.                         case "Black":
  44.                             currentRegion.Meteors[2].Count += countMeteors;
  45.                             currentRegion.Calculate();
  46.                             break;
  47.  
  48.                     }
  49.                 }
  50.                 else
  51.                 {
  52.                     var currentRegion = regions.First(r => r.Name == regionName);
  53.                     switch (meteorType)
  54.                     {
  55.                         case "Green":
  56.                             currentRegion.Meteors[0].Count += countMeteors;
  57.                             currentRegion.Calculate();
  58.                             break;
  59.                         case "Red":
  60.                             currentRegion.Meteors[1].Count += countMeteors;
  61.                             currentRegion.Calculate();
  62.                             break;
  63.                         case "Black":
  64.                             currentRegion.Meteors[2].Count += countMeteors;
  65.                             currentRegion.Calculate();
  66.                             break;
  67.  
  68.                     }
  69.                 }
  70.             }
  71.             var newList =
  72.                 regions.OrderByDescending(r => r.Meteors[2].Count).ThenBy(r => r.Name.Length).ThenBy(r => r.Name).ToList();
  73.             foreach (var region in newList)
  74.             {
  75.                 var sortedMeteors = region.Meteors.OrderByDescending(m => m.Count).ThenBy(m => m.Name);
  76.                 Console.WriteLine(region.Name);
  77.                 foreach (var meteor in sortedMeteors)
  78.                 {
  79.                     Console.WriteLine("-> " +meteor.Name + " : " + meteor.Count);
  80.                 }
  81.             }
  82.         }
  83.     }
  84.  
  85.     public class Meteor
  86.     {  
  87.         public string Name { get; set; }
  88.         public long Count { get; set; }
  89.  
  90.         public Meteor(string name,long count)
  91.         {
  92.             this.Name = name;
  93.             this.Count = count;
  94.         }
  95.     }
  96.  
  97.     public class Region
  98.     {
  99.         private const int mil = 1000000;
  100.         public string Name { get; set; }
  101.         public Meteor[] Meteors { get; set; }
  102.  
  103.         public Region(string name)
  104.         {
  105.             this.Name = name;
  106.             this.Meteors=new Meteor[3];
  107.             this.Meteors[0]=new Meteor("Green",0);
  108.             this.Meteors[1] = new Meteor("Red",0);
  109.             this.Meteors[2] = new Meteor("Black",0);
  110.         }
  111.  
  112.         public void Calculate()
  113.         {
  114.             var greenMeteor = this.Meteors[0];
  115.             var redMeteor = this.Meteors[1];
  116.             var blackMeteor = this.Meteors[2];
  117.             if (greenMeteor.Count >= mil)
  118.             {
  119.                 var rest = greenMeteor.Count%mil;
  120.                 var combinated = greenMeteor.Count / mil;
  121.                 greenMeteor.Count = rest;
  122.                 redMeteor.Count += combinated;
  123.             }
  124.             if (redMeteor.Count >= mil)
  125.             {
  126.                 var rest = redMeteor.Count % mil;
  127.                 var combinated = redMeteor.Count / mil;
  128.                 redMeteor.Count = rest;
  129.                 blackMeteor.Count += combinated;
  130.             }
  131.         }
  132.     }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement