From a8948854bc51354c0e663f7126b1e72c4efa3917 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Aug 2022 09:59:44 +0200 Subject: Task 1 done --- challenge-179/luca-ferrari/raku/ch-1.p6 | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100755 challenge-179/luca-ferrari/raku/ch-1.p6 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..9621aaac46 --- /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 < 1000 } ) { + + 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 ] ); + } + + } + +} -- cgit From 3c232b36f0c6b41f5cc0479ce929375f0012ea99 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Aug 2022 11:26:15 +0200 Subject: Task 2 done --- challenge-179/luca-ferrari/raku/ch-2.p6 | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100755 challenge-179/luca-ferrari/raku/ch-2.p6 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; +} -- cgit From 4dce5e63a15f7718baabc557d66c067bec6dcd36 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Aug 2022 11:38:26 +0200 Subject: Task 1 plperl done --- challenge-179/luca-ferrari/postgresql/ch-1.plperl | 53 +++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 challenge-179/luca-ferrari/postgresql/ch-1.plperl 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..f50a5b9828 --- /dev/null +++ b/challenge-179/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,53 @@ +-- 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 $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; -- cgit From 8071a002320792cda2be39bde5c8792934527032 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Aug 2022 11:38:51 +0200 Subject: Fix limit --- challenge-179/luca-ferrari/postgresql/ch-1.plperl | 3 ++- challenge-179/luca-ferrari/raku/ch-1.p6 | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/challenge-179/luca-ferrari/postgresql/ch-1.plperl b/challenge-179/luca-ferrari/postgresql/ch-1.plperl index f50a5b9828..f495dabed6 100644 --- a/challenge-179/luca-ferrari/postgresql/ch-1.plperl +++ b/challenge-179/luca-ferrari/postgresql/ch-1.plperl @@ -43,11 +43,12 @@ AS $CODE$ /; 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/raku/ch-1.p6 b/challenge-179/luca-ferrari/raku/ch-1.p6 index 9621aaac46..da58bbe2bb 100755 --- a/challenge-179/luca-ferrari/raku/ch-1.p6 +++ b/challenge-179/luca-ferrari/raku/ch-1.p6 @@ -2,7 +2,7 @@ # Perl Weekly Challenge 179 -sub MAIN( Int $n where { 0 < $n < 1000 } ) { +sub MAIN( Int $n where { 0 < $n < 100 } ) { my @units = 'first', 'second', @@ -26,7 +26,7 @@ sub MAIN( Int $n where { 0 < $n < 1000 } ) { say @non-teens[ ( $n / 10 ).Int - 2 ] ~ ( $n %% 10 ?? '' !! @units[ ( $n % 10 ) - 1 ] ); } - + default { "Cannot spell $n".say; } } } -- cgit From a6c87bd08e681702a45eb02d505897169af68865 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Aug 2022 11:55:40 +0200 Subject: Task 2 plperl done --- challenge-179/luca-ferrari/postgresql/ch-2.plperl | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 challenge-179/luca-ferrari/postgresql/ch-2.plperl 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; -- cgit From bd411541890e1ad0685ce14b690007c8c911ea79 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Aug 2022 12:08:06 +0200 Subject: Task 1 done in plpgsql --- challenge-179/luca-ferrari/postgresql/ch-1.sql | 79 ++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 challenge-179/luca-ferrari/postgresql/ch-1.sql 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; -- cgit From 8971a969add2550c91565aea416db5dad951ab93 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Aug 2022 12:29:26 +0200 Subject: Task 2 plpgsql --- challenge-179/luca-ferrari/postgresql/ch-2.sql | 57 ++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 challenge-179/luca-ferrari/postgresql/ch-2.sql 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; -- cgit From c1c28edcf5aea611ca5f5053ae7b1378b5fb6b7b Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Aug 2022 13:09:38 +0200 Subject: Blog refences --- challenge-179/luca-ferrari/blog-1.txt | 1 + challenge-179/luca-ferrari/blog-2.txt | 1 + challenge-179/luca-ferrari/blog-3.txt | 1 + challenge-179/luca-ferrari/blog-4.txt | 1 + challenge-179/luca-ferrari/blog-5.txt | 1 + challenge-179/luca-ferrari/blog-6.txt | 1 + 6 files changed, 6 insertions(+) create mode 100644 challenge-179/luca-ferrari/blog-1.txt create mode 100644 challenge-179/luca-ferrari/blog-2.txt create mode 100644 challenge-179/luca-ferrari/blog-3.txt create mode 100644 challenge-179/luca-ferrari/blog-4.txt create mode 100644 challenge-179/luca-ferrari/blog-5.txt create mode 100644 challenge-179/luca-ferrari/blog-6.txt 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 -- cgit