Создание Javascript logi c для расчета вложенных колец внутри друг друга от наибольшего к наименьшему - PullRequest
0 голосов
/ 24 марта 2020

Я новичок в коде, и у меня есть, как мне кажется, довольно сложная логика c головоломка, которую нужно выяснить для программы, которую я пишу.

Моя цель - уметь вкладывать кольца разных размеров друг в друге (представьте себе одну из тех русских матрешек). В настоящее время моя программа собирает пользовательские входные данные из таблицы входных данных (до 20 размеров) и собирает эти данные в массив объектов, отсортированных по порядку от наибольшего к наименьшему в зависимости от внешнего размера колец.

My объект пользовательских входов называется «входами» и создается настройкой для l oop следующим образом:

inputs[i] = {index: i, inside: id[i], outside: od[i], quantity: qty[i], sheet: qty[i], nested: 0, centers: qty[i]};

Объекты ввода затем сортируются в массив объектов, называемый «all_inputs» (я получил некоторая помощь от некоторых добрых людей здесь, чтобы помочь мне с этой частью также). До этого момента все отлично работало.

Так, например, если пользователь ввел следующие три элемента:

Элемент 1 - внутри: 30 дюймов, снаружи: 36 дюймов и количество: 10
Элемент 2 - внутри: 20 дюймов, снаружи: 24 дюйма и количество: 8
Элемент 3 - внутри: 40 дюймов, снаружи: 44 дюйма и количество: 11

Моя программа сортирует их по порядку от наибольшего к наименьшему, основываясь на внешнем виде: пункт 3, пункт 1, затем пункт 2.

Из этого я легко могу определить, что мои окончательные результаты состоят в том, что весь пункт 3 может содержать весь элемент 1 (с одним неиспользованным оставшимся центром), а элемент 1 может содержать весь элемент 2 (с двумя неиспользованными оставшимися центрами). Также было бы 8 оставшихся центров для элемента 2.

Моя задача состоит в том, чтобы поместить это в код logi c, который бы учитывал бесчисленные комбинации, которые пользователь мог бы ввести.

Мой первый мысль была примерно такой:

function nest() {
    var i;
    var x;

    for (i = 0; i <= 19; i++) {
        x = i + 1;
        if (all_inputs[X].inside < all_inputs[i].outside && all_inputs[i].centers > 0) {
            do {
                all_inputs[x].nested++;
                all_inputs[x].sheet--;
                all_inputs[i].centers--;
            }
            while (all_inputs[x].sheet > 0 && all_inputs[i].centers > 0);
        }
    }
}

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

...