Advertisement
Guest User

PowerPlants

a guest
May 24th, 2017
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.71 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace PowerPlants
  5. {
  6.     public class PPlants
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.  
  11.             int[] plantsLevel = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
  12.             int[] days = new int[2];
  13.  
  14.             FullSeason(plantsLevel, days);
  15.             AfterSeasonAlive(plantsLevel);
  16.             ExtraDays(plantsLevel, days);
  17.  
  18.             string seasonText = days[1] == 1 ? "season" : "seasons";
  19.             Console.WriteLine($"survived {days[0]} days ({days[1]} {seasonText})");
  20.  
  21.         }
  22.  
  23.         public static void FullSeason(int[] plantsLevel, int[] days)
  24.         {
  25.             for (int i = 0; i < plantsLevel.Length; i++)
  26.             {
  27.                 AddDay(plantsLevel, days);
  28.                 PlantPower(i, plantsLevel);
  29.             }
  30.  
  31.             AddSeason(plantsLevel, days);
  32.         }
  33.  
  34.         public static void PlantPower(int i, int[] plantsLevel)
  35.         {
  36.             for (int k = 0; k < plantsLevel.Length; k++)
  37.             {
  38.                 if (k == i)
  39.                 {
  40.                     continue;
  41.                 }
  42.                 plantsLevel[k] = plantsLevel[k] <= 0 ? 0 : plantsLevel[k] - 1;
  43.             }
  44.         }
  45.  
  46.         public static void AfterSeasonAlive(int[] plantsLevel)
  47.         {
  48.             for (int i = 0; i < plantsLevel.Length; i++)
  49.             {
  50.                 plantsLevel[i] = plantsLevel[i] > 0 ? plantsLevel[i] + 1 : plantsLevel[i];
  51.             }
  52.         }
  53.  
  54.         public static void ExtraDays(int[] plantsLevel, int[] days)
  55.         {
  56.  
  57.             while (true)
  58.             {
  59.                 FullSeason(plantsLevel, days);
  60.  
  61.                 int sumExtraDays = 0;
  62.                 for (int i = 0; i < plantsLevel.Length; i++)
  63.                 {
  64.                     sumExtraDays = plantsLevel[i] > 0 ? sumExtraDays + plantsLevel[i] : sumExtraDays;
  65.                 }
  66.  
  67.                 if (sumExtraDays == 0)
  68.                 {
  69.                     break;
  70.                 }
  71.  
  72.                 AfterSeasonAlive(plantsLevel);
  73.             }
  74.         }
  75.  
  76.         public static void AddDay(int[] plantsLevel, int[] days)
  77.         {
  78.             for (int i = 0; i < plantsLevel.Length; i++)
  79.             {
  80.                 if (plantsLevel[i] > 0)
  81.                 {
  82.                     days[0] += 1;
  83.                     return;
  84.                 }
  85.             }
  86.         }
  87.  
  88.         public static void AddSeason(int[] plantsLevel, int[] days)
  89.         {
  90.             for (int i = 0; i < plantsLevel.Length; i++)
  91.             {
  92.                 if (plantsLevel[i] > 0)
  93.                 {
  94.                     days[1] += 1;
  95.                     return;
  96.                 }
  97.             }
  98.         }
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement