У меня в голове возникает эта идея генерировать и оценивать случайные математические выражения. Итак, я решил попробовать и разработать алгоритм, прежде чем кодировать его для тестирования.
Пример:
Вот несколько примеров выражений, которые я хочу генерировать случайным образом:
4 + 2 [easy]
3 * 6 - 7 + 2 [medium]
6 * 2 + (5 - 3) * 3 - 8 [hard]
(3 + 4) + 7 * 2 - 1 - 9 [hard]
5 - 2 + 4 * (8 - (5 + 1)) + 9 [harder]
(8 - 1 + 3) * 6 - ((3 + 7) * 2) [harder]
Эти легкие и средние из них являются довольно прямо вперед. Случайные int
s разделены случайными операторами, здесь нет ничего сумасшедшего. Но у меня возникли проблемы с началом работы с чем-то, что могло бы создать один из сложных и сложных примеров. Я даже не уверен, что один алгоритм может дать мне последние два.
Что я рассматриваю:
Я не могу сказать, что испробовал эти идеи, потому что на самом деле я не хотел тратить много времени, двигаясь в направлении, которое не имело шансов работать в первую очередь. Но все же я подумал о паре решений:
- Использование деревьев
- Использование регулярных выражений
- Использование сумасшедшего цикла for-type (безусловно, худшего)
Что я ищу:
Я хотел бы знать, какой путь вы считаете лучшим, между решениями, которые я рассмотрел, и вашими собственными идеями.
Если вы видите хороший способ начать, я был бы признателен за лидерство в правильном направлении, например, с началом алгоритма или его общей структурой.
Также обратите внимание, что мне придется оценить эти выражения. Это можно сделать либо после генерации выражения, либо во время его создания. Если вы примите это во внимание в своем ответе, это здорово.
Я не ищу ничего связанного с языком, но для записи, я думаю о реализации этого в Objective-C, поскольку это язык, с которым я больше всего работаю в последнее время.
Эти примеры не включали :
оператор, так как я только хочу манипулировать int
s, и этот оператор добавляет много проверок. Если ваш ответ дает решение по этому вопросу, это здорово.
Если мой вопрос нуждается в уточнении, пожалуйста, задавайте в комментариях. Спасибо за вашу помощь.