about summary refs log tree commit diff
path: root/scratch/facebook/hard/binary-adder.py
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-11-16T17·10+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-11-16T17·10+0000
commit92ab94943ee51010dbe45b7ae86211dc8a5bd37f (patch)
treec53c0dcac98646f8e13ea5012094e6274332eb14 /scratch/facebook/hard/binary-adder.py
parent30f4d6f4a40bfae6bc15332a4e614d40d71fedb4 (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.py22
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!")