diff options
| -rw-r--r-- | challenge-133/abigail/README.md | 6 | ||||
| -rw-r--r-- | challenge-133/abigail/awk/ch-2.awk | 67 | ||||
| -rw-r--r-- | challenge-133/abigail/bash/ch-2.sh | 55 | ||||
| -rw-r--r-- | challenge-133/abigail/lua/ch-2.lua | 53 | ||||
| -rw-r--r-- | challenge-133/abigail/node/ch-2.js | 52 | ||||
| -rw-r--r-- | challenge-133/abigail/python/ch-2.py | 40 | ||||
| -rw-r--r-- | challenge-133/abigail/ruby/ch-2.rb | 53 |
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 + |
