є таке завдання:
Case
 A job of 1000 images is going to be edited by a crew of 3 people:
·         P1: 1 image per 2 minutes
·         P2: 1 image per 3 minutes
·         P3: 1 image per 4 minutes
How long will this job take in total?
How many images will be edited by every person?
 Scoring:
•  Correct answer and explain the necessary steps
•  Working code
•  It should work for any situation (amount of images, amount of people, individual speed)
Please focus on:
OOP implementation;
N-tier architecture implementation;
Unit testing  implementation;
General programing rules and standards usage.
Розв'язок:
Завдання дали на співбесіді.
Підкажіть будь-ласка як його правильно оформити для взаємодії з користувачем, що переробити, можливо щось додати,щось поміняти?
namespace ImageMontageWorkers
{
    public class Image
    {
        public int Id { get; }
        public string Title { get; }
 
        public Image(int id, string title)
        {
            Id = id;
            Title = title;
        }
    }
}
using System;
using System.Collections.Generic;
 
namespace ImageMontageWorkers
{
    /// <summary>створення класу Працівник.</summary>
    public class Worker
    {
        /// <summary>ім'я працівника.</summary>
        public string Name { get; }
 
        /// <summary>Вертає фото, яке обробляє працівник.
        /// Если <see langword="null"/>,Це значить, що у працівника був простій . </summary>
        public Image CurrentImage { get; private set; }
 
        /// <summary>делегування методу для отримання працівником фото для обробки</summary>
        private readonly List<Image> getCurrentImage;
 
        /// <summary>Необхідний час для обробки.</summary>
        public int ProcessTime { get; }
 
        /// <summary>Час витрачений на обробку поточної картинки.</summary>
        public int ProcessingTime { get; private set; }
 
        // Список картинок оброблених працівником.
        private readonly List<Image> processedImages = new List<Image>();
 
        /// <summary>Іммутабельний список фото, оброблених працівником.</summary>
        public IReadOnlyList<Image> ProcessedImages;
 
        public Worker(string name, Func<Image> getCurrentImage, int processTime)
        {
            Name = name;
            this.getCurrentImage = getCurrentImage;
            ProcessTime = processTime;
            ProcessedImages = processedImages.AsReadOnly();
        }
 
        /// <summary>періоди часу, коли працівник працював</summary>
        public int CountWorkingInterval { get; private set; }
 
        /// <summary>Метод для виконання наступного інтервалу.</summary>
        public void NextWorkingInterval()
        {
            if (CurrentImage != null)
            {
                ProcessingTime--;
                CountWorkingInterval++;
            }
 
            if (ProcessingTime == 0)
            {
                if (CurrentImage != null)
                    processedImages.Add(CurrentImage);
 
                CurrentImage = getCurrentImage();
                if (CurrentImage != null)
                    ProcessingTime = ProcessTime;
            }
        }
    }
}
 
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ImageMontageWorkers
{
    public class Brigade
    {
        private readonly Queue<Image> images = new Queue<Image>();
        private readonly List<Worker> workers = new List<Worker>();
 
        private Image GetNextImage()
        {
            if (images.Count == 0)
                return null;
 
            return images.Dequeue();
        }
        public Brigade()
        {
            for (int i = 0; i < 1000; i++)
            {
                images.Enqueue(new Image(i, $"картинка №{i + 1}"));
            }
 
            workers.Add(new Worker("Перший", GetNextImage, 2));
            workers.Add(new Worker("Другий", GetNextImage, 3));
            workers.Add(new Worker("Третій", GetNextImage, 4));
        }
 
        public bool NextWorkingInterval()
        {
            workers.ForEach(w => w.NextWorkingInterval());
 
            return images.Count != 0 ||
                workers.Any(w => w.CurrentImage != null);
        }
 
        public void WorkStart()
        {
            while (NextWorkingInterval())
            {
                Console.WriteLine($"Картинок в черзі: {images.Count}");
            }
 
            foreach (var worker in workers)
            {
                Console.WriteLine($"{worker.Name}: {worker.CountWorkingInterval} - {worker.ProcessedImages.Count}");
            }
        }
    }
}
        static void Main(string[] args)
        {
 
            Brigade brigade = new Brigade();
            brigade.WorkStart();