GithubHelp home page GithubHelp logo

robot-charge-modelling's Introduction

Тестовое задание. Позиция 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 если в тексте используются буквы не из английский алфавита.

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

robot-charge-modelling's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.