aboutsummaryrefslogtreecommitdiff
path: root/challenge-066
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-06-28 21:11:53 +0100
committerGitHub <noreply@github.com>2020-06-28 21:11:53 +0100
commita4ef8153a7df3aaebe5ec3c28b508041175e4dd2 (patch)
tree41a11f52647ca2310f554dce80e18131b8442de0 /challenge-066
parentd05736d272d9e28442f1ea13f2b8a584772e6633 (diff)
parentd5cb0f767f6dd17e0179632d1fabc66221604744 (diff)
downloadperlweeklychallenge-club-a4ef8153a7df3aaebe5ec3c28b508041175e4dd2.tar.gz
perlweeklychallenge-club-a4ef8153a7df3aaebe5ec3c28b508041175e4dd2.tar.bz2
perlweeklychallenge-club-a4ef8153a7df3aaebe5ec3c28b508041175e4dd2.zip
Merge pull request #1878 from waltman/branch-for-challenge-066
Branch for challenge 066
Diffstat (limited to 'challenge-066')
-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)