Генератор вариантов формул

FastCode 63 8

В данной задаче требуется сформировать список строк, каждая из которых будет являться вариантом формулы, содержащей аргументы X1, X2, ..., Xmax, знаки арифметических операций и скобки. Этот список затем можно использовать для решений задач типа "расставьте знаки арифметических операций и скобки между заданными числами, чтобы результат вычислений давал заданное число". Функция, решающая данную задачу, может иметь следующий вид:

Функция СписокФормул(От, До)
    Перем Результат, Сч, Оп; // для безопасности
    Результат = Новый СписокЗначений;
    Если От >= До Тогда
        Результат.Добавить("X" + От);
        Результат.Добавить("( - X" + От + ")")
    Иначе 
        Для Сч = От По До - 1 Цикл
            ПравыеЧасти = СписокФормул(Сч + 1, До); // для скорости
            Для каждого Слева Из СписокФормул(От, Сч) Цикл
                Для каждого Справа Из ПравыеЧасти Цикл
                    Для Оп = 1 По 3 Цикл
                        Результат.Добавить("(" + Слева + " " + Сред("+*/", Оп, 1) + " " + Справа + ")")
                    КонецЦикла 
                КонецЦикла
            КонецЦикла     
        КонецЦикла 
    КонецЕсли;
    Возврат Результат
КонецФункции // СписокФормул()

Логика тут такая: Цепочка аргументов разными способами разбивается на две части: операцией между первым и вторым, вторым и третьим, третьим и четвертым аргументами и так далее. Варианты формул для левой и правой части цепочки вычисляются рекурсивно. Затем варианты комбинируются, конкатенируясь с тремя (кроме минуса) разными вариантами соединяющих их операций. Скобки обрамляют результат. Когда диапазон номеров аргументов сужается до одного, возвращается два варианта: Xj и ( - Xj). Знак минус обрабатывается особым образом, поскольку минус может быть унарной операцией.

Например, для четырех аргументов функция выдает 2 160 различных формулы, последняя из которых имеет вид:

(((( - X1) / ( - X2)) / ( - X3)) / ( - X4))

Автор: ildarovich

Орфографическая ошибка в конкатенируясь: конкатенируясь
FastCode Professional - быстрый поиск кода 1С

Похожие публикации

Генератор случайных чисел для диапазона с дробными и отрицательными числами

Генератор случайных символов

Модератору