#33: Random Arithmetic Problems

Tagged as challenge

Written on 2018-01-31

Part 1

Write a function random-expression which generates a random math expression built up by numbers, +, unary/binary -, *, /, ^, and sqrt. There should be two outputs: (1) the generated expression in unevaluated form, and (2) the evaluated answer. Decide on and explain your choice of arguments to random-expression to bound the size of the expression.

Bonus: Write this in both a dynamically typed language and a strictly typed language.

Part 2

Extend evaluate-expression to take into account a variable called operator-table which contains the operators used in random generation and their arities. For example, the default table might look like this in Common Lisp:

(defvar *operator-table*
  '((+    2)
    (-    1 2)    ; unary and binary -
    (*    2)
    (/    2)
    (expt 2)
    (sqrt 1)))

Feel free to add information to the table as you see fit.

Unless otherwise credited all material copyright © 2010–2018 by Robert Smith