aboutsummaryrefslogtreecommitdiff
path: root/challenge-066/walt-mankowski/python
diff options
context:
space:
mode:
authorMarkus "Holli" Holzer <holli.holzer@gmail.com>2020-08-07 23:02:04 +0200
committerMarkus "Holli" Holzer <holli.holzer@gmail.com>2020-08-07 23:02:04 +0200
commitf70cc17c3c2b82f357bb1113ee633dbce08f860b (patch)
treefe770e01b34d4a23329ab3d1b67d1defd6d73be8 /challenge-066/walt-mankowski/python
parentdab3a93e36f8366f26846ad74fc2c427df63439e (diff)
parent050694a6678b9eb09149d807d314b6552e83f717 (diff)
downloadperlweeklychallenge-club-f70cc17c3c2b82f357bb1113ee633dbce08f860b.tar.gz
perlweeklychallenge-club-f70cc17c3c2b82f357bb1113ee633dbce08f860b.tar.bz2
perlweeklychallenge-club-f70cc17c3c2b82f357bb1113ee633dbce08f860b.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-066/walt-mankowski/python')
-rw-r--r--challenge-066/walt-mankowski/python/.python-version1
-rw-r--r--challenge-066/walt-mankowski/python/ch-1.py26
-rw-r--r--challenge-066/walt-mankowski/python/ch-2.py24
3 files changed, 51 insertions, 0 deletions
diff --git a/challenge-066/walt-mankowski/python/.python-version b/challenge-066/walt-mankowski/python/.python-version
new file mode 100644
index 0000000000..269aa9c86d
--- /dev/null
+++ b/challenge-066/walt-mankowski/python/.python-version
@@ -0,0 +1 @@
+3.8.3
diff --git a/challenge-066/walt-mankowski/python/ch-1.py b/challenge-066/walt-mankowski/python/ch-1.py
new file mode 100644
index 0000000000..1e0fc5ea5d
--- /dev/null
+++ b/challenge-066/walt-mankowski/python/ch-1.py
@@ -0,0 +1,26 @@
+from sys import argv
+
+def divide(m, n):
+ # handle 0 values first
+ if n == 0:
+ raise ZeroDivisionError('integer division or modulo by zero')
+ if m == 0:
+ return 0
+
+ # sign of the result
+ sign = -1 if (m < 0 and n > 0) or (m > 0 and n < 0) else 1
+
+ # now count how many times we can subtract abs(n) from abs(m)
+ (m, n) = tuple(abs(x) for x in (m,n))
+ count = 0
+ while m >= n:
+ m -= n
+ count += 1
+
+ if sign == -1 and m > 0:
+ return -(count + 1)
+ else:
+ return count * sign
+
+m, n = tuple(int(x) for x in argv[1:3])
+print(divide(m, n))
diff --git a/challenge-066/walt-mankowski/python/ch-2.py b/challenge-066/walt-mankowski/python/ch-2.py
new file mode 100644
index 0000000000..301fad1eda
--- /dev/null
+++ b/challenge-066/walt-mankowski/python/ch-2.py
@@ -0,0 +1,24 @@
+from sys import argv
+from math import log, sqrt, floor
+
+# check if n is within EPS of being a whole number
+def is_whole(n):
+ EPS = 1e-10
+ round = int(f'{n:.0f}')
+ return abs(round - n) < EPS
+
+# My algorithm is this:
+# Loop over all the m's from 2 to sqrt(N)
+# If m can be raised to an integer power to equal N, then log_m N is an integer
+
+N = int(argv[1])
+logn = log(N)
+found = False
+for m in range(2, int(sqrt(N))+1):
+ n = logn / log(m)
+ if is_whole(n):
+ print(f'{m}^{n:.0f}')
+ found = True
+
+if not found:
+ print(0)