diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-01-25 21:26:16 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-25 21:26:16 +0000 |
| commit | aa1198b22c0d5bbbfc41b638390fcbdb8cacab26 (patch) | |
| tree | 1f6e662a4405cabae39336aa258120895c038f1b | |
| parent | 0a207042e17d673b78681b6c0865fe0cf91f9412 (diff) | |
| parent | f6f8fa27a551ad1171389cc9ca8b5c9a0e39e025 (diff) | |
| download | perlweeklychallenge-club-aa1198b22c0d5bbbfc41b638390fcbdb8cacab26.tar.gz perlweeklychallenge-club-aa1198b22c0d5bbbfc41b638390fcbdb8cacab26.tar.bz2 perlweeklychallenge-club-aa1198b22c0d5bbbfc41b638390fcbdb8cacab26.zip | |
Merge pull request #5567 from Abigail/abigail/week-149
Abigail/week 149
60 files changed, 2284 insertions, 29 deletions
diff --git a/challenge-149/abigail/README.md b/challenge-149/abigail/README.md index 7087e5bc74..c6c703c150 100644 --- a/challenge-149/abigail/README.md +++ b/challenge-149/abigail/README.md @@ -4,64 +4,36 @@ * [AWK](awk/ch-1.awk) * [Bash](bash/ch-1.sh) -* [Basic](basic/ch-1.bas) * [Bc](bc/ch-1.bc) -* [Befunge-93](befunge-93/ch-1.bf93) * [C](c/ch-1.c) -* [Cobol](cobol/ch-1.cb) -* [Csh](csh/ch-1.csh) -* [Erlang](lua/ch-1.erl) -* [Forth](lua/ch-1.fs) -* [Fortran](fortran/ch-1.f90) * [Go](go/ch-1.go) * [Java](java/ch-1.java) * [Lua](lua/ch-1.lua) -* [m4](m4/ch-1.m4) -* [MMIX](mmix/ch-1.mms) * [Node.js](node/ch-1.js) -* [OCaml](ocaml/ch-1.ml) * [Pascal](pascal/ch-1.p) * [Perl](perl/ch-1.pl) -* [PHP](php/ch-1.php) -* [PostScript](postscript/ch-1.ps) * [Python](python/ch-1.py) * [R](r/ch-1.r) -* [Rexx](rexx/ch-1.rexx) * [Ruby](ruby/ch-1.rb) * [Scheme](scheme/ch-1.scm) -* [Sed](sed/ch-1.sed) -* [SQL](sql/ch-1.sql) * [Tcl](tcl/ch-1.tcl) + ## Part 2 * [AWK](awk/ch-2.awk) * [Bash](bash/ch-2.sh) * [Basic](basic/ch-2.bas) * [Bc](bc/ch-2.bc) -* [Befunge-93](befunge-93/ch-2.bf93) * [C](c/ch-2.c) -* [Cobol](cobol/ch-2.cb) -* [Csh](csh/ch-2.csh) -* [Erlang](lua/ch-2.erl) -* [Forth](lua/ch-2.fs) -* [Fortran](fortran/ch-2.f90) * [Go](go/ch-2.go) * [Java](java/ch-2.java) * [Lua](lua/ch-2.lua) -* [m4](m4/ch-2.m4) -* [MMIX](mmix/ch-2.mms) * [Node.js](node/ch-2.js) -* [OCaml](ocaml/ch-2.ml) * [Pascal](pascal/ch-2.p) * [Perl](perl/ch-2.pl) -* [PHP](php/ch-2.php) -* [PostScript](postscript/ch-2.ps) * [Python](python/ch-2.py) * [R](r/ch-2.r) -* [Rexx](rexx/ch-2.rexx) * [Ruby](ruby/ch-2.rb) * [Scheme](scheme/ch-2.scm) -* [Sed](sed/ch-2.sed) -* [SQL](sql/ch-2.sql) * [Tcl](tcl/ch-2.tcl) diff --git a/challenge-149/abigail/awk/ch-1.awk b/challenge-149/abigail/awk/ch-1.awk new file mode 100644 index 0000000000..db6182ff4f --- /dev/null +++ b/challenge-149/abigail/awk/ch-1.awk @@ -0,0 +1,47 @@ +#!/usr/bin/awk + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 +# + +# +# Run as: awk -f ch-1.awk < input-file +# + +function digit_sum (number, sum) { + sum = 0 + while (number > 0) { + sum += number % 10 + number = int (number / 10) + } + return sum +} + +function is_fib (n, t) { + while (g < n) { + t = g + g = f + g + f = t + fib [g] = 1 + } + return n in fib +} + +BEGIN { + f = 0 + g = 1 + fib [f] = 1 + fib [g] = 1 +} + +{ + N = $1 + for (k = 0; N > 0; k ++) { + if (is_fib(digit_sum(k))) { + printf ("%d ", k) + N -- + } + } + + printf ("\n") +} diff --git a/challenge-149/abigail/awk/ch-2.awk b/challenge-149/abigail/awk/ch-2.awk new file mode 100644 index 0000000000..1b8416f19b --- /dev/null +++ b/challenge-149/abigail/awk/ch-2.awk @@ -0,0 +1,41 @@ +#!/usr/bin/awk + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 +# + +# +# Run as: awk -f ch-2.awk < input-file +# + +BEGIN { + A287298 [ 2] = "1" + A287298 [ 3] = "1" + A287298 [ 4] = "3201" + A287298 [ 5] = "4301" + A287298 [ 6] = "452013" + A287298 [ 7] = "6250341" + A287298 [ 8] = "47302651" + A287298 [ 9] = "823146570" + A287298 [10] = "9814072356" + A287298 [11] = "A8701245369" + A287298 [12] = "B8750A649321" + A287298 [13] = "CBA504216873" + A287298 [14] = "DC71B30685A924" + A287298 [15] = "EDAC93B24658701" + A287298 [16] = "FED5B39A42706C81" + A287298 [17] = "GFED5A31C6B79802" + A287298 [18] = "HGF80ADC53712EB649" + A287298 [19] = "IHGFD3408C6E715A2B9" + A287298 [20] = "JIHG03DAC457BFE96281" + A287298 [22] = "LKJIG5D14B9032FHAC867E" +} + +{ + if ($1 in A287298) { + print A287298 [$1] + } + else { + print "Too hard to calculate" + } +} diff --git a/challenge-149/abigail/bash/ch-1.sh b/challenge-149/abigail/bash/ch-1.sh new file mode 100644 index 0000000000..bd882f735b --- /dev/null +++ b/challenge-149/abigail/bash/ch-1.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 +# + +# +# Run as: bash ch-1.sh < input-file +# + +function digit_sum () { + digit_sum=0 + num=$1 + while ((num > 0)) + do ((digit_sum += num % 10)) + ((num /= 10)) + done +} + +f=0 +g=1 +declare -A fib +fib[$f]=1 +fib[$g]=1 + +function is_fib () { + local n=$1 + while (($g < $n)) + do ((t = g)) + ((g = f + g)) + ((f = t)) + fib[$g]=1 + done + is_fib=${fib[$n]:-0} +} + +set -f + +while read N +do for ((k = 0; N > 0; k ++)) + do digit_sum $k + is_fib $digit_sum + if (($is_fib == 1)) + then printf "%d " $k + ((N --)) + fi + done + echo "" +done diff --git a/challenge-149/abigail/bash/ch-2.sh b/challenge-149/abigail/bash/ch-2.sh new file mode 100644 index 0000000000..ba798b6707 --- /dev/null +++ b/challenge-149/abigail/bash/ch-2.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 +# + +# +# Run as: bash ch-2.sh < input-file +# + +set -f + +declare -a A287298 + +A287298[2]=1 +A287298[3]=1 +A287298[4]=3201 +A287298[5]=4301 +A287298[6]=452013 +A287298[7]=6250341 +A287298[8]=47302651 +A287298[9]=823146570 +A287298[10]=9814072356 +A287298[11]=A8701245369 +A287298[12]=B8750A649321 +A287298[13]=CBA504216873 +A287298[14]=DC71B30685A924 +A287298[15]=EDAC93B24658701 +A287298[16]=FED5B39A42706C81 +A287298[17]=GFED5A31C6B79802 +A287298[18]=HGF80ADC53712EB649 +A287298[19]=IHGFD3408C6E715A2B9 +A287298[20]=JIHG03DAC457BFE96281 +A287298[22]=LKJIG5D14B9032FHAC867E + +while read n +do echo ${A287298[$n]:-"Too hard to calculate"} +done diff --git a/challenge-149/abigail/basic/ch-2.bas b/challenge-149/abigail/basic/ch-2.bas new file mode 100644 index 0000000000..837319f2fc --- /dev/null +++ b/challenge-149/abigail/basic/ch-2.bas @@ -0,0 +1,36 @@ +0010 REM +0020 REM See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 +0030 REM + +0040 REM +0050 REM Run as: basic ch-2.bas < input-file +0060 REM + +1000 INPUT N +1005 IF N < 0 THEN END + + +1010 IF N = 2 THEN PRINT "1" +1020 IF N = 3 THEN PRINT "1" +1030 IF N = 4 THEN PRINT "3201" +1040 IF N = 5 THEN PRINT "4301" +1050 IF N = 6 THEN PRINT "452013" +1060 IF N = 7 THEN PRINT "6250341" +1070 IF N = 8 THEN PRINT "47302651" +1080 IF N = 9 THEN PRINT "823146570" +1090 IF N = 10 THEN PRINT "9814072356" +1100 IF N = 11 THEN PRINT "A8701245369" +1110 IF N = 12 THEN PRINT "B8750A649321" +1120 IF N = 13 THEN PRINT "CBA504216873" +1130 IF N = 14 THEN PRINT "DC71B30685A924" +1140 IF N = 15 THEN PRINT "EDAC93B24658701" +1150 IF N = 16 THEN PRINT "FED5B39A42706C81" +1160 IF N = 17 THEN PRINT "GFED5A31C6B79802" +1170 IF N = 18 THEN PRINT "HGF80ADC53712EB649" +1180 IF N = 19 THEN PRINT "IHGFD3408C6E715A2B9" +1190 IF N = 20 THEN PRINT "JIHG03DAC457BFE96281" +1195 IF N = 21 THEN PRINT "Too hard to calculate" +1200 IF N = 22 THEN PRINT "LKJIG5D14B9032FHAC867E" +1210 IF N > 22 THEN PRINT "Too hard to calculate" + +5000 GOTO 1000 diff --git a/challenge-149/abigail/bc/ch-1.bc b/challenge-149/abigail/bc/ch-1.bc new file mode 100644 index 0000000000..85f46b7a03 --- /dev/null +++ b/challenge-149/abigail/bc/ch-1.bc @@ -0,0 +1,68 @@ +#!/usr/bin/bc + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 +# + +# +# Run as: bc ch-1.bc < input-file +# + +define digit_sum (n) { + auto sum + sum = 0 + while (n > 0) { + sum = sum + n % 10 + n = n / 10 + } + return (sum) +} + +f = 1 +g = 1 +fib [0] = 0 +fib [1] = 1 +fib_count = 2 + +define is_fib (n) { + auto t, min, max + while (g < n) { + t = g + g = f + g + f = t + fib [fib_count] = g + fib_count = fib_count + 1 + } + min = 0 + max = fib_count + while (min < max) { + mid = (min + max) / 2 + if (fib [mid] == n) { + return (1) + } + if (fib [mid] < n) { + min = mid + 1 + } else { + max = mid + } + } + return (0) +} + + +while (1) { + n = read () + if (n == 0) { + break + } + for (k = 0; n > 0; k ++) { + if (is_fib (digit_sum (k)) == 1) { + print k, " " + n = n - 1 + } + } + print " +" +} + +halt diff --git a/challenge-149/abigail/bc/ch-2.bc b/challenge-149/abigail/bc/ch-2.bc new file mode 100644 index 0000000000..e4a9d9a2aa --- /dev/null +++ b/challenge-149/abigail/bc/ch-2.bc @@ -0,0 +1,67 @@ +#!/usr/bin/bc + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 +# + +# +# Run as: bc ch-2.bc < input-file +# + +a287298 [ 2] = 1 +a287298 [ 3] = 1 +a287298 [ 4] = 225 +a287298 [ 5] = 576 +a287298 [ 6] = 38025 +a287298 [ 7] = 751689 +a287298 [ 8] = 10323369 +a287298 [ 9] = 355624164 +a287298 [10] = 9814072356 +a287298 [11] = 279740499025 +a287298 [12] = 8706730814089 +a287298 [13] = 23132511879129 +a287298 [14] = 11027486960232964 +a287298 [15] = 435408094460869201 +a287298 [16] = 18362780530794065025 + +while (1) { + n = read () + if (n == 0) { + break + } + done = 0 + if (n <= 16) { + obase=n + a287298 [n] + done = 1 + } + if (n == 17) { + "GFED5A31C6B79802" + done = 1 + } + if (n == 18) { + "HGF80ADC53712EB649" + done = 1 + } + if (n == 19) { + "IHGFD3408C6E715A2B9" + done = 1 + } + if (n == 20) { + "JIHG03DAC457BFE96281" + done = 1 + } + if (n == 22) { + "LKJIG5D14B9032FHAC867E" + done = 1 + } + if (done == 0) { + "Too hard to calculate" + } + if (n > 16) { + " +" + } +} + +halt diff --git a/challenge-149/abigail/c/ch-1.c b/challenge-149/abigail/c/ch-1.c new file mode 100644 index 0000000000..5acb89bc23 --- /dev/null +++ b/challenge-149/abigail/c/ch-1.c @@ -0,0 +1,111 @@ +# include <stdlib.h> +# include <stdio.h> +# include <string.h> +# include <stdbool.h> + +/* + * See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 + */ + +/* + * Run as: cc -o ch-1.o ch-1.c; ./ch-1.o < input-file + */ + +# define BASE 10 +int digit_sum (long n) { + int out = 0; + while (n) { + out += n % BASE; + n /= BASE; + } + return (out); +} + +# define DEFAULT_FIB_CAB 100 +# define FIB_CAP_INC_PERC 50 + +typedef long fib_t; + +fib_t fib_prev, fib_last; +size_t fib_count; +size_t fib_cap; +fib_t * fib = NULL; + +bool is_fib (fib_t n) { + if (fib == NULL) { + fib_prev = 1; + fib_last = 1; + fib_count = 2; + fib_cap = DEFAULT_FIB_CAB; + if ((fib = (fib_t *) malloc (fib_cap * sizeof (fib_t))) == NULL) { + perror ("Malloc failed"); + exit (1); + } + fib [0] = 0; + fib [1] = 1; + } + + /* + * If n exceeds the maximum Fibonacci number so far, generate + * new numbers until we reach or exceed n. If we generate n, + * n is a Fibonacci number; if we exceed n, n is not. + */ + while (fib_last < n) { + fib_t t = fib_last; + fib_last += fib_prev; + fib_prev = t; + while (fib_count >= fib_cap) { + fib_cap += 1 + FIB_CAP_INC_PERC * fib_cap / 100; + if ((fib = (fib_t *) + realloc (fib, fib_cap * sizeof (fib_t))) == NULL) { + perror ("Ralloc failed"); + exit (1); + } + } + fib [fib_count ++] = fib_last; + if (fib_last == n) { + return (true); + } + if (fib_last > n) { + return (false); + } + } + + /* + * If n is less than the maximum Fibonaccie number generated so far, + * do a binary search. + */ + size_t min = 0; + size_t max = fib_count; + while (min < max) { + size_t mid = (min + max) / 2; + if (fib [mid] == n) { + return (true); + } + if (fib [mid] < n) { + min = mid + 1; + } + else { + max = mid; + } + } + return (false); +} + + + +int main (void) { + int n; + + while (scanf ("%d", &n) == 1) { + for (int k = 0; n > 0; k ++) { + if (is_fib (digit_sum (k))) { + printf ("%d ", k); + n --; + } + } + printf ("\n"); + } + + return (0); +} diff --git a/challenge-149/abigail/c/ch-2.c b/challenge-149/abigail/c/ch-2.c new file mode 100644 index 0000000000..6f9c25796d --- /dev/null +++ b/challenge-149/abigail/c/ch-2.c @@ -0,0 +1,51 @@ +# include <stdlib.h> +# include <stdio.h> +# include <string.h> + +/* + * See https://theweeklychallenge.org/blog/perl-weekly-challenge-149 + */ + +/* + * Run as: cc -o ch-2.o ch-2.c; ./ch-2.o < input-file + */ + +int main (void) { + char * A287298 [23]; + int n; + + A287298 [ 0] = NULL; + A287298 [ 1] = NULL; + A287298 [ 2] = "1"; + A287298 [ 3] = "1"; + A287298 [ 4] = "3201"; + A287298 [ 5] = "4301"; + A287298 [ 6] = "452013"; + A287298 [ 7] = "6250341"; + A287298 [ 8] = "47302651"; + A287298 [ 9] = "823146570"; + A287298 [10] = "9814072356"; + A287298 [11] = "A8701245369"; + A287298 [12] = "B8750A649321"; + A287298 [13] = "CBA504216873"; + A287298 [14] = "DC71B30685A924"; + A287298 [15] = "EDAC93B24658701"; + A287298 [16] = "FED5B39A42706C81"; + A287298 [17] = "GFED5A31C6B79802"; + A287298 [18] = "HGF80ADC53712EB649"; + A287298 [19] = "IHGFD3408C6E715A2B9"; + A287298 [20] = "JIHG03DAC457BFE96281"; + A287298 [21] = NULL; + A287298 [22] = "LKJIG5D14B9032FHAC867E"; + + while (scanf ("%d", &n) == 1) { + if (n > 22 || A287298 [n] == NULL) { + printf ("Too hard to calculate\n"); + } + else { + printf ("%s\n", A287298 [n]); + } + } + + return (0); +} diff --git a/challenge-149/abigail/data/a287298.awk b/challenge-149/abigail/data/a287298.awk new file mode 100644 index 0000000000..8ae03ba3aa --- /dev/null +++ b/challenge-149/abigail/data/a287298.awk @@ -0,0 +1,22 @@ +BEGIN { + A287298 [ 2] = "1" + A287298 [ 3] = "1" + A287298 [ 4] = "3201" + A287298 [ 5] = "4301" + A287298 [ 6] = "452013" + A287298 [ 7] = "6250341" + A287298 [ 8] = "47302651" + A287298 [ 9] = "823146570" + A287298 [10] = "9814072356" + A287298 [11] = "A8701245369" + A287298 [12] = "B8750A649321" + A287298 [13] = "CBA504216873" + A287298 [14] = "DC71B30685A924" + A287298 [15] = "EDAC93B24658701" + A287298 [1 |
