Skip to content

CyxouD/robot-charge-modelling

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание. Позиция Android-разработчик

Задача Смоделировать процесс зарядки роботов.

Условия 6 роботов сидят за круглым столом с 6 розетками напротив каждого.

Чтобы себя зарядить, необходимо использовать зарядное устройство, которое можно собрать из двух частей: вилки и кабеля.

Одна часть лежит слева от каждого робота, вторая - справа. Рядом сидящие роботы конкурируют за владение этими частями.

Роботы берут каждую из частей зарядного устройства независимо, то есть сначала одной рукой, а потом второй.

Роботы садятся за стол с 50% заряда. Зарядное устройство добавляет 10% заряда за 500 мс. Будем считать, что роботы заряжаются только интервалами кратными 500 мс.

Каждую секунду роботы тратят 10% заряда на функционирование. Роботы могут иметь три стратегии:

  1. случайная: если не полный заряд, дожидается доступности 2х частей устройства, заряжается на 10% и засыпает на 100-300мс (случайно) и повторяет;

  2. жадная: если заряд меньше 60%, захватывает 2 части зарядного устройства и заряжается до 100%, а если больше, то проверяет условие раз в 500 мс;

  3. джентльменская: если заряд у одного из соседей меньше, чем у него, то уступит часть зарядного устройства (засыпает на 200мс).

Дополнительные условия

Робот не может зарядится больше 100%. Если заряд опускается до 0 - робот отключается. Считать, что роботы садятся за стол одновременно и действия происходят в реальном времени.

Моделирование можно закончить, если все роботы зарядились полностью или выключились. Возможна ситуация, например, когда 3 робота выключились а 3 зарядились полностью.

Программа получает 6 параметров на вход - 6 чисел, означающих стратегию робота: 1/2/3 соответственно.

Робот тратит заряд на функционирование даже если он заряжается, т.е. если робот заряжался 1 секунду, то он добавил 20% заряда и потратил 10% для обеспечения работоспособности.

Если робот полностью зарядился, то он продолжает сидеть за столом.

Если робот полностью разрядился, то он перед выключением отдает все части зарядного устройства, которые он занимал.

В зависимости от входных данных программа может зациклиться - это нормальное поведение системы, ничего предпринимать для ускорения завершения программы не нужно.

Действия в реальном времени трактовать как действия, которые проходят в разных потоках.

Код программы желательно присылать в кодировке UTF-8 если в тексте используются буквы не из английский алфавита.

Программа должна логгировать изменения состояний роботов (уровень заряда и количество частей зарядного устройства).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages