This notebook was prepared by Donne Martin. Source and license info is on GitHub.

Challenge Notebook

Problem: Create a class with an insert method to insert an int to a list. It should also support calculating the max, min, mean, and mode in O(1).

Constraints

  • Can we assume the inputs are valid?
    • No
  • Is there a range of inputs?
    • 0 <= item <= 100
  • Should mean return a float?
    • Yes
  • Should the other results return an int?
    • Yes
  • If there are multiple modes, what do we return?
    • Any of the modes
  • Can we assume this fits memory?
    • Yes

Test Cases

  • None -> TypeError
  • [] -> ValueError
  • [5, 2, 7, 9, 9, 2, 9, 4, 3, 3, 2]
    • max: 9
    • min: 2
    • mean: 55
    • mode: 9 or 2

Algorithm

Refer to the Solution Notebook. If you are stuck and need a hint, the solution notebook's algorithm discussion might be a good place to start.

Code

In [ ]:
class Solution(object):

    def __init__(self, upper_limit=100):
        # TODO: Implement me
        pass

    def insert(self, val):
        # TODO: Implement me
        pass

Unit Test

The following unit test is expected to fail until you solve the challenge.

In [ ]:
# %load test_math_ops.py
import unittest


class TestMathOps(unittest.TestCase):

    def test_math_ops(self):
        solution = Solution()
        self.assertRaises(TypeError, solution.insert, None)
        solution.insert(5)
        solution.insert(2)
        solution.insert(7)
        solution.insert(9)
        solution.insert(9)
        solution.insert(2)
        solution.insert(9)
        solution.insert(4)
        solution.insert(3)
        solution.insert(3)
        solution.insert(2)
        self.assertEqual(solution.max, 9)
        self.assertEqual(solution.min, 2)
        self.assertEqual(solution.mean, 5)
        self.assertTrue(solution.mode in (2, 9))
        print('Success: test_math_ops')


def main():
    test = TestMathOps()
    test.test_math_ops()


if __name__ == '__main__':
    main()

Solution Notebook

Review the Solution Notebook for a discussion on algorithms and code solutions.