Система, яку я будую, включає набір повзунків користувальницького інтерфейсу (кількість варіюється), кожен зі шкалою 0-100. Під слайдером я маю на увазі інтерфейс користувача, де ви захоплюєте елемент і перетягуєте його вгору і вниз, як регулювання гучності. Вони з'єднані алгоритмом, який забезпечує їх завжди 100. Отже, коли один повзунок переміщується вгору, всі інші рухаються вниз, врешті-решт до нуля. Коли один рухається вниз, інші рухаються вгору. У всіх випадках загальна сума повинна бути 100. Тож тут повзунки мають різні значення, але вони на 100%:
----O------ 40
O---------- 0
--O-------- 20
--O-------- 20
--O-------- 20
Якщо перший повзунок переміщується вгору від 40 до 70, інші повинні переміщувати значення вниз (у міру перетягування повзунка). Зауважте, три повзунки змінилися з 20 на 10, і один залишився на нулі, оскільки він не може опуститися нижче.
-------O--- 70
O---------- 0
-O--------- 10
-O--------- 10
-O--------- 10
Звичайно, коли будь-який повзун досягає 0 або 100, він не може рухатися далі, саме там моя голова справді болить. Отже, якщо повзунок рухається вище, інші переміщуються нижче, але коли будь-який з них досягає нуля, нижчі можуть переміщатися інші, які ще не досягли нуля.
Я задаю це питання, оскільки це питання властиве алгоритму, а не його реалізації. Платформа FWIW - Android Java, але це не особливо актуально.
Підхід, який я застосував із моїм першим ударом, полягав у підрахунку зміни відсотка повзуна, який перемістився. Потім я розділив цю зміну і застосував її (в іншому напрямку) до інших значень слайдера. Однак проблема полягає в тому, що, використовуючи відсотки та множення, якщо будь-який повзунок потрапить на нуль, його більше ніколи не можна збільшити з нуля - чистий результат цього полягає в тому, що окремі повзунки застрягають у нулі. Я використовував повзунки з діапазоном від 0 до 1 000 000, щоб уникнути проблем із округленням, і це, здається, є корисним, але я ще повинен створити алгоритм, який добре обробляє всі сценарії.