aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2023-11-20 09:34:55 +0100
committerLuca Ferrari <fluca1978@gmail.com>2023-11-20 10:41:25 +0100
commitbe57b29fa89ca15be60b8093c73e25e4e5ff5a35 (patch)
tree65735009f0cf7988ba1997780bf8f897c02cd9a9
parentd3c171ecb6715a7bd21a52fab583c4171605f5c0 (diff)
downloadperlweeklychallenge-club-be57b29fa89ca15be60b8093c73e25e4e5ff5a35.tar.gz
perlweeklychallenge-club-be57b29fa89ca15be60b8093c73e25e4e5ff5a35.tar.bz2
perlweeklychallenge-club-be57b29fa89ca15be60b8093c73e25e4e5ff5a35.zip
PWC 244
Task 1 Raku done Task 2 Raku done Task 1 PL/Perl done Task 2 PL/Perl done Task 1 PL/PgSQL done Task 2 PL/PgSQL done Task 1 Python done Task 2 Python done
-rw-r--r--challenge-244/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-244/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-244/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-244/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-244/luca-ferrari/blog-5.txt1
-rw-r--r--challenge-244/luca-ferrari/blog-6.txt1
-rw-r--r--challenge-244/luca-ferrari/blog-7.txt1
-rw-r--r--challenge-244/luca-ferrari/blog-8.txt1
-rw-r--r--challenge-244/luca-ferrari/postgresql/ch-1.plperl21
-rw-r--r--challenge-244/luca-ferrari/postgresql/ch-1.sql30
-rw-r--r--challenge-244/luca-ferrari/postgresql/ch-2.plperl31
-rw-r--r--challenge-244/luca-ferrari/postgresql/ch-2.sql16
-rw-r--r--challenge-244/luca-ferrari/python/ch-1.py27
-rw-r--r--challenge-244/luca-ferrari/python/ch-2.py30
-rw-r--r--challenge-244/luca-ferrari/raku/ch-1.p614
-rw-r--r--challenge-244/luca-ferrari/raku/ch-2.p619
16 files changed, 196 insertions, 0 deletions
diff --git a/challenge-244/luca-ferrari/blog-1.txt b/challenge-244/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..c65ff728ca
--- /dev/null
+++ b/challenge-244/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/11/20/PerlWeeklyChallenge244.html#task1
diff --git a/challenge-244/luca-ferrari/blog-2.txt b/challenge-244/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..35156948f9
--- /dev/null
+++ b/challenge-244/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/11/20/PerlWeeklyChallenge244.html#task2
diff --git a/challenge-244/luca-ferrari/blog-3.txt b/challenge-244/luca-ferrari/blog-3.txt
new file mode 100644
index 0000000000..1c643ba5d9
--- /dev/null
+++ b/challenge-244/luca-ferrari/blog-3.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/11/20/PerlWeeklyChallenge244.html#task1plperl
diff --git a/challenge-244/luca-ferrari/blog-4.txt b/challenge-244/luca-ferrari/blog-4.txt
new file mode 100644
index 0000000000..117b1d5479
--- /dev/null
+++ b/challenge-244/luca-ferrari/blog-4.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/11/20/PerlWeeklyChallenge244.html#task2plperl
diff --git a/challenge-244/luca-ferrari/blog-5.txt b/challenge-244/luca-ferrari/blog-5.txt
new file mode 100644
index 0000000000..ae6051e804
--- /dev/null
+++ b/challenge-244/luca-ferrari/blog-5.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/11/20/PerlWeeklyChallenge244.html#task1plpgsql
diff --git a/challenge-244/luca-ferrari/blog-6.txt b/challenge-244/luca-ferrari/blog-6.txt
new file mode 100644
index 0000000000..bc37b8e9ba
--- /dev/null
+++ b/challenge-244/luca-ferrari/blog-6.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/11/20/PerlWeeklyChallenge244.html#task2plpgsql
diff --git a/challenge-244/luca-ferrari/blog-7.txt b/challenge-244/luca-ferrari/blog-7.txt
new file mode 100644
index 0000000000..23a8f96738
--- /dev/null
+++ b/challenge-244/luca-ferrari/blog-7.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/11/20/PerlWeeklyChallenge244.html#task1python
diff --git a/challenge-244/luca-ferrari/blog-8.txt b/challenge-244/luca-ferrari/blog-8.txt
new file mode 100644
index 0000000000..6ba9a186ac
--- /dev/null
+++ b/challenge-244/luca-ferrari/blog-8.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/11/20/PerlWeeklyChallenge244.html#task2python
diff --git a/challenge-244/luca-ferrari/postgresql/ch-1.plperl b/challenge-244/luca-ferrari/postgresql/ch-1.plperl
new file mode 100644
index 0000000000..69df98c4d1
--- /dev/null
+++ b/challenge-244/luca-ferrari/postgresql/ch-1.plperl
@@ -0,0 +1,21 @@
+--
+-- Perl Weekly Challenge 244
+-- Task 1
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-244/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc244;
+
+CREATE OR REPLACE FUNCTION
+pwc244.task1_plperl( int[] )
+RETURNS SETOF int
+AS $CODE$
+ my ( $nums ) = @_;
+
+ for my $needle ( $nums->@* ) {
+ return_next( scalar( grep( { $_ > $needle } $nums->@* ) ) );
+ }
+
+ return undef;
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-244/luca-ferrari/postgresql/ch-1.sql b/challenge-244/luca-ferrari/postgresql/ch-1.sql
new file mode 100644
index 0000000000..ea1736ea87
--- /dev/null
+++ b/challenge-244/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1,30 @@
+--
+-- Perl Weekly Challenge 244
+-- Task 1
+--
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-244/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc244;
+
+CREATE OR REPLACE FUNCTION
+pwc244.task1_plpgsql( nums int[] )
+RETURNS SETOF int
+AS $CODE$
+DECLARE
+ v int;
+ returning int;
+BEGIN
+ FOREACH v IN ARRAY nums LOOP
+ SELECT count(*)
+ INTO returning
+ FROM unnest( nums ) n
+ WHERE n > v;
+
+ RETURN NEXT returning;
+ END LOOP;
+
+ RETURN;
+END
+$CODE$
+LANGUAGE plpgsql;
diff --git a/challenge-244/luca-ferrari/postgresql/ch-2.plperl b/challenge-244/luca-ferrari/postgresql/ch-2.plperl
new file mode 100644
index 0000000000..8680061e02
--- /dev/null
+++ b/challenge-244/luca-ferrari/postgresql/ch-2.plperl
@@ -0,0 +1,31 @@
+--
+-- Perl Weekly Challenge 244
+-- Task 2
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-244/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc244;
+
+CREATE OR REPLACE FUNCTION
+pwc244.task2_plperl( int[] )
+RETURNS int
+AS $CODE$
+ use Algorithm::Combinatorics qw/ combinations /;
+ use List::Util qw/ min max /;
+
+ my ( $nums ) = @_;
+ my $power;
+
+ $power = 0;
+
+ for my $k ( 1 .. $nums->@* ) {
+ my $combinations = combinations( \ $nums->@*, $k );
+ while ( my $iter = $combinations->next ) {
+ $power += min( $iter->@* ) * ( max( $iter->@* ) ** 2 );
+ }
+ }
+
+
+ return $power;
+$CODE$
+LANGUAGE plperlu;
diff --git a/challenge-244/luca-ferrari/postgresql/ch-2.sql b/challenge-244/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..965f02d2f8
--- /dev/null
+++ b/challenge-244/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,16 @@
+--
+-- Perl Weekly Challenge 244
+-- Task 2
+--
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-244/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc244;
+
+CREATE OR REPLACE FUNCTION
+pwc244.task2_plpgsql( nums int[] )
+RETURNS int
+AS $CODE$
+ SELECT pwc244.task2_plperl( nums );
+$CODE$
+LANGUAGE sql;
diff --git a/challenge-244/luca-ferrari/python/ch-1.py b/challenge-244/luca-ferrari/python/ch-1.py
new file mode 100644
index 0000000000..81cf48bfd3
--- /dev/null
+++ b/challenge-244/luca-ferrari/python/ch-1.py
@@ -0,0 +1,27 @@
+#!python
+
+#
+# Perl Weekly Challenge 244
+# Task 1
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-244/>
+#
+
+import sys
+
+# task implementation
+def main( argv ):
+ nums = list( map( int, argv ) )
+ result = []
+
+ for current in nums:
+ result.append( len( list( filter( lambda x: x > current, nums ) ) ) )
+
+ print( ", ".join( map( str, result ) ) )
+
+
+# invoke the main without the command itself
+if __name__ == '__main__':
+ main( sys.argv[ 1: ] )
+
+
diff --git a/challenge-244/luca-ferrari/python/ch-2.py b/challenge-244/luca-ferrari/python/ch-2.py
new file mode 100644
index 0000000000..ade5ee27c2
--- /dev/null
+++ b/challenge-244/luca-ferrari/python/ch-2.py
@@ -0,0 +1,30 @@
+#!python
+
+#
+# Perl Weekly Challenge 244
+# Task 2
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-244/>
+#
+
+import sys
+from itertools import combinations;
+
+# task implementation
+def main( argv ):
+ nums = list( map( int, argv ) )
+ power = 0
+
+ for size in range( 1, len( nums ) + 1 ):
+ for current in combinations( nums, size ):
+ power = power + ( max( current ) ** 2 ) * min( current )
+
+ print( power )
+
+
+
+# invoke the main without the command itself
+if __name__ == '__main__':
+ main( sys.argv[ 1: ] )
+
+
diff --git a/challenge-244/luca-ferrari/raku/ch-1.p6 b/challenge-244/luca-ferrari/raku/ch-1.p6
new file mode 100644
index 0000000000..81a483982b
--- /dev/null
+++ b/challenge-244/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,14 @@
+#!raku
+
+#
+# Perl Weekly Challenge 244
+# Task 1
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-244/>
+#
+
+sub MAIN( *@nums where { @nums.elems == @nums.grep( * ~~ Int ).elems } ) {
+ my @result;
+ @result[ $_ ] = @nums.grep( * > @nums[ $_ ] ).elems for 0 ..^ @nums.elems;
+ @result.say;
+}
diff --git a/challenge-244/luca-ferrari/raku/ch-2.p6 b/challenge-244/luca-ferrari/raku/ch-2.p6
new file mode 100644
index 0000000000..d73f33617f
--- /dev/null
+++ b/challenge-244/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,19 @@
+#!raku
+
+#
+# Perl Weekly Challenge 244
+# Task 2
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-244/>
+#
+
+sub MAIN( *@nums where { @nums.elems == @nums.grep( * ~~ Int ).elems } ) {
+
+ my $power = 0;
+ for @nums.combinations {
+ next if ! $_;
+ $power += $_.min * ( $_.max ** 2 );
+ }
+
+ $power.say;
+}