Giter Site home page Giter Site logo

dimagithahahab / yadro-containers Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 9 KB

Тестовое задание на позицию «Инженер-стажёр по разработке ПО для систем хранения данных на Go»

Go 100.00%

yadro-containers's Introduction

Алгоритм

Если можно построить взаимно-однозначное соответствие между каждой группой одинаковых шаров и каждым контейнером, то отсортировать шары возможно. Чтобы проверить это, выполним следующие шаги:

  1. Посчитаем количество шаров каждого цвета.
  2. Определим вместимость каждого контейнера.
  3. Отсортируем списки количеств шаров каждого цвета и вместимостей контейнеров по возрастанию.
  4. Сравним отсортированные списки. Например, если самый маленький контейнер может вместить 2 шара, то должен существовать самый редкий цвет, в который окрашены только 2 шара, и наоборот.

Запуск

  1. git clone https://github.com/DimaGitHahahab/yadro-containers
  2. Перейти в корень проекта
  3. go run ./cmd/main.go

Почему алгоритм всегда работает

Если соответствие найдено, то покажем, что действительно можно разложить шары по соответствующим контейнерам только с помощью swap-операций.

Представим, что все шары лежат в одном большом массиве, но вместо цвета шара в качестве значения используется номер контейнера, которому соответствует этот шар. Тогда наша задача сводится к сортировке этого массива только swap-операциями. Например, подойдет модифицированный selection sort: если элемент уже находится в подмассиве (диапазоне индексов) относящемуся к своему контейнеру, то пропустим его, это относится как к элементу рассматриваемому во внешнем цикле, так и во внутреннем:

for (i = 0; i < n - 1; i++) {
    for (j = i + 1; j < n; j++) {
        if (i in range(container(a[i])) or j in range(container(a[j])))
            continue;
        if (a[i] > a[j]) {
            swap(a[j], a[i]);
        }
    }
}

На самом деле, чтобы ответить на вопрос задачи, не нужно реализовывать шаги из доказательства (класть элементы в большой массив, сортировать и т.д.). По условию нужно уметь отвечать на вопрос "возможно ли отсортировать", а не сортировать.

yadro-containers's People

Contributors

dimagithahahab avatar

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.