Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.11.2017, 11:48
Интересующийся
Отправить личное сообщение для Evelate Посмотреть профиль Найти все сообщения от Evelate
 
Регистрация: 10.03.2017
Сообщений: 12

Проверка всех возможных вариантов
Добрый день,

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

Например:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

Каждую строку надо сравнить с результатом (обозначим: "счёт"), но по особому.

Хочу, чтобы программа учла все возможные варианты.
Например сначала сравнить каждый столбец с "счёт",
потом столбы 1 2, 1 3, 1 4, 1 5, 1 6, 1 7, 1 8, 1 9, 1 10 с "счёт"
2 1, 2 3, 2 4, 2 5, 2 6, 2 7, 2 8, 2 9, 2 10 с "счёт"
...
1 2 3, 1 2 4, 1 2 5, 1 2 6, 1 2 7, 1 2 8, 1 2 9, 1 2 10 с "счёт"
1 3 2, 1 3 4, 1 3 5, 1 3 6, 1 3 7, 1 3 8, 1 3 9, 1 3 10 с "счёт"
и так вплоть до
1 2 3 4 5 6 7 8 9 10 с "счёт"


Каждый возможный вариант, я потом должен сохранить результат сравнения, Например (истина/ложь)

Далее результат всех возможных вариантов каждой строки, хочу сравнить и выловить самый лучший вариант, подходящий к результату "счёт"
Дабы потом к этим столбцам поставить одно самое эффективное условие)

Так вот, суть вопроса, посоветуйте, как мне в автоматическом режиме проверить все возможные комбинации проверки?
(в ручную делать с помощью множества конструкций if ((1) && (2) && (3) === счёт) все возможные варианты, крайне не благодарное дело.
По любому есть более простой элегантный способ проверки с менее объемом строк кода, но я никак не придумаю как)
Ответить с цитированием
  #2 (permalink)  
Старый 10.11.2017, 11:51
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

Используйте циклы.
Ответить с цитированием
  #3 (permalink)  
Старый 10.11.2017, 11:58
Интересующийся
Отправить личное сообщение для Evelate Посмотреть профиль Найти все сообщения от Evelate
 
Регистрация: 10.03.2017
Сообщений: 12

Да циклы - это понятно, я не могу придумать алгоритм, как их использовать(
Ответить с цитированием
  #4 (permalink)  
Старый 10.11.2017, 12:05
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от Evelate
Хочу, чтобы программа учла все возможные варианты.
Например сначала сравнить каждый столбец с "счёт",
потом столбы 1 2, 1 3, 1 4, 1 5, 1 6, 1 7, 1 8, 1 9, 1 10 с "счёт"
2 1, 2 3, 2 4, 2 5, 2 6, 2 7, 2 8, 2 9, 2 10 с "счёт"
...
1 2 3, 1 2 4, 1 2 5, 1 2 6, 1 2 7, 1 2 8, 1 2 9, 1 2 10 с "счёт"
1 3 2, 1 3 4, 1 3 5, 1 3 6, 1 3 7, 1 3 8, 1 3 9, 1 3 10 с "счёт"
и так вплоть до
1 2 3 4 5 6 7 8 9 10 с "счёт"
а порядок именно такой?

есть простейший вариант, но там подмножества будут в другом порядке:
var N = 10;
for (var i = 1, max = Math.pow(2, N); i < max; ++i) {
  var value = ...;
  for (var j = 0; j < N; ++j) {
    var k = (i >> j) & 1; // надо ли учитывать j-й элемент на данной итерации
    value = value && ((j) && k);
  }
  if (value === "счёт") ...
}


если надо соблюсти указанный порядок, то там рекурсия будет.
Ответить с цитированием
  #5 (permalink)  
Старый 10.11.2017, 12:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Ответить с цитированием
  #6 (permalink)  
Старый 10.11.2017, 12:05
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

Evelate, я не совсем понял чего вы хотите.
Есть таблица (<table/>):
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
И число ("счет"): 50;
Каким образом нужно производить проверку?
Нужно взять первую строку, первую ячейку этой строки и сравнить её со счетом?
Или нужно взять сумму (всех строк) первого столбца и сравнить её со счетом?
Далее увеличивая кол-во используемых для сравнения столбцов.
Ответить с цитированием
  #7 (permalink)  
Старый 13.11.2017, 14:10
Интересующийся
Отправить личное сообщение для Evelate Посмотреть профиль Найти все сообщения от Evelate
 
Регистрация: 10.03.2017
Сообщений: 12

Пожалуй не так написал, что мне нужно)

