aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-173/walt-mankowski/README.md28
-rw-r--r--challenge-173/walt-mankowski/python/ch-1.py14
-rw-r--r--challenge-173/walt-mankowski/python/ch-2.py9
3 files changed, 51 insertions, 0 deletions
diff --git a/challenge-173/walt-mankowski/README.md b/challenge-173/walt-mankowski/README.md
index b9e53c1a92..798ac25682 100644
--- a/challenge-173/walt-mankowski/README.md
+++ b/challenge-173/walt-mankowski/README.md
@@ -2,6 +2,8 @@ Solutions by Walt Mankowski.
# Perl Weekly Challenge #173: Esthetic Numbers and Sylvester's Sequence
+I did this week's challenge in Perl and Python.
+
## Task #1: Esthetic Numbers
For this task we're given a number _n_ and need to determine if it's an Esthetic Number. An **Esthetic Number** is a positive integer where every pair of adjacent digits differ in value by exactly 1.
@@ -18,6 +20,12 @@ sub is_esthetic($n) {
}
```
+Python is more of a stickler about types than Perl, so to turn it into an array of digits I had to first turn it into a string. Then you can treat it as an array, and I turned each character back into an integer. That sounds like a lot of work, but it's just a one-liner with a linst comprehension:
+
+```python
+d = [int(c) for c in str(n)]
+```
+
## Task 2: Sylvester's Sequence
For this task we need to generate the first 10 terms of [Sylvester's Sequence](https://en.wikipedia.org/wiki/Sylvester%27s_sequence). **Sylvester's Sequence** is an integer sequence where every term is the product of all the previous terms, plus one.
@@ -32,3 +40,23 @@ my @sylvester;
push @sylvester, 1 + product @sylvester while @sylvester < 10;
say for @sylvester;
```
+
+Python has the equivalent of `bigint` built-in, so I didn't need to do anything special there. Python has `sum` as a built-in function but it doesn't have `prod`. There are a few different ways to do write it; I chose to use the `reduce` function from the `functools` package:
+
+```python
+def product(lst):
+ return reduce(lambda x,y: x*y, lst, 1)
+```
+
+But it's so short that I decided to just write it inline. Here's my full program:
+
+```python
+from functools import reduce
+
+sylvester = []
+while len(sylvester) < 10:
+ sylvester.append(reduce(lambda x,y: x*y, sylvester, 1) + 1)
+
+for syl in sylvester:
+ print(syl)
+```
diff --git a/challenge-173/walt-mankowski/python/ch-1.py b/challenge-173/walt-mankowski/python/ch-1.py
new file mode 100644
index 0000000000..f987ce2eff
--- /dev/null
+++ b/challenge-173/walt-mankowski/python/ch-1.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+import sys
+
+def is_esthetic(n):
+ d = [int(c) for c in str(n)]
+ for i in range(1, len(d)):
+ if abs(d[i-1]-d[i]) != 1:
+ return False
+ return True
+
+n = int(sys.argv[1])
+print(f'{n} {"is" if is_esthetic(n) else "is not"} an esthetic number')
+
+
diff --git a/challenge-173/walt-mankowski/python/ch-2.py b/challenge-173/walt-mankowski/python/ch-2.py
new file mode 100644
index 0000000000..e12d79a883
--- /dev/null
+++ b/challenge-173/walt-mankowski/python/ch-2.py
@@ -0,0 +1,9 @@
+#!/usr/bin/env python
+from functools import reduce
+
+sylvester = []
+while len(sylvester) < 10:
+ sylvester.append(reduce(lambda x,y: x*y, sylvester, 1) + 1)
+
+for syl in sylvester:
+ print(syl)