From bd51393f97bbd1f964490420e0d40352129e7932 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 12 Dec 2022 08:48:22 +0100 Subject: Task 1 done --- challenge-195/luca-ferrari/raku/ch-1.p6 | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 challenge-195/luca-ferrari/raku/ch-1.p6 diff --git a/challenge-195/luca-ferrari/raku/ch-1.p6 b/challenge-195/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..15012afdf2 --- /dev/null +++ b/challenge-195/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,13 @@ +#!raku + +# Perl Weekly Challenge 195 + +sub MAIN( Int $n where { $n > 0 }, Bool :$verbose = False ) { + my @special-integers; + for 1 .. $n { + @special-integers.push: $_ if $_.comb.Bag.values.max <= 1; + } + + @special-integers.join( ',' ).say if ( $verbose ); + @special-integers.elems.say; +} -- cgit From 77d6f3b11a9014e30e505808ab9a24a40ca3873f Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 12 Dec 2022 08:54:02 +0100 Subject: Task 2 done --- challenge-195/luca-ferrari/raku/ch-2.p6 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 challenge-195/luca-ferrari/raku/ch-2.p6 diff --git a/challenge-195/luca-ferrari/raku/ch-2.p6 b/challenge-195/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..707f429ed1 --- /dev/null +++ b/challenge-195/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,15 @@ +#!raku + +# Perl Weekly Challenge 195 + +sub MAIN( *@list where { @list.grep( * ~~ Int ).elems == @list.elems } ) { + my $bag = @list.grep( * %% 2 ).Bag; + my $most-frequency = $bag.values.max; + my @most-frequent-evens; + for $bag.keys { + next if $bag{ $_ } != $most-frequency; + @most-frequent-evens.push: $_; + } + + @most-frequent-evens.min.say; +} -- cgit From 786befb39e7048cf385e1b9c5c37a24238e05334 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 12 Dec 2022 09:11:27 +0100 Subject: Task 1 PL/Perl done --- challenge-195/luca-ferrari/postgresql/ch-1.plperl | 40 +++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 challenge-195/luca-ferrari/postgresql/ch-1.plperl diff --git a/challenge-195/luca-ferrari/postgresql/ch-1.plperl b/challenge-195/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..3ea8594add --- /dev/null +++ b/challenge-195/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,40 @@ +-- Perl Weekly Challenge 195 +-- Task 1 + +CREATE SCHEMA IF NOT EXISTS pwc195; + +CREATE OR REPLACE FUNCTION +pwc195.task1_plperl( int, bool default true ) +RETURNS int +AS $CODE$ + my ( $n, $verbose ) = @_; + my @special_integers; + + my $baggify = sub { + my ( $n ) = @_; + my $bag = {}; + for my $digit ( split '', $n ) { + $bag->{ $digit }++; + } + + return $bag; + }; + + my $has_no_repetitions = sub { + my ( $bag ) = @_; + for ( keys $bag->%* ) { + return 0 if $bag->{ $_ } != 1; + } + + return 1; + }; + + for ( 1 .. $n ) { + push @special_integers, $_ if ( $has_no_repetitions->( $baggify->( $_ ) ) ); + } + + elog( INFO, "Found: " . join( ',', @special_integers ) ) if ( $ verbose ); + return scalar @special_integers; + +$CODE$ +LANGUAGE plperl; -- cgit From f3d7ddcb540bb7ab77ff433fc94cb738ee38cf39 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 12 Dec 2022 09:26:40 +0100 Subject: Task 2 plperl done --- challenge-195/luca-ferrari/postgresql/ch-2.plperl | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 challenge-195/luca-ferrari/postgresql/ch-2.plperl diff --git a/challenge-195/luca-ferrari/postgresql/ch-2.plperl b/challenge-195/luca-ferrari/postgresql/ch-2.plperl new file mode 100644 index 0000000000..b15f6b215b --- /dev/null +++ b/challenge-195/luca-ferrari/postgresql/ch-2.plperl @@ -0,0 +1,29 @@ +-- Perl Weekly Challenge 195 +-- Task 2 + +CREATE SCHEMA IF NOT EXISTS pwc195; + +CREATE OR REPLACE FUNCTION +pwc195.task2_plperl( int[] ) +RETURNS int +AS $CODE$ + my ( $array ) = @_; + # extract only evens + my @evens = grep { $_ % 2 == 0 } $array->@*; + # classify frequency + my $bag = {}; + $bag->{ $_ }++ for ( @evens ); + + + # sort by frequency and value + my @sorted_bag = + map { $_->[1] } + sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } + map { [ $bag->{ $_ }, $_ ] } keys $bag->%*; + + + # the first value in the list is the + # one with the max frequency and the lowest value + return $sorted_bag[ 0 ]; +$CODE$ +LANGUAGE plperl; -- cgit From 733a94071f895afa1fe066133eb6010245bc4031 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 12 Dec 2022 09:38:10 +0100 Subject: Task 1 plpgsql done --- challenge-195/luca-ferrari/postgresql/ch-1.sql | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 challenge-195/luca-ferrari/postgresql/ch-1.sql diff --git a/challenge-195/luca-ferrari/postgresql/ch-1.sql b/challenge-195/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..a736df90b1 --- /dev/null +++ b/challenge-195/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,30 @@ +-- Perl Weekly Challenge 195 +-- Task 1 + +CREATE SCHEMA IF NOT EXISTS pwc195; + +CREATE OR REPLACE FUNCTION +pwc195.task1_plpgsql( n int ) +RETURNS int +AS $CODE$ +DECLARE + i int; + freq int; + counter int := 0; +BEGIN + FOR i IN 1 .. n LOOP + SELECT count(*) + INTO freq + FROM regexp_split_to_table( i::text, '' ) as n(d) + GROUP BY d; + + IF freq = 1 THEN + counter := counter + 1; + END IF; + + END LOOP; + + RETURN counter; +END +$CODE$ +LANGUAGE plpgsql; -- cgit From e14d4da9dddbf81d1e0cb9ba83a3b95c6584b6dc Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 12 Dec 2022 09:43:34 +0100 Subject: Task 2 plpgsql done --- challenge-195/luca-ferrari/postgresql/ch-2.sql | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 challenge-195/luca-ferrari/postgresql/ch-2.sql diff --git a/challenge-195/luca-ferrari/postgresql/ch-2.sql b/challenge-195/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..c6b8cf318a --- /dev/null +++ b/challenge-195/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,33 @@ +-- Perl Weekly Challenge 195 +-- Task 2 + +CREATE SCHEMA IF NOT EXISTS pwc195; + +CREATE OR REPLACE FUNCTION +pwc195.task2_plpgsql( list int[] ) +RETURNS int +AS $CODE$ +DECLARE + current int; +BEGIN + CREATE TEMPORARY TABLE IF NOT EXISTS nums( v int, f int default 1, primary key( v ) ); + TRUNCATE TABLE nums; + + FOREACH current IN ARRAY list LOOP + INSERT INTO nums AS frequency + SELECT current, 1 + ON CONFLICT (v) + DO UPDATE SET f = frequency.f + 1; + END LOOP; + + SELECT v + INTO current + FROM nums + WHERE v % 2 = 0 + ORDER BY f DESC, v ASC + LIMIT 1; + + RETURN current; +END +$CODE$ +LANGUAGE plpgsql; -- cgit From cecf189f37fcf86a24862bf40283975e73392ca9 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 12 Dec 2022 10:33:18 +0100 Subject: plpgsql fixes --- challenge-195/luca-ferrari/postgresql/ch-1.sql | 3 ++- challenge-195/luca-ferrari/postgresql/ch-2.sql | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/challenge-195/luca-ferrari/postgresql/ch-1.sql b/challenge-195/luca-ferrari/postgresql/ch-1.sql index a736df90b1..c6cbc28437 100644 --- a/challenge-195/luca-ferrari/postgresql/ch-1.sql +++ b/challenge-195/luca-ferrari/postgresql/ch-1.sql @@ -16,7 +16,8 @@ BEGIN SELECT count(*) INTO freq FROM regexp_split_to_table( i::text, '' ) as n(d) - GROUP BY d; + GROUP BY d + ORDER BY 1 DESC; IF freq = 1 THEN counter := counter + 1; diff --git a/challenge-195/luca-ferrari/postgresql/ch-2.sql b/challenge-195/luca-ferrari/postgresql/ch-2.sql index c6b8cf318a..633ffc8c4f 100644 --- a/challenge-195/luca-ferrari/postgresql/ch-2.sql +++ b/challenge-195/luca-ferrari/postgresql/ch-2.sql @@ -3,6 +3,15 @@ CREATE SCHEMA IF NOT EXISTS pwc195; +/* +testdb=> select pwc195.task2_plpgsql( array[1,2,2,3,4,4,4,5,6,6,6,6]::int[] ); +NOTICE: relation "nums" already exists, skipping + task2_plpgsql +--------------- + 6 + +*/ + CREATE OR REPLACE FUNCTION pwc195.task2_plpgsql( list int[] ) RETURNS int -- cgit From e9c10736a2e8811abb8e8cd8bd787071131fceb2 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 12 Dec 2022 10:37:59 +0100 Subject: Blog references --- challenge-195/luca-ferrari/blog-1.txt | 1 + challenge-195/luca-ferrari/blog-2.txt | 1 + challenge-195/luca-ferrari/blog-3.txt | 1 + challenge-195/luca-ferrari/blog-4.txt | 1 + challenge-195/luca-ferrari/blog-5.txt | 1 + challenge-195/luca-ferrari/blog-6.txt | 1 + 6 files changed, 6 insertions(+) create mode 100644 challenge-195/luca-ferrari/blog-1.txt create mode 100644 challenge-195/luca-ferrari/blog-2.txt create mode 100644 challenge-195/luca-ferrari/blog-3.txt create mode 100644 challenge-195/luca-ferrari/blog-4.txt create mode 100644 challenge-195/luca-ferrari/blog-5.txt create mode 100644 challenge-195/luca-ferrari/blog-6.txt diff --git a/challenge-195/luca-ferrari/blog-1.txt b/challenge-195/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..2afdd83ab8 --- /dev/null +++ b/challenge-195/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task1 diff --git a/challenge-195/luca-ferrari/blog-2.txt b/challenge-195/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..124f33a97c --- /dev/null +++ b/challenge-195/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task2 diff --git a/challenge-195/luca-ferrari/blog-3.txt b/challenge-195/luca-ferrari/blog-3.txt new file mode 100644 index 0000000000..fb3572a632 --- /dev/null +++ b/challenge-195/luca-ferrari/blog-3.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task1plperl diff --git a/challenge-195/luca-ferrari/blog-4.txt b/challenge-195/luca-ferrari/blog-4.txt new file mode 100644 index 0000000000..d8193434ac --- /dev/null +++ b/challenge-195/luca-ferrari/blog-4.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task2plperl diff --git a/challenge-195/luca-ferrari/blog-5.txt b/challenge-195/luca-ferrari/blog-5.txt new file mode 100644 index 0000000000..1864572ac2 --- /dev/null +++ b/challenge-195/luca-ferrari/blog-5.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task1plpgsql diff --git a/challenge-195/luca-ferrari/blog-6.txt b/challenge-195/luca-ferrari/blog-6.txt new file mode 100644 index 0000000000..bc5e6b6762 --- /dev/null +++ b/challenge-195/luca-ferrari/blog-6.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/12/12/PerlWeeklyChallenge195.html#task2plpgsql -- cgit