Может использовать множество пар { вход, выход }? При этом можно было бы искать только общий алгоритм - применимый для всех таких пар.
Сейчас для конкретного входа ищется такая последовательность вызовов некоторых функций, которая приводит данные на входе к желаемому результату. Если полученных вариантов много, то это плохо.
Можно было бы запустить поиск с другим входом и другими выходным результатом и после этого пересечь полученые последовательности вызовов функций.
Останутся только самые общие последовательности - существенно меньшее количество.