У мене в голові ця ідея, щоб генерувати та оцінювати випадкові математичні вирази. Отже, я вирішив дати йому зніматись і розробити алгоритм, перш ніж кодувати його для тестування.
Приклад:
Ось кілька прикладів виразів, які я хочу генерувати випадковим чином:
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]
Ці легкі і середні з них є досить прямо вперед. Випадкові ints розділені випадковими операторами, тут немає нічого божевільного. Але у мене виникають проблеми з тим, щоб почати щось із того, що могло б створити один із важких і важких прикладів. Я навіть не впевнений, що жоден алгоритм міг би дати мені останні два.
Що я розглядаю:
Я не можу сказати, що я спробував ці ідеї, тому що мені дуже не хотілося витрачати багато часу, рухаючись у напрямку, в якому не було шансів працювати в першу чергу. Але все ж я подумав про пару рішень:
- Використання дерев
- Використання регулярних виразів
- Використання шаленого циклу "для типу" (безумовно, найгірше)
Що я шукаю:
Мені хотілося б знати, яким шляхом ви вважаєте, що найкраще пройти між рішеннями, які я вважав, та вашими власними ідеями.
Якщо ви бачите хороший спосіб почати, я буду вдячний за лідер у правильному напрямку, наприклад, з початком роботи алгоритму або загальної структури його.
Також зауважте, що мені доведеться оцінити ці вирази. Це можна зробити або після генерування виразу, або під час його створення. Якщо ви врахуєте це у своїй відповіді, це чудово.
Я не шукаю нічого, що стосується мови, але для запису, я думаю про те, щоб реалізувати це в Objective-C, оскільки це мова, з якою я найбільше працюю останнім часом.
Ці приклади не включали :оператора, оскільки я хочу лише маніпулювати ints, і цей оператор додає багато перевірок. Якщо у вашій відповіді дано рішення, яке стосується цього, це чудово.
Якщо моє запитання потребує уточнення, будь ласка, запитайте у коментарях. Спасибі за вашу допомогу.