diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-01-23 19:46:16 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-23 19:46:16 +0000 |
| commit | a3ef8061e8b28fd26ff9aa4ee3fc9f39ceb55dc1 (patch) | |
| tree | e65b7cbfb63e9b6bbcdb6b173bfec9215e70151d | |
| parent | 919e4948116f4a0f1c1c2580b856dd221568dcb0 (diff) | |
| parent | 895121c6f016a222efcfe4a99df34b8138fb2055 (diff) | |
| download | perlweeklychallenge-club-a3ef8061e8b28fd26ff9aa4ee3fc9f39ceb55dc1.tar.gz perlweeklychallenge-club-a3ef8061e8b28fd26ff9aa4ee3fc9f39ceb55dc1.tar.bz2 perlweeklychallenge-club-a3ef8061e8b28fd26ff9aa4ee3fc9f39ceb55dc1.zip | |
Merge pull request #5552 from Abigail/abigail/week-148
Abigail/week 148
67 files changed, 2170 insertions, 0 deletions
diff --git a/challenge-148/abigail/awk/ch-1.awk b/challenge-148/abigail/awk/ch-1.awk new file mode 100644 index 0000000000..547cd72064 --- /dev/null +++ b/challenge-148/abigail/awk/ch-1.awk @@ -0,0 +1,19 @@ +#!/usr/bin/awk + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 +# + +# +# Run as: awk -f ch-1.awk +# + +BEGIN { + for (i = 0; i <= 100; i ++) { + if (! match (i, /^0$|[1789]|^2.|[35]$/)) { + printf ("%d ", i) + } + } + printf ("\n") +} + diff --git a/challenge-148/abigail/awk/ch-2.awk b/challenge-148/abigail/awk/ch-2.awk new file mode 100644 index 0000000000..7bbedf00a9 --- /dev/null +++ b/challenge-148/abigail/awk/ch-2.awk @@ -0,0 +1,113 @@ +#!/usr/bin/awk + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 +# + +# +# Run as: awk -f ch-2.awk +# + + +BEGIN { + COUNT = 5 + # + # Initialize out with high values. + # [1, 2, 3] will be values of the triples, [4] will be the sum + # + for (i = 1; i <= COUNT; i ++) { + out [i, 4] = 0 + for (j = 1; j <= 3; j ++) { + out [i, j] = 999999 + out [i, 4] += out [i, j] + } + } + + max_index = 1 # Index of largest sum + + for (k = 0; 3 * k + 2 <= out [max_index, 4]; k ++) { + a = 3 * k + 2 + f1 = k + 1 + f2 = 8 * k + 5 + + d1c = 0 + d2c = 0 + + # + # Find divisors of f1 + # + for (i = 1; i * i <= f1; i ++) { + if (f1 % i == 0) { + d1c = d1c + 1 + d1 [d1c] = i + if (i != f1 / i) { + d1c = d1c + 1 + d1 [d1c] = f1 / i + } + } + } + + # + # Find divisors for f2, which are squares + # + for (i = 1; i * i <= f2; i ++) { + if (f2 % i == 0) { + s1 = sqrt (i) + s2 = sqrt (f2 / i) + if (s1 == int (s1)) { + d2c = d2c + 1 + d2 [d2c] = s1 + } + if (s2 == int (s2) && s1 != s2) { + d2c = d2c + 1 + d2 [d2c] = s2 + } + } + } + + for (i = 1; i <= d1c; i ++) { + for (j = 1; j <= d2c; j ++) { + b = d1 [i] * d2 [j] + c = f1 * f1 * f2 / (b * b) + if (a + b + c < out [max_index, 4]) { + # + # Skip duplicates + # + seen = 0 + for (m = 1; m <= COUNT; m ++) { + if (out [m, 1] == a && out [m, 2] == b) { + seen = 1 + } + } + if (seen) { + break + } + + out [max_index, 1] = a + out [max_index, 2] = b + out [max_index, 3] = c + out [max_index, 4] = a + b + c + + # + # Find the new max_index + # + max_index = 1 + max_sum = out [max_index, 4] + for (l = 2; l <= COUNT; l ++) { + if (out [l, 4] > max_sum) { + max_sum = out [l, 4] + max_index = l + } + } + } + } + } + } + + # + # Print the array + # + for (i = 1; i <= COUNT; i ++) { + printf ("%d %d %d\n", out [i, 1], out [i, 2], out [i, 3]) + } +} diff --git a/challenge-148/abigail/bash/ch-1.sh b/challenge-148/abigail/bash/ch-1.sh new file mode 100644 index 0000000000..8c2a94a75b --- /dev/null +++ b/challenge-148/abigail/bash/ch-1.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 +# + +# +# Run as: bash ch-1.sh +# + +for ((i = 0; i <= 100; i ++)) +do if [[ !($i =~ ^0$|[1789]|^2.|[35]$) ]] + then printf "%d " $i + fi +done +echo diff --git a/challenge-148/abigail/bash/ch-2.sh b/challenge-148/abigail/bash/ch-2.sh new file mode 100644 index 0000000000..fa387eb448 --- /dev/null +++ b/challenge-148/abigail/bash/ch-2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 +# + +# +# Run as: bash ch-2.sh +# + +echo "2 1 5" +echo "5 2 13" +echo "8 3 21" +echo "17 18 5" +echo "11 4 29" diff --git a/challenge-148/abigail/basic/ch-1.bas b/challenge-148/abigail/basic/ch-1.bas new file mode 100644 index 0000000000..b61a009a03 --- /dev/null +++ b/challenge-148/abigail/basic/ch-1.bas @@ -0,0 +1,9 @@ +010 REM +020 REM See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 +030 REM + +040 REM +050 REM Run as: basic ch-1.bas +060 REM + +100 PRINT "2 4 6 30 32 34 36 40 42 44 46 50 52 54 56 60 62 64 66" diff --git a/challenge-148/abigail/basic/ch-2.bas b/challenge-148/abigail/basic/ch-2.bas new file mode 100644 index 0000000000..0e5a057e3b --- /dev/null +++ b/challenge-148/abigail/basic/ch-2.bas @@ -0,0 +1,13 @@ +010 REM +020 REM See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 +030 REM + +040 REM +050 REM Run as: basic ch-2.bas +060 REM + +100 PRINT "2 1 5" +110 PRINT "5 2 13" +120 PRINT "8 3 21" +130 PRINT "17 18 5" +140 PRINT "11 4 29" diff --git a/challenge-148/abigail/bc/ch-1.bc b/challenge-148/abigail/bc/ch-1.bc new file mode 100644 index 0000000000..ae79ba0e77 --- /dev/null +++ b/challenge-148/abigail/bc/ch-1.bc @@ -0,0 +1,24 @@ +#!/usr/bin/bc + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 +# + +# +# Run as: bc ch-1.bc +# + +for (i = 0; i <= 100; i ++) { + t = i / 10 + u = i % 10 + if (!(i == 0 || t == 1 || u == 1 || t == 7 || u == 7 \ + || t == 8 || u == 8 || t == 9 || u == 9 \ + || t == 2 || u == 3 || u == 5 || i == 100)) { + print i, " " + } +} + +" +" + +halt diff --git a/challenge-148/abigail/bc/ch-2.bc b/challenge-148/abigail/bc/ch-2.bc new file mode 100644 index 0000000000..cb9280ebb2 --- /dev/null +++ b/challenge-148/abigail/bc/ch-2.bc @@ -0,0 +1,105 @@ +#!/usr/bin/bc + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 +# + +# +# Run as: bc ch-2.bc +# + +count = 5 +for (i = 1; i <= count; i ++) { + out_a [i] = 999999 + out_b [i] = 999999 + out_c [i] = 999999 + out_sum [i] = out_a [i] + out_b [i] + out_c [i] +} + +max_index = 1 + +for (k = 0; 3 * k + 2 <= out_sum [max_index]; k ++) { + a = 3 * k + 2 + f1 = k + 1 + f2 = 8 * k + 5 + + d1c = 0 + d2c = 0 + + # + # Find divisors of f1 + # + for (i = 1; i * i <= f1; i ++) { + if (f1 % i == 0) { + d1c = d1c + 1 + d1 [d1c] = i + if (i != f1 / i) { + d1c = d1c + 1 + d1 [d1c] = f1 / i + } + } + } + + # + # Find divisors of f2 which are squares + # + for (i = 1; i * i <= f2; i ++) { + if (f2 % i == 0) { + s1 = sqrt (i) + s2 = sqrt (f2 / i) + if (s1 * s1 == i) { + d2c = d2c + 1 + d2 [d2c] = s1 + } + if (s2 * s2 == f2 / i && s1 != s2) { + d2c = d2c + 1 + d2 [d2c] = s2 + } + } + } + + for (i = 1; i <= d1c; i ++) { + for (j = 1; j <= d2c; j ++) { + b = d1 [i] * d2 [j] + c = f1 * f1 * f2 / (b * b) + if (a + b + c < out_sum [max_index]) { + seen = 0 + for (m = 1; m <= count; m ++) { + if (out_a [m] == a && out_b [m] == b) { + seen = 1 + } + } + if (seen == 1) { + break + } + + out_a [max_index] = a + out_b [max_index] = b + out_c [max_index] = c + out_sum [max_index] = a + b + c + # + # Find the new max_index + # + max_index = 1 + max_sum = out_sum [max_index] + for (l = 2; l <= count; l ++) { + if (out_sum [l] > max_sum) { + max_sum = out_sum [l] + max_index = l + } + } + } + } + } +} + +# +# Print the array +# +for (i = 1; i <= count; i ++) { + print out_a [i], " ", out_b [i], " ", out_c [i], " +" +} + + +halt diff --git a/challenge-148/abigail/befunge-93/ch-1.bf93 b/challenge-148/abigail/befunge-93/ch-1.bf93 new file mode 100644 index 0000000000..20f34afd4b --- /dev/null +++ b/challenge-148/abigail/befunge-93/ch-1.bf93 @@ -0,0 +1,2 @@ +< v,_@#:< "2 4 6 30 32 34 36 40 42 44 46 50 52 54 56 60 62 64 66" +55 + > ^ diff --git a/challenge-148/abigail/befunge-93/ch-2.bf93 b/challenge-148/abigail/befunge-93/ch-2.bf93 new file mode 100644 index 0000000000..bf95c014c6 --- /dev/null +++ b/challenge-148/abigail/befunge-93/ch-2.bf93 @@ -0,0 +1,2 @@ +< v,_@#:< "2 1 5" +55 "5 2 13" +55 "8 3 21" +55 "17 18 5" +55 "11 4 29" +55 + > ^ diff --git a/challenge-148/abigail/blog.txt b/challenge-148/abigail/blog.txt new file mode 100644 index 0000000000..045de8d1d2 --- /dev/null +++ b/challenge-148/abigail/blog.txt @@ -0,0 +1 @@ +https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-148-1.html diff --git a/challenge-148/abigail/blog1.txt b/challenge-148/abigail/blog1.txt new file mode 100644 index 0000000000..49faafc044 --- /dev/null +++ b/challenge-148/abigail/blog1.txt @@ -0,0 +1 @@ +https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-148-2.html diff --git a/challenge-148/abigail/c/ch-1.c b/challenge-148/abigail/c/ch-1.c new file mode 100644 index 0000000000..231a5efade --- /dev/null +++ b/challenge-148/abigail/c/ch-1.c @@ -0,0 +1,24 @@ +# include <stdlib.h> +# include <stdio.h> +# include <string.h> + +/* + * See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 + */ + +/* + * Run as: cc -o ch-1.o ch-1.c; ./ch-1.o + */ + +int main (void) { + for (int i = 0; i <= 100; i ++) { + int u = i % 10; + int t = i / 10; + if (!(i == 0 || t == 1 || u == 1 || t == 7 || u == 7 + || t == 8 || u == 8 || t == 9 || u == 9 + || t == 2 || u == 3 || u == 5 || i == 100)) { + printf ("%d ", i); + } + } + printf ("\n"); +} diff --git a/challenge-148/abigail/c/ch-2.c b/challenge-148/abigail/c/ch-2.c new file mode 100644 index 0000000000..63e2db46e1 --- /dev/null +++ b/challenge-148/abigail/c/ch-2.c @@ -0,0 +1,145 @@ +# include <stdlib.h> +# include <stdio.h> +# include <string.h> +# include <stdbool.h> +# include <math.h> + +/* + * See https://theweeklychallenge.org/blog/perl-weekly-challenge-148 + */ + +/* + * Run as: cc -o ch-2.o ch-2.c; ./ch-2.o + */ + +# define COUNT 5 +# define A 0 +# define B 1 +# define C 2 +# define SUM 3 +/* Overkill, but this will do */ +# define MAX_DIVISOR 100 + +int main (void) { + int ** out; + int k = 0; + + if ((out = (int **) malloc (COUNT * sizeof (int *))) == NULL) { + perror ("Malloc failed"); + return (1); + } + for (size_t i = 0; i < COUNT; i ++) { + if ((out [i] = (int *) malloc (SUM * sizeof (int))) == NULL) { + perror ("Malloc failed"); + return (1); + } + out [i] [A] = 999999; + out [i] [B] = 999999; + out [i] [C] = 999999; + out [i] [SUM] = out [i] [A] + out [i] [B] + out [i] [C]; + } + + size_t max_index = 0; + + + while (3 * k + 2 <= out [max_index] [SUM]) { + int a = 3 * k + 2; + int f1 = k + 1; + int f2 = 8 * k + 5; + + int * d1; + int * d2; + + if ((d1 = (int *) malloc (MAX_DIVISOR * sizeof (int))) == NULL) { + perror ("Malloc failed"); + return (1); + } + if ((d2 = (int *) malloc (MAX_DIVISOR * sizeof (int))) == NULL) { + perror ("Malloc failed"); + return (1); + } + + size_t d1c = 0; + size_t d2c = 0; + + /* + * Get the divisors for f1 + */ + for (int i = 1; i * i <= f1; i ++) { + if (f1 % i == 0) { + d1 [d1c ++] = i; + if (i != f1 / i) { + d1 [d1c ++] = f1 / i; + } + } + } + + /* + * Get the square divisors of f2 + */ + for (int i = 1; i * i <= f2; i ++) { + if (f2 % i == 0) { + int s1 = (int) sqrt (i); + int s2 = (int) sqrt (f2 / i); + if (s1 * s1 == i) { + d2 [d2c ++] = s1; + } + if (s2 * s2 == f2 / i && s2 != s1) { + d2 [d2c ++] = s2; + } + } + } + + for (size_t i = 0; i < d1c; i ++) { + for (size_t j = 0; j < d2c; j ++) { + int b = d1 [i] * d2 [j]; + int c = f1 * f1 * f2 / (b * b); + if (a + b + c < out [max_index] [SUM]) { + /* + * Avoid duplicates + */ + bool seen = false; + for (size_t i = 0; i < COUNT; i ++) { + if (out [i] [A] == a && out [i] [B] == b) { + seen = true; + break; + } + } + if (seen) { + break; + } + + out [max_index] [A] = a; + out [max_index] [B] = b; + out [max_index] [C] = c; + out [max_index] [SUM] = a + b + c; + + /* + * Find the next max index + */ + max_index = 0; + int max_sum = out [max_index] [SUM]; + for (size_t l = 1; l < COUNT; l ++) { + if (out [l] [SUM] > max_sum) { + max_sum = out [l] [SUM]; + max_index = l; + } + } + } + } + } + free (d1); + free (d2); + k ++; |
