aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-01-25 17:37:17 +0100
committerAbigail <abigail@abigail.be>2021-01-25 17:40:44 +0100
commite17a558b2ebc880537e1743945304532eb2263bb (patch)
tree1350eff50f3e4284132069858c9bd8ec2f04400c
parente589f2892916894b3e404ba98fed1236886cb8a9 (diff)
downloadperlweeklychallenge-club-e17a558b2ebc880537e1743945304532eb2263bb.tar.gz
perlweeklychallenge-club-e17a558b2ebc880537e1743945304532eb2263bb.tar.bz2
perlweeklychallenge-club-e17a558b2ebc880537e1743945304532eb2263bb.zip
Python solution for week 2, part 2
-rw-r--r--challenge-002/abigail/README.md2
-rw-r--r--challenge-002/abigail/python/ch-2.py63
2 files changed, 65 insertions, 0 deletions
diff --git a/challenge-002/abigail/README.md b/challenge-002/abigail/README.md
index 10b469478b..4642bfbfa6 100644
--- a/challenge-002/abigail/README.md
+++ b/challenge-002/abigail/README.md
@@ -40,3 +40,5 @@ one number per line. Programs will use an option, -t (to base 35), or
* [Lua](lua/ch-2.lua)
* [Node](node/ch-2.js)
* [Perl](perl/ch-2.pl)
+* [Python](python/ch-2.py)
+* [Ruby](ruby/ch-2.by)
diff --git a/challenge-002/abigail/python/ch-2.py b/challenge-002/abigail/python/ch-2.py
new file mode 100644
index 0000000000..22fe4fcaf0
--- /dev/null
+++ b/challenge-002/abigail/python/ch-2.py
@@ -0,0 +1,63 @@
+#!/opt/local/bin/python
+
+#
+# See ../READ.md
+#
+
+#
+# Run as python ch-2.py {-f | -t} < input-file
+#
+
+import fileinput
+import sys
+import getopt
+
+BASE = 35
+
+#
+# Parse options
+#
+do_to_base = 0
+do_from_base = 0
+opts, args = getopt . getopt (sys . argv [1:], 'ft')
+
+for opt, val in opts:
+ if opt == "-f":
+ do_from_base = 1
+ elif opt == "-t":
+ do_to_base = 1
+
+if do_to_base + do_from_base != 1:
+ print "Need exactly one of -f or -t"
+ sys . exit (1)
+
+
+#
+# Translate a base 10 number to base 35
+#
+def to_base (number):
+ out = ""
+ while number > 0:
+ rest = number % BASE
+ if rest < 10:
+ char = str (rest)
+ else:
+ char = chr (65 + rest - 10)
+ out = char + out
+ number = int (number / BASE)
+ return out
+
+
+#
+# Translate a number from base BASE to base 10
+#
+def from_base (number):
+ return int (number, BASE)
+
+#
+# Need to clean argv, else fileinput will try to open a file
+#
+sys . argv [1:] = []
+
+for line in fileinput . input ():
+ print from_base (line) if do_from_base else to_base (int (line))