aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-133/abigail/README.md6
-rw-r--r--challenge-133/abigail/awk/ch-2.awk67
-rw-r--r--challenge-133/abigail/bash/ch-2.sh55
-rw-r--r--challenge-133/abigail/lua/ch-2.lua53
-rw-r--r--challenge-133/abigail/node/ch-2.js52
-rw-r--r--challenge-133/abigail/python/ch-2.py40
-rw-r--r--challenge-133/abigail/ruby/ch-2.rb53
7 files changed, 326 insertions, 0 deletions
diff --git a/challenge-133/abigail/README.md b/challenge-133/abigail/README.md
index 48c489dd8e..04abd4b20d 100644
--- a/challenge-133/abigail/README.md
+++ b/challenge-133/abigail/README.md
@@ -24,5 +24,11 @@
## Part 2
+* [AWK](awk/ch-2.awk)
+* [Bash](awk/ch-2.awk)
* [C](c/ch-2.c)
+* [Lua](lua/ch-2.lua)
+* [Node.js](node/ch-2.js)
* [Perl](perl/ch-2.pl)
+* [Python](python/ch-2.py)
+* [Ruby](ruby/ch-2.rb)
diff --git a/challenge-133/abigail/awk/ch-2.awk b/challenge-133/abigail/awk/ch-2.awk
new file mode 100644
index 0000000000..b9d4e413f7
--- /dev/null
+++ b/challenge-133/abigail/awk/ch-2.awk
@@ -0,0 +1,67 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-2.awk < input-file
+#
+
+function digit_sum (number, sum) {
+ sum = 0
+ while (number > 0) {
+ sum += number % 10
+ number = int (number / 10)
+ }
+ return sum
+}
+
+
+#
+# Factorize a number, given a set of small primes. This will work
+# for numbers up to, but not including, p^2, where p is the smallest
+# prime not included in the set. For the given set, the smallest number
+# which fails to factorize is 37^2 == 1369.
+#
+# We'll return a string containing all the factors.
+#
+function factorize (n, out, i, prime, c) {
+ out = ""
+ c = 0
+
+ for (i in small_primes) {
+ prime = small_primes [i]
+ while (n % prime == 0) {
+ out = out prime
+ n /= prime
+ c ++
+ }
+ }
+
+ if (n > 1) {
+ out = out n
+ c ++
+ }
+
+ return (c ";" out)
+}
+
+BEGIN {
+ split ("2 3 5 7 11 13 17 19 23 29 31", small_primes, " ")
+}
+
+BEGIN {
+ try = 1
+ count = 0
+ while (count < 10) {
+ split (factorize(try), info, ";")
+ if (info [1] > 1 && digit_sum(try) == digit_sum(info [2])) {
+ print try
+ count ++
+ }
+ try ++
+ }
+}
+
+
diff --git a/challenge-133/abigail/bash/ch-2.sh b/challenge-133/abigail/bash/ch-2.sh
new file mode 100644
index 0000000000..ae1b7f9ac1
--- /dev/null
+++ b/challenge-133/abigail/bash/ch-2.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+#
+# See ../README.md
+#
+
+#
+# Run as: bash ch-2.sh
+#
+
+set -f
+
+small_primes=(2 3 5 7 11 13 17 19 23 29 31)
+
+function factorize () {
+ factors=()
+ local num=$1
+ for prime in "${small_primes[@]}"
+ do while ((num % prime == 0))
+ do ((num = num / prime))
+ factors+=($prime)
+ done
+ done
+ if ((num > 1))
+ then factors+=($num)
+ fi
+}
+
+
+function digit_sum () {
+ digit_sum=0
+ for num in "$@"
+ do while ((num > 0))
+ do ((digit_sum += num % 10))
+ ((num /= 10))
+ done
+ done
+}
+
+
+count=0
+number=1
+
+while ((count < 10))
+do factorize $number
+ if ((${#factors[@]} > 1))
+ then digit_sum ${factors[@]}; ds1=$digit_sum
+ digit_sum $number; ds2=$digit_sum
+ if ((ds1 == ds2))
+ then echo $number
+ ((count = count + 1))
+ fi
+ fi
+ ((number = number + 1))
+done
diff --git a/challenge-133/abigail/lua/ch-2.lua b/challenge-133/abigail/lua/ch-2.lua
new file mode 100644
index 0000000000..45120a21b3
--- /dev/null
+++ b/challenge-133/abigail/lua/ch-2.lua
@@ -0,0 +1,53 @@
+#!/opt/local/bin/lua
+
+--
+-- See ../README.md
+--
+
+--
+-- Run as: lua ch-2.lua
+--
+
+local small_primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}
+
+function factorize (num)
+ local out = {}
+ for _, prime in ipairs (small_primes) do
+ while num % prime == 0 do
+ table . insert (out, prime)
+ num = num / prime
+ end
+ end
+ if num > 1 then
+ table . insert (out, num)
+ end
+ return (out)
+end
+
+
+function digit_sum (numbers)
+ local sum = 0
+ for _, number in pairs (numbers) do
+ while number > 0 do
+ sum = sum + number % 10
+ number = math . floor (number / 10)
+ end
+ end
+ return (sum)
+end
+
+
+local number = 1
+local count = 0
+
+
+while count < 10 do
+ local factors = factorize (number)
+ if #factors > 1 then
+ if digit_sum ({number}) == digit_sum (factors) then
+ print (number)
+ count = count + 1
+ end
+ end
+ number = number + 1
+end
diff --git a/challenge-133/abigail/node/ch-2.js b/challenge-133/abigail/node/ch-2.js
new file mode 100644
index 0000000000..1000e451d7
--- /dev/null
+++ b/challenge-133/abigail/node/ch-2.js
@@ -0,0 +1,52 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-2.js < input-file
+//
+
+let small_primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
+
+function factorize (num) {
+ let out = []
+ small_primes . forEach (prime => {
+ while (num % prime == 0) {
+ out . push (prime)
+ num /= prime
+ }
+ })
+
+ if (num > 1) {
+ out . push (num)
+ }
+
+ return out
+}
+
+
+function digit_sum (numbers) {
+ let sum = 0
+ numbers . forEach (number => {
+ while (number > 0) {
+ sum += number % 10
+ number = Math . floor (number / 10)
+ }
+ })
+ return sum
+}
+
+
+let count = 0
+let number = 1
+
+while (count < 10) {
+ let factors = factorize (number)
+ if (factors . length > 1 && digit_sum ([number]) == digit_sum (factors)) {
+ console . log (number)
+ count ++
+ }
+ number ++
+}
diff --git a/challenge-133/abigail/python/ch-2.py b/challenge-133/abigail/python/ch-2.py
new file mode 100644
index 0000000000..7fd37368d9
--- /dev/null
+++ b/challenge-133/abigail/python/ch-2.py
@@ -0,0 +1,40 @@
+#!/opt/local/bin/python
+
+#
+# See ../README.md
+#
+
+#
+# Run as: python ch-2.py < input-file
+#
+
+def digit_sum (numbers):
+ sum = 0
+ for num in numbers:
+ while num > 0:
+ sum = sum + num % 10
+ num = num // 10
+ return (sum)
+
+small_primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31)
+
+def factorize (num):
+ out = []
+ for prime in small_primes:
+ while num % prime == 0:
+ out . append (prime)
+ num = num / prime
+ if num > 1:
+ out . append (num)
+ return (out)
+
+
+number = 1
+count = 0
+
+while count < 10:
+ factors = factorize (number)
+ if len (factors) > 1 and digit_sum ([number]) == digit_sum (factors):
+ print (number)
+ count = count + 1
+ number = number + 1
diff --git a/challenge-133/abigail/ruby/ch-2.rb b/challenge-133/abigail/ruby/ch-2.rb
new file mode 100644
index 0000000000..22b3bae8f0
--- /dev/null
+++ b/challenge-133/abigail/ruby/ch-2.rb
@@ -0,0 +1,53 @@
+#!/usr/bin/ruby
+
+#
+# See ../README.md
+#
+
+#
+# Run as: ruby ch-2.rb
+#
+
+$small_primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
+
+def factorize (num)
+ factors = []
+ $small_primes . each do
+ | prime |
+ while num % prime == 0 do
+ factors . push(prime)
+ num /= prime
+ end
+ end
+ if num > 1 then
+ factors . push (num)
+ end
+ return (factors)
+end
+
+
+def digit_sum (numbers)
+ sum = 0
+ numbers . each do
+ | num |
+ while num > 0 do
+ sum += num % 10
+ num /= 10
+ end
+ end
+ return sum
+end
+
+
+number = 1
+count = 0
+
+while count < 10 do
+ factors = factorize(number)
+ if factors . length > 1 and digit_sum([number]) == digit_sum(factors) then
+ puts (number)
+ count += 1
+ end
+ number += 1
+end
+