"Нужно найти <b>все</b> возможные комбинации и сохранить их в массив"
Например 2 столбца. Каждый столбец имеет переменную с данными "1"
a = 1; b = 1; c = 1;

происходит парсинг всех возможных комбинаций, все они должны сохранится в массив для дальнейшего сравнения)

комбо 1: a - arr[0] = [a]
комбо 2: b - arr[1] = [b]
комбо 3: c - arr[2] = [c]
комбо 4: a b - arr[3] = [a, b]
комбо 5: a c - arr[4] = [a, c]
комбо 6: b c - arr[5] = [b, c]
комбо 7: a b c - arr[6] = [a, b, c]





Из экселя я беру данные из определенных столбцов - сохраняю в переменные и сравниваю их с массивом из шаг №1

Например:
Входные данные также будут 1 или 0.


строка №1 из экселя: var1 = 1, var2 = 0, var3 = 1;
строка №2 из экселя: var1 = 0, var2 = 0, var3 = 1;


Дальше пока что смутно представляю реализацию...
как-то надо сопоставить "var1" с "b" и "var2" с "a" и "var3" c "c"
Далее,

Первый проход:
если "а" есть в массиве в текущем прохождении цикла, начать сравнивать её только с var2 каждой строки
если "а" и "b" есть в массиве в текущем прохождении цикла, начать сравнивать её только с var2 и c var1 каждой строки

выглядеть примерно должно так:

excel парсер с циклом "i" - массив комбинаций с циклом "j"
строка 1: var1 = 1, var2 = 0, var3 = 1;

a - if (var2 === a) { counter[j][переменная1]++
} else if var2 !== a { counter[j][переменная2]++ }
b-
c-
a b - if ((var2 === a) && (var1 === b)) { counter[j][переменная1]++
} else if ((var2 !== a) || (var1 !== b)) { counter[j][переменная2]++ }
a c-
b c-
a b c-

строка 2: var1, var2, var3

a-
b-
c-
a b-
a c-
b c-
a b c-
...




Потом я буду смотреть лучший результат между всеми переменными в counter[] и выберу несколько лучших комбинаций для использования в своих целях)


загвоздка в шаге 1 - вообще не представляю, как сделать, да и потом шаг два сопоставление не имею представления, как сделать)

Может у вас будет более простое решение?
Ответить с цитированием
  #8 (permalink)  
Старый 14.11.2017, 00:50
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от Evelate Посмотреть сообщение
Пожалуй не так написал, что мне нужно)
Может у вас будет более простое решение?
может и будет, когда вы научитесь понятливо описывать задачи
и коим боком к экселю js?
чем встроенный vba не устроил?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать перебор всех вариантов? DJFunGamer Общие вопросы Javascript 5 11.08.2014 16:24
проверка отсутствия всех cookies legrol Общие вопросы Javascript 0 30.03.2012 11:38
Получить список всех css-свойств и их возможных значений, поддерживаемые браузером Denisko-Redisko Общие вопросы Javascript 7 03.01.2012 03:33
перебор всех возможных значений Yurik Общие вопросы Javascript 3 04.08.2011 14:25
Проверка сайта на совместимость во всех браузерах greatilya Оффтопик 3 28.10.2009 12:43