From 19e0735e7ba137750237e2e0ca905d12aaa8cdc5 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 May 2023 08:18:22 +0200 Subject: Task 1 done --- challenge-216/luca-ferrari/raku/ch-1.p6 | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 challenge-216/luca-ferrari/raku/ch-1.p6 (limited to 'challenge-216') diff --git a/challenge-216/luca-ferrari/raku/ch-1.p6 b/challenge-216/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..bdef28ee4d --- /dev/null +++ b/challenge-216/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,25 @@ +#!raku + +# +# Perl Weekly Challenge 216 +# Task 1 +# +# See +# + +sub MAIN( *@strings is copy ) { + my @registration-code = @strings.pop.comb; + + # first implementation + for @strings -> $word { + my @result.push: @registration-code.grep( $_ ) for $word.comb; + say $word if @result.join ~~ $word; + } + + # second implementation + my $sorted-registration-code = @registration-code.sort.join; + for @strings -> $word { + say $word if ( $sorted-registration-code ~~ / ^ { $word.comb.sort.join } / ); + } + +} -- cgit From 9318b7bed015211d743f030caeccd84dd533a2fe Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 May 2023 09:15:28 +0200 Subject: Task2 done --- challenge-216/luca-ferrari/raku/ch-2.p6 | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 challenge-216/luca-ferrari/raku/ch-2.p6 (limited to 'challenge-216') diff --git a/challenge-216/luca-ferrari/raku/ch-2.p6 b/challenge-216/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..9544e801f6 --- /dev/null +++ b/challenge-216/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,34 @@ +#!raku + +# +# Perl Weekly Challenge 216 +# Task 2 +# +# See +# + +sub MAIN( *@strings is copy ) { + my $letters = BagHash.new: @strings.pop.comb; + my %stickers; + my $loop = 0; + + while ( $letters.values.grep( * >= 1 ) ) { + $loop++; + + for $letters.keys -> $needle { + next if ! $letters{ $needle }; + my $found = False; + for @strings -> $word { + if ( $word.comb.grep( $needle ) ) { + $letters{ $needle }--; + %stickers{ $word }{ $loop }.push: $needle; + $found = True; + } + } + + say "Cannot find $needle in any word!" and exit if ! $found; + } + } + + "$_ used { %stickers{ $_ }.keys.elems } times".say for %stickers.keys; +} -- cgit From 225504876e6d28b67ed457544cdabf3dd812e0b8 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 May 2023 09:38:38 +0200 Subject: Task 1 plperl done --- challenge-216/luca-ferrari/postgresql/ch-1.plperl | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 challenge-216/luca-ferrari/postgresql/ch-1.plperl (limited to 'challenge-216') diff --git a/challenge-216/luca-ferrari/postgresql/ch-1.plperl b/challenge-216/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..e254eb6d7b --- /dev/null +++ b/challenge-216/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,26 @@ +-- +-- Perl Weekly Challenge 216 +-- Task 1 +-- See +-- + +CREATE SCHEMA IF NOT EXISTS pwc216; + +CREATE OR REPLACE FUNCTION +pwc216.task1_plperl( text, text[]) +RETURNS SETOF text +AS $CODE$ + my ( $registration_code, $strings ) = @_; + for my $word ( $strings->@* ) { + my $matches = 0; + for my $needle ( split( //, $word ) ) { + $matches++ if ( grep( { $needle eq $_ } split( //, $registration_code ) ) ); + } + + return_next( $word ) if ( $matches == length( $word ) ); + } + +return undef; + +$CODE$ +LANGUAGE plperl; -- cgit From 3466eb55a5bb931e95ef764861b6aa29fd2a7095 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 May 2023 10:31:58 +0200 Subject: Task 2 plperl --- challenge-216/luca-ferrari/postgresql/ch-2.plperl | 50 +++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 challenge-216/luca-ferrari/postgresql/ch-2.plperl (limited to 'challenge-216') diff --git a/challenge-216/luca-ferrari/postgresql/ch-2.plperl b/challenge-216/luca-ferrari/postgresql/ch-2.plperl new file mode 100644 index 0000000000..5316537322 --- /dev/null +++ b/challenge-216/luca-ferrari/postgresql/ch-2.plperl @@ -0,0 +1,50 @@ +-- +-- Perl Weekly Challenge 216 +-- Task 2 +-- See +-- + +CREATE SCHEMA IF NOT EXISTS pwc216; + +CREATE OR REPLACE FUNCTION +pwc216.task2_plperl( text, text[] ) +RETURNS TABLE ( sticker text, run int, letter text ) +AS $CODE$ + my ( $needle, $words ) = @_; + my $searching_for = {}; + + # create the bag + for ( split //, $needle ) { + $searching_for->{ $_ }++; + } + + elog(INFO, "Valori? " . grep( { $_ >= 1 } values( $searching_for->%* ) ) ); + my $run = 0; + while ( grep( { $_ >= 1 } values( $searching_for->%* ) ) ) { + $run++; + my $found = 0; + + for my $letter ( keys $searching_for->%* ) { + next if ! $searching_for->{ $letter }; + for my $word ( $words->@* ) { + if ( grep( { $_ eq $letter } split( //, $word ) ) ) { + $searching_for->{ $letter }--; + return_next( { run => $run, sticker => $word, letter => $letter } ); + $found++; + last; + } + } + + + } + + if ( ! $found ) { + elog(INFO, "Cannot find match with letter $letter in any word!" ); + return undef; + } + } + +return undef; + +$CODE$ +LANGUAGE plperl; -- cgit From aa4c667437e5674d217fc9f008ad2430a3caece1 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 May 2023 10:54:32 +0200 Subject: Task 1 plpgsql --- challenge-216/luca-ferrari/postgresql/ch-1.sql | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 challenge-216/luca-ferrari/postgresql/ch-1.sql (limited to 'challenge-216') diff --git a/challenge-216/luca-ferrari/postgresql/ch-1.sql b/challenge-216/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..b929a9a3fb --- /dev/null +++ b/challenge-216/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,33 @@ +-- +-- Perl Weekly Challenge 216 +-- Task 1 +-- +-- See +-- + +CREATE SCHEMA IF NOT EXISTS pwc216; + +CREATE OR REPLACE FUNCTION +pwc216.task1_plpgsql( rc text, strings text[] ) +RETURNS SETOF TEXT +AS $CODE$ +DECLARE + current_word text; + matches int; +BEGIN + FOREACH current_word IN ARRAY strings LOOP + SELECT count(*) + INTO matches + FROM regexp_split_to_table( rc, '' ) r + , regexp_split_to_table( current_word, '' ) w + WHERE r = w; + + IF matches = length( current_word ) THEN + RETURN NEXT current_word; + END IF; + END LOOP; + +RETURN; +END +$CODE$ +LANGUAGE plpgsql; -- cgit From a6a67dc89ec8bd9cc6a008e1dc953b57778c265a Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 May 2023 11:10:31 +0200 Subject: Task 2 plpgsql done --- challenge-216/luca-ferrari/postgresql/ch-2.plperl | 1 - challenge-216/luca-ferrari/postgresql/ch-2.sql | 67 +++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 challenge-216/luca-ferrari/postgresql/ch-2.sql (limited to 'challenge-216') diff --git a/challenge-216/luca-ferrari/postgresql/ch-2.plperl b/challenge-216/luca-ferrari/postgresql/ch-2.plperl index 5316537322..de9b5baafd 100644 --- a/challenge-216/luca-ferrari/postgresql/ch-2.plperl +++ b/challenge-216/luca-ferrari/postgresql/ch-2.plperl @@ -18,7 +18,6 @@ AS $CODE$ $searching_for->{ $_ }++; } - elog(INFO, "Valori? " . grep( { $_ >= 1 } values( $searching_for->%* ) ) ); my $run = 0; while ( grep( { $_ >= 1 } values( $searching_for->%* ) ) ) { $run++; diff --git a/challenge-216/luca-ferrari/postgresql/ch-2.sql b/challenge-216/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..ceca3277e2 --- /dev/null +++ b/challenge-216/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,67 @@ +-- +-- Perl Weekly Challenge 216 +-- Task 2 +-- +-- See +-- + +CREATE SCHEMA IF NOT EXISTS pwc216; + +CREATE OR REPLACE FUNCTION +pwc216.task2_plpgsql( word text, stickers text[] ) +RETURNS TABLE ( sticker text, run int, letter text ) +AS $CODE$ +DECLARE + cl text; + current_sticker text; + m int; +BEGIN + CREATE TEMPORARY TABLE IF NOT EXISTS letters( l text, c int DEFAULT 1, s text ); + TRUNCATE letters; + + INSERT INTO letters( l, c ) + SELECT ll, count(*) + FROM regexp_split_to_table( word, '' ) ll + GROUP BY ll; + + FOUND := true; + run := 0; + WHILE FOUND LOOP + run := run + 1; + + PERFORM count(*) + FROM letters + WHERE c > 0; + + IF NOT FOUND THEN + RETURN; + END IF; + + FOR cl IN SELECT l FROM letters WHERE c > 0 LOOP + FOREACH current_sticker IN ARRAY stickers LOOP + SELECT count(*) + INTO m + FROM regexp_split_to_table( current_sticker, '' ) s + WHERE s = cl; + + + IF m <= 0 THEN + CONTINUE; + END IF; + + UPDATE letters + SET c = c - m + , s = s || ', ' || current_sticker; + + sticker := current_sticker; + letter := cl; + + RETURN NEXT; + EXIT; + END LOOP; + END LOOP; + END LOOP; + +END +$CODE$ +LANGUAGE plpgsql; -- cgit From a968331f2dff08bab0825c6137148a6d3a12ad39 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 8 May 2023 11:52:21 +0200 Subject: Blog references --- challenge-216/luca-ferrari/blog-1.txt | 1 + challenge-216/luca-ferrari/blog-2.txt | 1 + challenge-216/luca-ferrari/blog-3.txt | 1 + challenge-216/luca-ferrari/blog-4.txt | 1 + challenge-216/luca-ferrari/blog-5.txt | 1 + challenge-216/luca-ferrari/blog-6.txt | 1 + 6 files changed, 6 insertions(+) create mode 100644 challenge-216/luca-ferrari/blog-1.txt create mode 100644 challenge-216/luca-ferrari/blog-2.txt create mode 100644 challenge-216/luca-ferrari/blog-3.txt create mode 100644 challenge-216/luca-ferrari/blog-4.txt create mode 100644 challenge-216/luca-ferrari/blog-5.txt create mode 100644 challenge-216/luca-ferrari/blog-6.txt (limited to 'challenge-216') diff --git a/challenge-216/luca-ferrari/blog-1.txt b/challenge-216/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..bc60db2e40 --- /dev/null +++ b/challenge-216/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/08/PerlWeeklyChallenge216.html#task1 diff --git a/challenge-216/luca-ferrari/blog-2.txt b/challenge-216/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..a17a747527 --- /dev/null +++ b/challenge-216/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/08/PerlWeeklyChallenge216.html#task2 diff --git a/challenge-216/luca-ferrari/blog-3.txt b/challenge-216/luca-ferrari/blog-3.txt new file mode 100644 index 0000000000..e26b6dc467 --- /dev/null +++ b/challenge-216/luca-ferrari/blog-3.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/08/PerlWeeklyChallenge216.html#task1plperl diff --git a/challenge-216/luca-ferrari/blog-4.txt b/challenge-216/luca-ferrari/blog-4.txt new file mode 100644 index 0000000000..8d03a8fda7 --- /dev/null +++ b/challenge-216/luca-ferrari/blog-4.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/08/PerlWeeklyChallenge216.html#task2plperl diff --git a/challenge-216/luca-ferrari/blog-5.txt b/challenge-216/luca-ferrari/blog-5.txt new file mode 100644 index 0000000000..2aeb4b3370 --- /dev/null +++ b/challenge-216/luca-ferrari/blog-5.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/08/PerlWeeklyChallenge216.html#task1plpgsql diff --git a/challenge-216/luca-ferrari/blog-6.txt b/challenge-216/luca-ferrari/blog-6.txt new file mode 100644 index 0000000000..de0f0ae486 --- /dev/null +++ b/challenge-216/luca-ferrari/blog-6.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/08/PerlWeeklyChallenge216.html#task2plpgsql -- cgit