using System;
using System.Collections.Generic;
class Employee
{
public string Name { get; }
public int Stamina { get; private set; } = 100;
public bool OnBreak { get; private set; }
public int BreakHoursLeft { get; private set; }
public Employee(string name)
{
Name = name;
}
public bool CanWork => !OnBreak && Stamina > 0;
public void WorkOneHour()
{
if (!CanWork) return;
Stamina = Math.Max(0, Stamina - 20);
// При низкой стамине сотрудник автоматически уходит на перерыв.
if (Stamina <= 40)
{
OnBreak = true;
BreakHoursLeft = 2;
}
}
public void RestOneHour()
{
if (!OnBreak) return;
Stamina = Math.Min(100, Stamina + 35);
BreakHoursLeft--;
if (BreakHoursLeft <= 0)
{
OnBreak = false;
}
}
}
class Program
{
static void Main()
{
int checkoutCount = 4;
var employees = new List<Employee>
{
new Employee("Анна"),
new Employee("Борис")
};
for (int hour = 9; hour < 21; hour++)
{
Console.WriteLine($"\n--- {hour}:00 ---");
// Сначала отдыхают сотрудники, которые уже на перерыве.
foreach (Employee employee in employees)
{
if (employee.OnBreak)
employee.RestOneHour();
}
int openCheckouts = 0;
// Назначаем доступных сотрудников на кассы.
foreach (Employee employee in employees)
{
if (openCheckouts >= checkoutCount)
break;
if (employee.CanWork)
{
openCheckouts++;
employee.WorkOneHour();
Console.WriteLine(
$"{employee.Name} работает. Стамина: {employee.Stamina}%.");
}
else if (employee.OnBreak)
{
Console.WriteLine(
$"{employee.Name} на перерыве. Стамина: {employee.Stamina}%.");
}
else
{
Console.WriteLine(
$"{employee.Name} отдыхает, чтобы восстановить силы. Стамина: {employee.Stamina}%.");
}
}
int closedCheckouts = checkoutCount - openCheckouts;
if (closedCheckouts > 0)
{
Console.WriteLine($"Свободных касс закрыто: {closedCheckouts}.");
}
// Показываем состояние всех сотрудников, включая отдыхающих.
Console.WriteLine("Состояние сотрудников:");
foreach (Employee employee in employees)
{
string status = employee.OnBreak ? "перерыв" :
employee.CanWork ? "готов работать" : "восстанавливается";
Console.WriteLine(
$" {employee.Name}: стамина {employee.Stamina}%, {status}.");
}
}
Console.WriteLine("\n=== Остаток стамины в конце дня ===");
foreach (Employee employee in employees)
{
Console.WriteLine($"{employee.Name}: {employee.Stamina}%.");
}
}
}