aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-08-22 15:28:05 +0100
committerGitHub <noreply@github.com>2022-08-22 15:28:05 +0100
commit904c2135d89bfd3b108c0c915c79eb3f14736c3f (patch)
treec3f409b1e6feed4a292ea2d764585c6618df1dac
parentd36d86e76de609dd6a95d36aa5a659ba1e957987 (diff)
parentc1c28edcf5aea611ca5f5053ae7b1378b5fb6b7b (diff)
downloadperlweeklychallenge-club-904c2135d89bfd3b108c0c915c79eb3f14736c3f.tar.gz
perlweeklychallenge-club-904c2135d89bfd3b108c0c915c79eb3f14736c3f.tar.bz2
perlweeklychallenge-club-904c2135d89bfd3b108c0c915c79eb3f14736c3f.zip
Merge pull request #6642 from fluca1978/PWC179
Pwc179
-rw-r--r--challenge-179/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-179/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-179/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-179/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-179/luca-ferrari/blog-5.txt1
-rw-r--r--challenge-179/luca-ferrari/blog-6.txt1
-rw-r--r--challenge-179/luca-ferrari/postgresql/ch-1.plperl54
-rw-r--r--challenge-179/luca-ferrari/postgresql/ch-1.sql79
-rw-r--r--challenge-179/luca-ferrari/postgresql/ch-2.plperl28
-rw-r--r--challenge-179/luca-ferrari/postgresql/ch-2.sql57
-rwxr-xr-xchallenge-179/luca-ferrari/raku/ch-1.p632
-rwxr-xr-xchallenge-179/luca-ferrari/raku/ch-2.p610
12 files changed, 266 insertions, 0 deletions
diff --git a/challenge-179/luca-ferrari/blog-1.txt b/challenge-179/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..ece2925a72
--- /dev/null
+++ b/challenge-179/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task1
diff --git a/challenge-179/luca-ferrari/blog-2.txt b/challenge-179/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..456d0905ff
--- /dev/null
+++ b/challenge-179/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task2
diff --git a/challenge-179/luca-ferrari/blog-3.txt b/challenge-179/luca-ferrari/blog-3.txt
new file mode 100644
index 0000000000..a20ed84896
--- /dev/null
+++ b/challenge-179/luca-ferrari/blog-3.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task1plperl
diff --git a/challenge-179/luca-ferrari/blog-4.txt b/challenge-179/luca-ferrari/blog-4.txt
new file mode 100644
index 0000000000..30a4ecbc8d
--- /dev/null
+++ b/challenge-179/luca-ferrari/blog-4.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task2plperl
diff --git a/challenge-179/luca-ferrari/blog-5.txt b/challenge-179/luca-ferrari/blog-5.txt
new file mode 100644
index 0000000000..75ef4f8453
--- /dev/null
+++ b/challenge-179/luca-ferrari/blog-5.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task1plpgsql
diff --git a/challenge-179/luca-ferrari/blog-6.txt b/challenge-179/luca-ferrari/blog-6.txt
new file mode 100644
index 0000000000..7e8929e903
--- /dev/null
+++ b/challenge-179/luca-ferrari/blog-6.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task2plpgsql
diff --git a/challenge-179/luca-ferrari/postgresql/ch-1.plperl b/challenge-179/luca-ferrari/postgresql/ch-1.plperl
new file mode 100644
index 0000000000..f495dabed6
--- /dev/null
+++ b/challenge-179/luca-ferrari/postgresql/ch-1.plperl
@@ -0,0 +1,54 @@
+-- Perl Weekly Challenge 179
+-- Task 1
+
+CREATE SCHEMA IF NOT EXISTS pwc179;
+
+CREATE OR REPLACE FUNCTION
+pwc179.task1_plperl( int )
+RETURNS text
+AS $CODE$
+ my @units = qw/
+ first
+ second
+ third
+ foruth
+ fifth
+ sixth
+ seventh
+ eigth
+ nineth
+ tenth
+ /;
+
+ my @teens = qw /
+ eleven
+ twelve
+ thriteen
+ fourteen
+ fifteen
+ sixteen
+ seventeen
+ eigtheen
+ nineteen
+ /;
+ my @non_teens = qw/
+ twenty
+ thirty
+ fourty
+ fifty
+ sixty
+ seventy
+ eighty
+ ninety
+ /;
+
+ my ( $n ) = @_;
+ return 'Cannot spell' if ( $n >= 100 );
+ return $units[ $n - 1 ] if ( $n <= 10 );
+ return $teens[ ( $n - 1 ) % 10 ] if ( $n > 10 && $n < 20 );
+ return $non_teens[ ( $n / 10 ) - 2 ] if ( $n >= 20 && $n % 10 == 0 );
+ return $non_teens[ ( $n / 10 ) - 2 ] . $units[ ( $n % 10 ) - 1 ] if ( $n > 20 );
+
+
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-179/luca-ferrari/postgresql/ch-1.sql b/challenge-179/luca-ferrari/postgresql/ch-1.sql
new file mode 100644
index 0000000000..106916ec2c
--- /dev/null
+++ b/challenge-179/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1,79 @@
+-- Perl Weekly Challenge 179
+-- Task 1
+
+CREATE SCHEMA IF NOT EXISTS pwc179;
+
+CREATE TABLE IF NOT EXISTS
+pwc179.number2words
+(
+ v int PRIMARY KEY
+ , t text
+);
+
+TRUNCATE pwc179.number2words;
+
+INSERT INTO pwc179.number2words
+VALUES
+ ( 1, 'first' )
+, ( 2, 'second' )
+, ( 3, 'third' )
+, ( 4, 'fourth' )
+, ( 5, 'fifth' )
+, ( 6, 'sixth' )
+, ( 7, 'seventh' )
+, ( 8, 'eigth' )
+, ( 9, 'nineth' )
+, ( 10, 'tenth' )
+, ( 11, 'eleventh' )
+, ( 12, 'twelveth' )
+, ( 13, 'thirteenth' )
+, ( 14, 'fourtineenth' )
+, ( 15, 'fifteenth' )
+, ( 16, 'sixteenth' )
+, ( 17, 'seventeenth' )
+, ( 18, 'eigthteenth' )
+, ( 19, 'nineteenth' )
+, ( 20, 'twentyth' )
+, ( 30, 'thirtyth' )
+, ( 40, 'fourtyth' )
+, ( 50, 'fiftyth' )
+, ( 60, 'sixtyth' )
+, ( 70, 'seventyth' )
+, ( 80, 'eightyth' )
+, ( 90, 'ninetyth' );
+
+
+CREATE OR REPLACE FUNCTION
+pwc179.task1_plpgsql( n int )
+RETURNS TEXT
+AS $CODE$
+
+DECLARE
+ w text;
+ s text;
+BEGIN
+ SELECT t
+ INTO w
+ FROM pwc179.number2words
+ WHERE v = n;
+
+ IF FOUND THEN
+ RETURN w;
+ ELSE
+ -- not found, compose the word
+ SELECT t
+ INTO w
+ FROM pwc179.number2words
+ WHERE v = ( n / 10 )::int;
+
+ SELECT t
+ INTO s
+ FROM pwc179.number2words
+ WHERE v = ( n % 10 )::int;
+
+ RETURN replace( w, 'th', 'ty') || s;
+ END IF;
+END
+
+$CODE$
+LANGUAGE plpgsql;
diff --git a/challenge-179/luca-ferrari/postgresql/ch-2.plperl b/challenge-179/luca-ferrari/postgresql/ch-2.plperl
new file mode 100644
index 0000000000..1a45a69416
--- /dev/null
+++ b/challenge-179/luca-ferrari/postgresql/ch-2.plperl
@@ -0,0 +1,28 @@
+-- Perl Weekly Challenge 179
+-- Task 2
+
+CREATE SCHEMA IF NOT EXISTS pwc179;
+
+CREATE OR REPLACE FUNCTION
+pwc179.task2_plperl( int[] )
+RETURNS text
+AS $CODE$
+
+ my ($n) = shift;
+ my @n;
+
+ my @symbols = map {chr($_)} (0x2581..0x2588);
+
+ my ($min, $max) = (-1,-1);
+
+ # compute min and max over the values
+ for my $current ( @$n ) {
+ $max = $current if ( $current > $max );
+ $min = $current if ( $min == -1 || $current < $min );
+ push @n, $current;
+ }
+
+ my @graph = map { ( $_ - $min ) / ( $max - $min ) * scalar( @$n ) } @$n;
+ return join( '', @symbols[ @graph ] );
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-179/luca-ferrari/postgresql/ch-2.sql b/challenge-179/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..10e3b13341
--- /dev/null
+++ b/challenge-179/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,57 @@
+-- Perl Weekly Challenge 179
+-- Task 2
+
+CREATE SCHEMA IF NOT EXISTS pwc179;
+
+CREATE TABLE IF NOT EXISTS pwc179.symbols
+(
+ v int PRIMARY KEY
+ , s text
+);
+
+TRUNCATE pwc179.symbols;
+
+INSERT INTO pwc179.symbols
+VALUES
+( 0, '▁')
+,(1, '▁')
+,(2,'▂')
+,(3, '▃')
+,(4, '▄')
+,(5, '▅')
+,(6, '▆')
+,(7,'▇')
+,(8, '█')
+,(9, '█');
+
+
+CREATE OR REPLACE FUNCTION
+pwc179.task2_plpgsql( n int[] )
+RETURNS text
+AS $CODE$
+DECLARE
+ c int;
+ t text;
+ tt text;
+ scale_max int;
+ scale_min int;
+ scale_count int;
+BEGIN
+ t := '';
+
+ SELECT min(v), max(v), count(v)
+ INTO scale_min, scale_max, scale_count
+ FROM pwc179.symbols;
+
+ FOREACH c IN ARRAY n LOOP
+ SELECT s
+ INTO tt
+ FROM pwc179.symbols
+ WHERE v = ( ( c - scale_min ) / ( scale_max - scale_min ) );
+ t := t || tt;
+ END LOOP;
+
+ RETURN t;
+END
+$CODE$
+LANGUAGE plpgsql;
diff --git a/challenge-179/luca-ferrari/raku/ch-1.p6 b/challenge-179/luca-ferrari/raku/ch-1.p6
new file mode 100755
index 0000000000..da58bbe2bb
--- /dev/null
+++ b/challenge-179/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,32 @@
+#!raku
+
+# Perl Weekly Challenge 179
+
+sub MAIN( Int $n where { 0 < $n < 100 } ) {
+
+ my @units = 'first',
+ 'second',
+ 'third',
+ 'foruth',
+ 'fifth',
+ 'sixth',
+ 'seventh',
+ 'eigth',
+ 'nineth',
+ 'tenth';
+
+ my @teens = 'eleven', 'twelve', 'thriteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen',
+ 'eigtheen', 'nineteen';
+ my @non-teens = 'twenty', 'thirty', 'fourty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety';
+
+ given ( $n ) {
+ when $_ <= 10 { @units[ $n - 1 ].say; }
+ when $_ < 20 { @teens[ ( $n - 1 ) % 10 ].say; }
+ when $_ >= 20 {
+ say @non-teens[ ( $n / 10 ).Int - 2 ]
+ ~ ( $n %% 10 ?? '' !! @units[ ( $n % 10 ) - 1 ] );
+ }
+ default { "Cannot spell $n".say; }
+ }
+
+}
diff --git a/challenge-179/luca-ferrari/raku/ch-2.p6 b/challenge-179/luca-ferrari/raku/ch-2.p6
new file mode 100755
index 0000000000..d6fc43fb4d
--- /dev/null
+++ b/challenge-179/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,10 @@
+#!raku
+
+# Perl Weekly Challenge 179
+
+sub MAIN( *@n where { @n.grep( * ~~ Int ).elems == @n.elems } ) {
+ my @symbols = '▁' ... '█';
+ my ($min, $max) = @n.min, @n.max;
+ my @graph = @n.map: { ( $_ - $min ) / ( $max - $min ) * @n.elems };
+ @symbols[ @graph ].join.say;
+}