From a88b97a7e70760872d0e619613600da8b6e52486 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 Nov 2021 11:54:56 +0100 Subject: PWC 136 in PostgreSQL --- challenge-136/luca-ferrari/postgresql/ch-1.sql | 16 ++++++++++++++ challenge-136/luca-ferrari/postgresql/ch-2.sql | 29 ++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 challenge-136/luca-ferrari/postgresql/ch-1.sql create mode 100644 challenge-136/luca-ferrari/postgresql/ch-2.sql diff --git a/challenge-136/luca-ferrari/postgresql/ch-1.sql b/challenge-136/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..ebf5d2becb --- /dev/null +++ b/challenge-136/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,16 @@ +CREATE OR REPLACE FUNCTION task1( a int, b int ) + RETURNS int +AS $CODE$ + SELECT gcd( a, b ) % 2; + $CODE$ + LANGUAGE SQL; + +/* + Example of invocation: + + testdb=> SELECT task1( 8, 24 ) as a8_24, task1( 26, 39 ) as a26_39, task1( 4, 10 ) as a4_10; + -[ RECORD 1 ] + a8_24 | 0 + a26_39 | 1 + a4_10 | 0 +*/ diff --git a/challenge-136/luca-ferrari/postgresql/ch-2.sql b/challenge-136/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..5436ec8456 --- /dev/null +++ b/challenge-136/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,29 @@ + +CREATE OR REPLACE FUNCTION task2( l int default 16) + RETURNS SETOF text + AS $CODE$ + +WITH RECURSIVE + fib( p, n ) AS ( + SELECT 1 as p, 1 as n + UNION + SELECT n, p + n FROM fib WHERE n < l + ) + , permutations AS ( + SELECT n::text as perm_n, n as perm_sum, array[ 1 ] as pivot + FROM fib + UNION ALL + SELECT permutations.perm_n || ',' || fib.n, perm_sum + fib.n, array_append( pivot, fib.n ) + FROM permutations, fib + WHERE fib.n < l + AND position( fib.n::text in perm_n ) = 0 + + ) + , results as ( + SELECT array( SELECT perm_n FROM permutations ) + ) + SELECT * + FROM results; + + $CODE$ + LANGUAGE sql; -- cgit From ac973dc68c0da20cb14fc884e49244788584fae0 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 Nov 2021 12:17:31 +0100 Subject: Task 1 done --- challenge-138/luca-ferrari/raku/ch-1.p6 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 challenge-138/luca-ferrari/raku/ch-1.p6 diff --git a/challenge-138/luca-ferrari/raku/ch-1.p6 b/challenge-138/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..b238c21ff5 --- /dev/null +++ b/challenge-138/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,15 @@ +#!raku + +sub MAIN( Int $year where { $year ~~ / \d ** 4 / } && $year > 1900, + Bool :$verbose = False ) { + my Date $date .= new: year => $year, day => 1, month => 1; + my Date $stop .= new: year => $year, day => 31, month => 12; + my $work-days = 0; + while ( $date <= $stop ) { + $work-days += 1 if $date.day-of-week != any( 6, 7 ); + $date = $date + 1; + } + + "$year has $work-days work days".say if $verbose; + $work-days.say if ! $verbose; +} -- cgit From 95903b6b139186fe0a85fc52df1ce886f04f3e52 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 Nov 2021 12:25:03 +0100 Subject: Task 1 done in PostgreSQL --- challenge-138/luca-ferrari/postgresql/ch-1.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 challenge-138/luca-ferrari/postgresql/ch-1.sql diff --git a/challenge-138/luca-ferrari/postgresql/ch-1.sql b/challenge-138/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..53956e64cb --- /dev/null +++ b/challenge-138/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,12 @@ +CREATE OR REPLACE FUNCTION + f_working_days_per_year( yy int default extract( year from current_date ) ) + RETURNS int +AS $CODE$ + SELECT count( v ) + FROM generate_series( make_date( yy, 01, 01 ), + make_date( yy, 12, 31 ), + '1 days' ) v + WHERE + extract( dow from v ) NOT IN ( 0, 6 ); + $CODE$ + LANGUAGE sql; -- cgit From daf57f04732fc4bfbcab413729f348334a6338b6 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 Nov 2021 12:44:46 +0100 Subject: Task 2 done. --- challenge-138/luca-ferrari/raku/ch-2.p6 | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 challenge-138/luca-ferrari/raku/ch-2.p6 diff --git a/challenge-138/luca-ferrari/raku/ch-2.p6 b/challenge-138/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..72e7295a70 --- /dev/null +++ b/challenge-138/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,16 @@ +#!raku + +sub MAIN( Int:D $n where { $n > 0 } ) { + my $qrt = $n.sqrt; + my @digits = $n.split( '', :skip-empty ); + + # short circuit: esay case + 1.say and exit if @digits.sum == $qrt; + + # try to aggregate from left to right + for 1 ..^ @digits.elems { + last if @digits[ 0 .. $_ ].join.Int > $qrt; + '1'.say and exit if @digits[ 0 .. $_ ].join + @digits[ $_ + 1 .. * - 1 ].sum == $qrt; + } + +} -- cgit From 3ee103c948388738696b2ac4efcb038b80d8d2d9 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 Nov 2021 13:25:32 +0100 Subject: Task 2 PostgreSQL done --- challenge-138/luca-ferrari/postgresql/ch-2.sql | 34 ++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 challenge-138/luca-ferrari/postgresql/ch-2.sql diff --git a/challenge-138/luca-ferrari/postgresql/ch-2.sql b/challenge-138/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..6b6c49cc89 --- /dev/null +++ b/challenge-138/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,34 @@ +CREATE OR REPLACE FUNCTION + f_split_numbers( n int default 9801 ) + RETURNS int +AS $CODE$ + DECLARE + sqrt int := sqrt( n ); + digits int[] := regexp_split_to_array( n::text, '' ); + aggregation int := 0; + sum_left int := 0; + sum_right int := 0; +BEGIN + RAISE DEBUG 'Operating for % (sqrt = %)', n, sqrt; + + FOR aggregation IN 1 .. length( n::text ) LOOP + RAISE DEBUG 'Aggregation index %', aggregation; + + SELECT array_to_string( digits[1:aggregation], '' )::int + , sum( r ) + FROM ( SELECT unnest( digits[ aggregation + 1: length( n::text ) ] ) AS r ) rr + INTO sum_left, sum_right; + + RAISE DEBUG '% + %', sum_left, sum_right; + + IF ( sum_left + sum_right ) = sqrt THEN + RETURN 1; + END IF; + END LOOP; + + RETURN 0; +END + $CODE$ + LANGUAGE plpgsql; + + -- cgit From 98833b4aa8ad2809378bda50bc62d1736c19f196 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 Nov 2021 14:39:46 +0100 Subject: Blog references --- challenge-138/luca-ferrari/blog-1.txt | 1 + challenge-138/luca-ferrari/blog-2.txt | 1 + challenge-138/luca-ferrari/blog-3.txt | 1 + challenge-138/luca-ferrari/blog-4.txt | 1 + 4 files changed, 4 insertions(+) create mode 100644 challenge-138/luca-ferrari/blog-1.txt create mode 100644 challenge-138/luca-ferrari/blog-2.txt create mode 100644 challenge-138/luca-ferrari/blog-3.txt create mode 100644 challenge-138/luca-ferrari/blog-4.txt diff --git a/challenge-138/luca-ferrari/blog-1.txt b/challenge-138/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..01ce5c7e32 --- /dev/null +++ b/challenge-138/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2021/11/08/PerlWeeklyChallenge138.html#task1 diff --git a/challenge-138/luca-ferrari/blog-2.txt b/challenge-138/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..b4547b6091 --- /dev/null +++ b/challenge-138/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2021/11/08/PerlWeeklyChallenge138.html#task2 diff --git a/challenge-138/luca-ferrari/blog-3.txt b/challenge-138/luca-ferrari/blog-3.txt new file mode 100644 index 0000000000..fb6f0f0202 --- /dev/null +++ b/challenge-138/luca-ferrari/blog-3.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2021/11/08/PerlWeeklyChallenge138.html#task1pg diff --git a/challenge-138/luca-ferrari/blog-4.txt b/challenge-138/luca-ferrari/blog-4.txt new file mode 100644 index 0000000000..a0c37f0c45 --- /dev/null +++ b/challenge-138/luca-ferrari/blog-4.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2021/11/08/PerlWeeklyChallenge138.html#task2pg -- cgit From 43a8879240a187a1ab1c90688463afff9ad33f36 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 Nov 2021 14:41:50 +0100 Subject: PWC 136 merge fix --- challenge-136/luca-ferrari/postgresql/ch-1.sql | 20 +--------------- challenge-136/luca-ferrari/postgresql/ch-2.sql | 33 +------------------------- 2 files changed, 2 insertions(+), 51 deletions(-) diff --git a/challenge-136/luca-ferrari/postgresql/ch-1.sql b/challenge-136/luca-ferrari/postgresql/ch-1.sql index 6dd5215177..6dbee2b0af 100644 --- a/challenge-136/luca-ferrari/postgresql/ch-1.sql +++ b/challenge-136/luca-ferrari/postgresql/ch-1.sql @@ -1,21 +1,3 @@ -<<<<<<< HEAD -CREATE OR REPLACE FUNCTION task1( a int, b int ) - RETURNS int -AS $CODE$ - SELECT gcd( a, b ) % 2; - $CODE$ - LANGUAGE SQL; - -/* - Example of invocation: - - testdb=> SELECT task1( 8, 24 ) as a8_24, task1( 26, 39 ) as a26_39, task1( 4, 10 ) as a4_10; - -[ RECORD 1 ] - a8_24 | 0 - a26_39 | 1 - a4_10 | 0 -*/ -======= /* testdb=> SELECT FRIENDLY( 26, 39 ); friendly @@ -40,4 +22,4 @@ AS $CODE$ END; $CODE$ LANGUAGE SQL; ->>>>>>> dfcf558b2190d45a5ebf3c486a7c316dbc3e197e + diff --git a/challenge-136/luca-ferrari/postgresql/ch-2.sql b/challenge-136/luca-ferrari/postgresql/ch-2.sql index eede27f347..f7d9e52fd0 100644 --- a/challenge-136/luca-ferrari/postgresql/ch-2.sql +++ b/challenge-136/luca-ferrari/postgresql/ch-2.sql @@ -1,34 +1,3 @@ -<<<<<<< HEAD - -CREATE OR REPLACE FUNCTION task2( l int default 16) - RETURNS SETOF text - AS $CODE$ - -WITH RECURSIVE - fib( p, n ) AS ( - SELECT 1 as p, 1 as n - UNION - SELECT n, p + n FROM fib WHERE n < l - ) - , permutations AS ( - SELECT n::text as perm_n, n as perm_sum, array[ 1 ] as pivot - FROM fib - UNION ALL - SELECT permutations.perm_n || ',' || fib.n, perm_sum + fib.n, array_append( pivot, fib.n ) - FROM permutations, fib - WHERE fib.n < l - AND position( fib.n::text in perm_n ) = 0 - - ) - , results as ( - SELECT array( SELECT perm_n FROM permutations ) - ) - SELECT * - FROM results; - - $CODE$ - LANGUAGE sql; -======= CREATE OR REPLACE FUNCTION fibonacci_sum( l int DEFAULT 16 ) RETURNS bigint AS $CODE$ @@ -62,4 +31,4 @@ WHERE total_sum = l $CODE$ LANGUAGE SQL; ->>>>>>> dfcf558b2190d45a5ebf3c486a7c316dbc3e197e + -- cgit