1 Востаннє редагувалося 0xDADA11C7 (04.09.2021 20:11:15)

Тема: тестове завдання C#

Хто що може підказати, порадити по виконанню даного тестового завдання?
Не знаю з чого почати. І як логічно вибудовувати код, підбирати структуру коду. Що і де описувати?

російська

Наверное нужно создать клас - Бригада і в нем трьох людей і щоб у кожному був метод - обробляти фото?

Також не знаю, як робити модульне тестування

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.

2

Re: тестове завдання C#

На папері спочатку розв'яжіть, це варіація шкільної задачі про труби.

3 Востаннє редагувалося tchort (02.09.2021 19:53:14)

Re: тестове завдання C#

Please focus on:
OOP implementation;
N-tier architecture implementation;
Unit testing  implementation;
General programing rules and standards usage.

Якого сенсу роблять ці побажання? - там буквально одна функція.

І чого ви пишете російською, Bing-Перекладач зламався?

Подякували: koala, leofun012

4

Re: тестове завдання C#

Якого сенсу роблять ці побажання?

Вочевидь, для демонстрації знайомства із цими концепціями.

Подякували: tchort1

5

Re: тестове завдання C#

є таке завдання:

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();

6

Re: тестове завдання C#

Шановний, ви серйозно хочете, щоб ми за вас завдання читали, чи що? Якщо ви не знаєте термінів з умови - почитайте літературу. Якщо знаєте - то ви ж здатні співставити умову з власним кодом, чи ні?

sasha87 написав:

Підкажіть будь-ласка як його правильно оформити для взаємодії з користувачем,

У вас же в умові:

N-tier architecture implementation;

sasha87 написав:

що переробити,

Ви задачу про труби в школі розв'язували? У басейні є 1000 літрів води, через першу трубу виливається літр за 2 хвилини, через другу за 3, через третю за 4, як швидко басейн спорожніє? Це на аркуші в три рядки розв'язується, а не кожен літр відстежується, куди тече.

sasha87 написав:

  можливо щось додати,щось поміняти?

У вас же в умові:

Unit testing  implementation;

7

Re: тестове завдання C#

Пан Коала вже готовий влаштуватися на ту вакансію, а от з вами питання відкрите чи готові ви.

8

Re: тестове завдання C#

Кент Бек, "Розробка через тестування" (Kent Beck, Test-Driven Development)
Роберт Мартін, "Чиста архітектура" (Robert Martin, Clean Architecture)
Від вас очікують, що ви читали ці книжки. Або аналоги. Але без цього вас на цю роботу можуть не взяти.