Advertisement
desislava_topuzakova

01. Blacksmith

Jun 16th, 2022
1,424
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.23 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace _01._Blacksmith
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             int[] steel = Console.ReadLine().Split().Select(int.Parse).ToArray();
  12.             //"40 50 70 120 10 20".Split
  13.             //["40", "50", "70", "120", "10", "20"].Select(int.Parse)
  14.             //[40, 50, 70, 120, 10, 20]
  15.  
  16.             int[] carbon = Console.ReadLine().Split().Select(int.Parse).ToArray();
  17.  
  18.             //стомана -> първия към последния елемент
  19.             Queue<int> queueSteel = new Queue<int>(steel);
  20.  
  21.             //въглерод -> последния към първия елемент
  22.             Stack<int> stackCarbon = new Stack<int>(carbon);
  23.  
  24.             //запис: име на меч -> брой на мечовете от този вид
  25.             SortedDictionary<string, int> swords = new SortedDictionary<string, int>
  26.             {
  27.                 {"Broadsword", 0},
  28.                 { "Sabre", 0},
  29.                 { "Katana", 0},
  30.                 { "Shamshir", 0},
  31.                 { "Gladius", 0}
  32.             };
  33.  
  34.  
  35.             //стоп: ако свърши или стоманата или въглерода
  36.             //продължаваме: имаме и стоамана и въглерод
  37.             //1. взимам стомана(peek) и въглерод(peek)
  38.             //2. сума = стомана + въглерод
  39.             //3. проверка дали сумата може да изработваме меч
  40.             //3.1. премахвам стоманата и въглерода
  41.             //3.2. премахваме стоманата, увеличаваме въглерода с 5
  42.  
  43.             int totalSwords = 0; //общия брой изковани мечове
  44.             while (queueSteel.Count > 0 && stackCarbon.Count > 0)
  45.             {
  46.                 int currentSteel = queueSteel.Peek();
  47.                 int currentCarbon = stackCarbon.Peek();
  48.                 int sum = currentSteel + currentCarbon;
  49.  
  50.                 if (sum == 70)
  51.                 {
  52.                     //изработваме меч Gladius
  53.                     swords["Gladius"]++;
  54.                     totalSwords++;
  55.                     queueSteel.Dequeue();
  56.                     stackCarbon.Pop();
  57.                 }
  58.                 else if (sum == 80)
  59.                 {
  60.                     //изработваме меч Shamshir
  61.                     swords["Shamshir"]++;
  62.                     totalSwords++;
  63.                     queueSteel.Dequeue();
  64.                     stackCarbon.Pop();
  65.                 }
  66.                 else if (sum == 90)
  67.                 {
  68.                     //изработваме меч Katana
  69.                     swords["Katana"]++;
  70.                     totalSwords++;
  71.                     queueSteel.Dequeue();
  72.                     stackCarbon.Pop();
  73.                 }
  74.                 else if (sum == 110)
  75.                 {
  76.                     //изработваме меч Sabre
  77.                     swords["Sabre"]++;
  78.                     totalSwords++;
  79.                     queueSteel.Dequeue();
  80.                     stackCarbon.Pop();
  81.                 }
  82.                 else if (sum == 150)
  83.                 {
  84.                     //изработваме меч Broadsword
  85.                     swords["Broadsword"]++;
  86.                     totalSwords++;
  87.                     queueSteel.Dequeue();
  88.                     stackCarbon.Pop();
  89.                 }
  90.                 else
  91.                 {
  92.                     //не изработваме меч
  93.                     queueSteel.Dequeue();
  94.                     currentCarbon += 5;
  95.                     stackCarbon.Pop();
  96.                     stackCarbon.Push(currentCarbon);
  97.                 }
  98.             }
  99.  
  100.             //свършат или въглерода или стоманата
  101.             if (totalSwords >= 1)
  102.             {
  103.                 Console.WriteLine($"You have forged {totalSwords} swords.");
  104.             }
  105.             else
  106.             {
  107.                 Console.WriteLine("You did not have enough resources to forge a sword.");
  108.             }
  109.  
  110.             //печатаме стоманата
  111.             if (queueSteel.Count == 0)
  112.             {
  113.                 Console.WriteLine("Steel left: none");
  114.             }
  115.             else
  116.             {
  117.                 Console.WriteLine("Steel left: " + string.Join(", ", queueSteel));
  118.             }
  119.  
  120.             //печатаме въглерода
  121.             if (stackCarbon.Count == 0)
  122.             {
  123.                 Console.WriteLine("Carbon left: none");
  124.             }
  125.             else
  126.             {
  127.                 Console.WriteLine("Carbon left: " + string.Join(", ", stackCarbon));
  128.             }
  129.  
  130.             //мечове
  131.             foreach(var swordItem in swords.OrderBy(pair => pair.Key))
  132.             {
  133.                 //swordItem -> key:име на меча, value: бр. мечове
  134.                 if (swordItem.Value > 0)
  135.                 {
  136.                     Console.WriteLine($"{swordItem.Key}: {swordItem.Value}");
  137.                 }
  138.             }
  139.         }
  140.     }
  141. }
  142.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement