diff options
| author | Abigail <abigail@abigail.be> | 2021-11-26 00:08:20 +0100 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-11-27 14:30:25 +0100 |
| commit | 2e7a94b0d7ffd661bc2ead718e2aac99f1de68d2 (patch) | |
| tree | 6a6474a4c0b8567a5db4ea0fe1888b70aa80cf48 | |
| parent | a0298e354570ba3ebf90abaeaf9f2af3b58702e7 (diff) | |
| download | perlweeklychallenge-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.md | 9 | ||||
| -rw-r--r-- | challenge-133/abigail/bc/ch-2.bc | 59 | ||||
| -rw-r--r-- | challenge-133/abigail/go/ch-2.go | 58 | ||||
| -rw-r--r-- | challenge-133/abigail/java/ch-2.java | 52 | ||||
| -rw-r--r-- | challenge-133/abigail/pascal/ch-2.p | 78 | ||||
| -rw-r--r-- | challenge-133/abigail/r/ch-1.r | 16 | ||||
| -rw-r--r-- | challenge-133/abigail/r/ch-2.r | 51 | ||||
| -rw-r--r-- | challenge-133/abigail/scheme/ch-2.scm | 50 | ||||
| -rw-r--r-- | challenge-133/abigail/tcl/ch-2.tcl | 50 |
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 + } +} + |
