enevlogiev

Vladko's Notebook

May 28th, 2015
318
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class Notebook
  5. {
  6.     static void Main()
  7.     {
  8.         var colorSheets = new SortedDictionary<string, Dictionary<string, List<string>>>();
  9.         string input;
  10.         while ((input = Console.ReadLine()) != "END")
  11.         {
  12.             var tokens = input.Split('|');
  13.             var color = tokens[0];
  14.             if (!colorSheets.ContainsKey(color))
  15.             {
  16.                 colorSheets.Add(color, new Dictionary<string, List<string>>());
  17.             }
  18.             switch (tokens[1])
  19.             {
  20.                 case "age":
  21.                     if (!colorSheets[color].ContainsKey("age"))
  22.                     {
  23.                         colorSheets[color]["age"] = new List<string> {tokens[2]};
  24.                     }
  25.                     break;
  26.                 case "name":
  27.                     if (!colorSheets[color].ContainsKey("name"))
  28.                     {
  29.                         colorSheets[color]["name"] = new List<string> {tokens[2]};
  30.                     }
  31.                     break;
  32.                 case "win":
  33.                     if (!colorSheets[color].ContainsKey("wins"))
  34.                     {
  35.                         colorSheets[color]["wins"] = new List<string>();
  36.                     }
  37.                     if (!colorSheets[color].ContainsKey("opponents"))
  38.                     {
  39.                         colorSheets[color]["opponents"] = new List<string>();
  40.                     }
  41.                     colorSheets[color]["wins"].Add("x");     //random token to mark a win
  42.                     colorSheets[color]["opponents"].Add(tokens[2]);                
  43.                     break;
  44.                 case "loss":
  45.                     if (!colorSheets[color].ContainsKey("losses"))
  46.                     {
  47.                         colorSheets[color]["losses"] = new List<string>();
  48.                     }
  49.                     if (!colorSheets[color].ContainsKey("opponents"))
  50.                     {
  51.                         colorSheets[color]["opponents"] = new List<string>();
  52.                     }
  53.                     colorSheets[color]["losses"].Add("x");     //random token to mark a loss
  54.                     colorSheets[color]["opponents"].Add(tokens[2]);                
  55.                     break;
  56.             }
  57.         }
  58.         var found = false;
  59.         foreach (var key in colorSheets.Keys)
  60.         {
  61.             if (!colorSheets[key].ContainsKey("name") || !colorSheets[key].ContainsKey("age"))
  62.             {
  63.                 continue;
  64.             }
  65.             found = true;
  66.             if (!colorSheets[key].ContainsKey("opponents"))
  67.             {
  68.                 Console.WriteLine("Color: " + key);
  69.                 Console.WriteLine("-age: " + colorSheets[key]["age"][0]);
  70.                 Console.WriteLine("-name: " + colorSheets[key]["name"][0]);
  71.                 Console.WriteLine("-opponents: (empty)");
  72.                 Console.WriteLine("-rank: 1.00");
  73.             }
  74.             else if (colorSheets[key].ContainsKey("opponents"))
  75.             {
  76.                 var losses = colorSheets[key].ContainsKey("losses") ? colorSheets[key]["losses"].Count + 1.0 : 1.0;
  77.                 var wins = colorSheets[key].ContainsKey("wins") ? colorSheets[key]["wins"].Count + 1.0 : 1.0;
  78.                 var rank = wins / losses;
  79.                 colorSheets[key]["opponents"].Sort(StringComparer.Ordinal);
  80.  
  81.                 Console.WriteLine("Color: " + key);
  82.                 Console.WriteLine("-age: " + colorSheets[key]["age"][0]);
  83.                 Console.WriteLine("-name: " + colorSheets[key]["name"][0]);
  84.                 Console.WriteLine("-opponents: " + string.Join(", ", colorSheets[key]["opponents"]));
  85.                 Console.WriteLine("-rank: {0:F2}", rank);
  86.             }
  87.         }
  88.         if (!found)
  89.         {
  90.             Console.WriteLine("No data recovered.");
  91.         }
  92.     }
  93. }
RAW Paste Data