diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-08-22 15:28:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-22 15:28:05 +0100 |
| commit | 904c2135d89bfd3b108c0c915c79eb3f14736c3f (patch) | |
| tree | c3f409b1e6feed4a292ea2d764585c6618df1dac | |
| parent | d36d86e76de609dd6a95d36aa5a659ba1e957987 (diff) | |
| parent | c1c28edcf5aea611ca5f5053ae7b1378b5fb6b7b (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/blog-2.txt | 1 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/blog-3.txt | 1 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/blog-4.txt | 1 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/blog-5.txt | 1 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/blog-6.txt | 1 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/postgresql/ch-1.plperl | 54 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/postgresql/ch-1.sql | 79 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/postgresql/ch-2.plperl | 28 | ||||
| -rw-r--r-- | challenge-179/luca-ferrari/postgresql/ch-2.sql | 57 | ||||
| -rwxr-xr-x | challenge-179/luca-ferrari/raku/ch-1.p6 | 32 | ||||
| -rwxr-xr-x | challenge-179/luca-ferrari/raku/ch-2.p6 | 10 |
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; +} |
