aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-11-26 00:08:20 +0100
committerAbigail <abigail@abigail.be>2021-11-27 14:30:25 +0100
commit2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2 (patch)
tree6a6474a4c0b8567a5db4ea0fe1888b70aa80cf48
parenta0298e354570ba3ebf90abaeaf9f2af3b58702e7 (diff)
downloadperlweeklychallenge-club-2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2.tar.gz
perlweeklychallenge-club-2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2.tar.bz2
perlweeklychallenge-club-2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2.zip
More solutions for week 133
-rw-r--r--challenge-133/abigail/README.md9
-rw-r--r--challenge-133/abigail/bc/ch-2.bc59
-rw-r--r--challenge-133/abigail/go/ch-2.go58
-rw-r--r--challenge-133/abigail/java/ch-2.java52
-rw-r--r--challenge-133/abigail/pascal/ch-2.p78
-rw-r--r--challenge-133/abigail/r/ch-1.r16
-rw-r--r--challenge-133/abigail/r/ch-2.r51
-rw-r--r--challenge-133/abigail/scheme/ch-2.scm50
-rw-r--r--challenge-133/abigail/tcl/ch-2.tcl50
9 files changed, 423 insertions, 0 deletions
diff --git a/challenge-133/abigail/README.md b/challenge-133/abigail/README.md
index 04abd4b20d..0399dc3ce6 100644
--- a/challenge-133/abigail/README.md
+++ b/challenge-133/abigail/README.md
@@ -13,11 +13,13 @@
* [bc][bc/ch-1.bc)
* [C][c/ch-1.c)
* [Go][go/ch-1.go)
+* [Java][java/ch-1.java)
* [Lua][lua/ch-1.lua)
* [Node.js][node/ch-1.js)
* [Pascal][pascal/ch-1.p)
* [Perl][perl/ch-1a.pl)
* [Python][python/ch-1.py)
+* [R][r/ch-1.r)
* [Ruby][ruby/ch-1.rb)
* [Scheme][scheme/ch-1.scm)
* [Tcl][tcl/ch-1.tcl)
@@ -26,9 +28,16 @@
* [AWK](awk/ch-2.awk)
* [Bash](awk/ch-2.awk)
+* [bc][bc/ch-2.bc)
* [C](c/ch-2.c)
+* [Go][go/ch-2.go)
+* [Java][java/ch-2.java)
* [Lua](lua/ch-2.lua)
* [Node.js](node/ch-2.js)
+* [Pascal][pascal/ch-1.p)
* [Perl](perl/ch-2.pl)
* [Python](python/ch-2.py)
+* [R][r/ch-2.r)
* [Ruby](ruby/ch-2.rb)
+* [Scheme][scheme/ch-2.scm)
+* [Tcl][tcl/ch-2.tcl)
diff --git a/challenge-133/abigail/bc/ch-2.bc b/challenge-133/abigail/bc/ch-2.bc
new file mode 100644
index 0000000000..2404517d6a
--- /dev/null
+++ b/challenge-133/abigail/bc/ch-2.bc
@@ -0,0 +1,59 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: bc ch-2.bc < input-file
+#
+
+base = 10
+
+define digit_sum (m) {
+ auto sum
+ sum = 0
+ while (m > 0) {
+ sum = sum + (m % base)
+ m = (m / base)
+ }
+ return (sum)
+}
+
+small_primes [ 0] = 2
+small_primes [ 1] = 3
+small_primes [ 2] = 5
+small_primes [ 3] = 7
+small_primes [ 4] = 11
+small_primes [ 5] = 13
+small_primes [ 6] = 17
+small_primes [ 7] = 19
+small_primes [ 8] = 23
+small_primes [ 9] = 29
+small_primes [10] = 31
+
+count = 10
+
+n = 0
+while (count > 0) {
+ n = n + 1
+ sum = 0
+ fc = 0
+ r = n
+ for (d = 0; d < 11 && n > 1; d ++) {
+ prime = small_primes [d]
+ while (r % prime == 0) {
+ sum = sum + digit_sum (prime)
+ fc = fc + 1
+ r = r / prime
+ }
+ }
+ if (r > 1) {
+ sum = sum + digit_sum (r)
+ fc = fc + 1
+ }
+ if (fc > 1 && sum == digit_sum (n)) {
+ n
+ count = count - 1
+ }
+}
+
+halt
diff --git a/challenge-133/abigail/go/ch-2.go b/challenge-133/abigail/go/ch-2.go
new file mode 100644
index 0000000000..bd21f3b3e7
--- /dev/null
+++ b/challenge-133/abigail/go/ch-2.go
@@ -0,0 +1,58 @@
+package main
+
+//
+// See ../README.md
+//
+
+//
+// Run as: go run ch-2.go
+//
+
+import (
+ "fmt"
+)
+
+func digitsum (numbers [] int) int {
+ base := 10
+ sum := 0
+ for _, number := range numbers {
+ for number > 0 {
+ sum += number % base
+ number /= base
+ }
+ }
+ return sum
+}
+
+
+func factors (number int) [] int {
+ var f [] int
+ small_primes := [] int {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}
+ d := 0
+ for d < len (small_primes) && number > 1 {
+ prime := small_primes [d]
+ for number % prime == 0 {
+ f = append (f, prime)
+ number /= prime
+ }
+ d ++
+ }
+ if (number > 1) {
+ f = append (f, number)
+ }
+
+ return (f)
+}
+
+func main () {
+ count := 10
+ n := 0
+ for count > 0 {
+ n = n + 1
+ f := factors (n)
+ if len (f) > 1 && digitsum ([] int {n}) == digitsum (f) {
+ fmt . Println (n)
+ count = count - 1
+ }
+ }
+}
diff --git a/challenge-133/abigail/java/ch-2.java b/challenge-133/abigail/java/ch-2.java
new file mode 100644
index 0000000000..335a889d75
--- /dev/null
+++ b/challenge-133/abigail/java/ch-2.java
@@ -0,0 +1,52 @@
+//
+// See ../README.md
+//
+
+//
+// Run as: ln ch-2.java ch2.java; javac ch2.java; java ch2 < input-file
+//
+
+import java.util.*;
+
+public class ch2 {
+ public static int base = 10;
+ public static int count = 10;
+ public static int [] small_primes =
+ {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31};
+
+ public static int digitsum (int number) {
+ int sum = 0;
+ while (number > 0) {
+ sum += number % base;
+ number /= base;
+ }
+ return (sum);
+ }
+
+ public static void main (String [] args) {
+ int number = 1;
+ int c = count;
+ while (c > 0) {
+ int ds_n = digitsum (++ number);
+ int ds_f = 0;
+ int n = 0;
+ int copy = number;
+ for (int i = 0; i < small_primes . length && copy > 1; i ++) {
+ int prime = small_primes [i];
+ while (copy % prime == 0) {
+ ds_f += digitsum (prime);
+ n ++;
+ copy /= prime;
+ }
+ }
+ if (copy > 1) {
+ ds_f += digitsum (copy);
+ n ++;
+ }
+ if (n > 1 && ds_n == ds_f) {
+ System . out . println (number);
+ c --;
+ }
+ }
+ }
+}
diff --git a/challenge-133/abigail/pascal/ch-2.p b/challenge-133/abigail/pascal/ch-2.p
new file mode 100644
index 0000000000..00b8d55b85
--- /dev/null
+++ b/challenge-133/abigail/pascal/ch-2.p
@@ -0,0 +1,78 @@
+Program ch2;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-2.out ch-2.p; ./ch-2.out < input-file *)
+(* *)
+
+type
+ factor_type = array of Integer;
+
+const
+ small_primes: Array of Integer =
+ (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31);
+ base = 10;
+ count = 10;
+
+function factors (number: Integer): factor_type;
+ var
+ out: factor_type = ();
+ index, prime: Integer;
+ i: Integer = 0;
+
+ begin
+ for index := 0 to length (small_primes) - 1 do begin
+ prime := small_primes [index];
+ while number mod prime = 0 do begin
+ setlength (out, i + 1);
+ out [i] := prime;
+ i := i + 1;
+ number := number div prime;
+ end;
+ end;
+ if number > 1 then begin
+ setlength (out, i + 1);
+ out [i] := number;
+ end;
+
+ factors := out;
+ end;
+
+
+function digitsum (numbers: Array of Integer): Integer;
+ var
+ sum: integer = 0;
+ i, number: integer;
+
+ begin
+ for i := 0 to length (numbers) - 1 do begin
+ number := numbers [i];
+ while number > 0 do begin
+ sum := sum + (number mod base);
+ number := number div base;
+ end
+ end;
+
+ digitsum := sum;
+ end;
+
+var
+ ff: factor_type;
+ nn: array [0 .. 0] of integer;
+ c: integer = count;
+ n: integer = 1;
+
+begin
+ while c > 0 do begin
+ inc (n);
+ ff := factors (n);
+ nn [0] := n;
+ if (length (ff) > 1) and (digitsum (nn) = digitsum (ff)) then begin
+ writeln (n);
+ dec (c);
+ end
+ end
+end.
diff --git a/challenge-133/abigail/r/ch-1.r b/challenge-133/abigail/r/ch-1.r
new file mode 100644
index 0000000000..345e8a0f0d
--- /dev/null
+++ b/challenge-133/abigail/r/ch-1.r
@@ -0,0 +1,16 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: Rscript ch-1.r < input-file
+#
+
+stdin <- file ('stdin', 'r')
+repeat {
+ n <- readLines (stdin, n = 1)
+ if (length (n) == 0) {
+ break
+ }
+ cat (floor (exp (log (as.integer (n)) / 2)), "\n")
+}
diff --git a/challenge-133/abigail/r/ch-2.r b/challenge-133/abigail/r/ch-2.r
new file mode 100644
index 0000000000..823d51e764
--- /dev/null
+++ b/challenge-133/abigail/r/ch-2.r
@@ -0,0 +1,51 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: Rscript ch-2.r < input-file
+#
+
+small_primes <- c (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31)
+base <- 10
+count <- 10
+
+factors <- function (n) {
+ f <- c ()
+ for (i in 1 : length (small_primes)) {
+ prime <- small_primes [i]
+ while (n %% prime == 0) {
+ f [1 + length (f)] <- prime
+ n <- n / prime
+ }
+ if (n == 1) {
+ break
+ }
+ }
+ if (n > 1) {
+ f [1 + length (f)] <- n
+ }
+ return (f)
+}
+
+digitsum <- function (numbers) {
+ sum <- 0
+ for (number in numbers) {
+ while (number > 0) {
+ sum <- sum + (number %% base)
+ number <- number %/% base
+ }
+ }
+ return (sum)
+}
+
+
+num <- 0
+while (count > 0) {
+ num <- num + 1
+ f <- factors (num)
+ if (length (f) > 1 && digitsum (c (num)) == digitsum (f)) {
+ cat (num, "\n")
+ count <- count - 1
+ }
+}
diff --git a/challenge-133/abigail/scheme/ch-2.scm b/challenge-133/abigail/scheme/ch-2.scm
new file mode 100644
index 0000000000..b71c1df3dc
--- /dev/null
+++ b/challenge-133/abigail/scheme/ch-2.scm
@@ -0,0 +1,50 @@
+;;;
+;;; See ../README.md
+;;;
+
+;;;
+;;; Run as: guile --no-auto-compile ch-2.scm
+;;;
+
+(use-modules (srfi srfi-1))
+
+(define small_primes (list 2 3 5 7 11 13 17 19 23 29 31))
+(define base 10)
+(define count 10)
+
+(define (_factors number primes)
+ (cond ((null? primes) (if (> number 1) (list number) '()))
+ ((= (modulo number (car primes)) 0)
+ (append (list (car primes))
+ (_factors (/ number (car primes)) primes)))
+ (else (_factors number (cdr primes)))))
+
+
+(define (factors number) (_factors number small_primes))
+
+(define (_digitsum number)
+ (if (= number 0) 0
+ (+ (modulo number base) (_digitsum (floor/ number base)))))
+
+(define (digitsum numbers)
+ (fold + 0 (map _digitsum numbers)))
+
+
+(define (smith count from)
+ (define f)
+ (if (> count 0)
+ (begin
+ (set! f (factors from))
+ (if (and (not (null? (cdr f)))
+ (= (digitsum (list from)) (digitsum f)))
+ (begin
+ (display from)(newline)
+ (smith (- count 1) (+ from 1))
+ )
+ (smith count (+ from 1))
+ )
+ )
+ )
+)
+
+(smith count 2)
diff --git a/challenge-133/abigail/tcl/ch-2.tcl b/challenge-133/abigail/tcl/ch-2.tcl
new file mode 100644
index 0000000000..fe68f5bbfe
--- /dev/null
+++ b/challenge-133/abigail/tcl/ch-2.tcl
@@ -0,0 +1,50 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: tclsh ch-2.tcl
+#
+
+set small_primes {2 3 5 7 11 13 17 19 23 29 31}
+set count 10
+set base 10
+
+
+proc factors {number} {
+ global small_primes
+ set f {}
+ foreach prime $small_primes {
+ while {($number % $prime) == 0} {
+ lappend f $prime
+ set number [expr $number / $prime]
+ }
+ }
+ if {$number > 1} {
+ lappend f $number
+ }
+ return $f
+}
+
+proc digitsum {numbers} {
+ global base
+ set sum 0
+ foreach number $numbers {
+ while {$number > 0} {
+ incr sum [expr $number % $base]
+ set number [expr $number / $base]
+ }
+ }
+ return $sum
+}
+
+set n 1
+while {$count > 0} {
+ incr n
+ set ff [factors $n]
+ if {[llength $ff] > 1 && [digitsum $n] == [digitsum $ff]} {
+ puts $n
+ incr count -1
+ }
+}
+