diff options
author | William Carroll <wpcarro@gmail.com> | 2020-11-16T17·10+0000 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-11-16T17·10+0000 |
commit | 92ab94943ee51010dbe45b7ae86211dc8a5bd37f (patch) | |
tree | c53c0dcac98646f8e13ea5012094e6274332eb14 /scratch/facebook/hard/binary-adder.py | |
parent | 30f4d6f4a40bfae6bc15332a4e614d40d71fedb4 (diff) |
Start working on the "Hard" problems
Firstly, implement a function that adds two arguments together... without using the `+` operator. I need to drill this problem. Thankfully I took a Coursera course that taught me how to make a half-adder and a full-adder, but the recommended solution for this is a bit more difficult.
Diffstat (limited to 'scratch/facebook/hard/binary-adder.py')
-rw-r--r-- | scratch/facebook/hard/binary-adder.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/scratch/facebook/hard/binary-adder.py b/scratch/facebook/hard/binary-adder.py new file mode 100644 index 000000000000..f79a9f22b38b --- /dev/null +++ b/scratch/facebook/hard/binary-adder.py @@ -0,0 +1,22 @@ +import random + +def add(a, b): + """ + Return the sum of `a` and `b`. + """ + if b == 0: + return a + sum = a ^ b + carry = (a & b) << 1 + return add(sum, carry) + +################################################################################ +# Tests +################################################################################ + +for _ in range(10): + x, y = random.randint(0, 100), random.randint(0, 100) + print("{} + {} = {} == {}".format(x, y, x + y, add(x, y))) + assert add(x, y) == x + y + print("Pass!") +print("Success!") |