aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2025-07-03 10:40:44 +0200
committerLuca Ferrari <fluca1978@gmail.com>2025-07-03 12:41:13 +0200
commit75c7ba7c8f17f8a431a23ca2bbad6972c2de19a7 (patch)
tree885cfddddd874cddcddaa5677ec1bee50ef2a64b
parentcc7c782687a44568308b337c1986ebd0620d5dc3 (diff)
downloadperlweeklychallenge-club-75c7ba7c8f17f8a431a23ca2bbad6972c2de19a7.tar.gz
perlweeklychallenge-club-75c7ba7c8f17f8a431a23ca2bbad6972c2de19a7.tar.bz2
perlweeklychallenge-club-75c7ba7c8f17f8a431a23ca2bbad6972c2de19a7.zip
PWC 328
Task 1 Raku done Task 2 Raku done Task 1 PL/Perl done Task 2 PL/Perl done
-rw-r--r--challenge-328/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-328/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-328/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-328/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-328/luca-ferrari/pljava/pom.xml72
-rw-r--r--challenge-328/luca-ferrari/plperl/ch-1.plperl25
-rw-r--r--challenge-328/luca-ferrari/plperl/ch-2.plperl34
-rw-r--r--challenge-328/luca-ferrari/raku/ch-1.raku16
-rw-r--r--challenge-328/luca-ferrari/raku/ch-2.raku29
9 files changed, 108 insertions, 72 deletions
diff --git a/challenge-328/luca-ferrari/blog-1.txt b/challenge-328/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..c31617d70c
--- /dev/null
+++ b/challenge-328/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2025/07/03/PerlWeeklyChallenge328.html#task1
diff --git a/challenge-328/luca-ferrari/blog-2.txt b/challenge-328/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..7fa6c4b897
--- /dev/null
+++ b/challenge-328/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2025/07/03/PerlWeeklyChallenge328.html#task2
diff --git a/challenge-328/luca-ferrari/blog-3.txt b/challenge-328/luca-ferrari/blog-3.txt
new file mode 100644
index 0000000000..06d7603168
--- /dev/null
+++ b/challenge-328/luca-ferrari/blog-3.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2025/07/03/PerlWeeklyChallenge328.html#task1plperl
diff --git a/challenge-328/luca-ferrari/blog-4.txt b/challenge-328/luca-ferrari/blog-4.txt
new file mode 100644
index 0000000000..4e48f79a2f
--- /dev/null
+++ b/challenge-328/luca-ferrari/blog-4.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2025/07/03/PerlWeeklyChallenge328.html#task2plperl
diff --git a/challenge-328/luca-ferrari/pljava/pom.xml b/challenge-328/luca-ferrari/pljava/pom.xml
deleted file mode 100644
index 7b9dc8a6c5..0000000000
--- a/challenge-328/luca-ferrari/pljava/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<project
- xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>PWC</groupId>
- <artifactId>
- PWC326
- </artifactId>
- <version>
- 1
- </version>
-
- <name>Perl Weekly Challenge 326 with package PWC326</name>
- <description>Implementation of the tasks in PL/Java for PWC 326</description>
-
- <properties>
- <project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.postgresql</groupId>
- <artifactId>pljava-api</artifactId>
- <version>1.6.6</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.8.1</version>
- <configuration>
- <release>9</release>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.6</version>
- <configuration>
- <archive>
- <manifest>
- <!-- This identifies and version-stamps the jar.
- Not essential, but easy and useful. -->
- <addDefaultImplementationEntries>
- true
- </addDefaultImplementationEntries>
- </manifest>
-
- <manifestSections>
- <!-- This identifies a file in the jar named
- pljava.ddr as an SQLJDeploymentDescriptor. -->
- <manifestSection>
- <name>pljava.ddr</name>
- <manifestEntries>
- <SQLJDeploymentDescriptor>
- true
- </SQLJDeploymentDescriptor>
- </manifestEntries>
- </manifestSection>
- </manifestSections>
- </archive>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/challenge-328/luca-ferrari/plperl/ch-1.plperl b/challenge-328/luca-ferrari/plperl/ch-1.plperl
new file mode 100644
index 0000000000..d712c2ae5d
--- /dev/null
+++ b/challenge-328/luca-ferrari/plperl/ch-1.plperl
@@ -0,0 +1,25 @@
+--
+-- Perl Weekly Challenge 328
+-- Task 1
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-328>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc328;
+
+CREATE OR REPLACE FUNCTION
+pwc328.task1_plperl( text )
+RETURNS text
+AS $CODE$
+
+ my ( $string ) = @_;
+
+ while ( $string =~ / ([a-z]) [?] ([a-z])? /x ) {
+ my $question_mark = ( grep { $_ ne $1 && $_ ne $2 } ( 'a' .. 'z' ) )[ 0 ];
+ my $replacement = $1 . $question_mark . $2;
+ $string =~ s/([a-z]) [?] ([a-z])?/$replacement/x;
+ }
+
+ return $string;
+
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-328/luca-ferrari/plperl/ch-2.plperl b/challenge-328/luca-ferrari/plperl/ch-2.plperl
new file mode 100644
index 0000000000..90cd1fba38
--- /dev/null
+++ b/challenge-328/luca-ferrari/plperl/ch-2.plperl
@@ -0,0 +1,34 @@
+--
+-- Perl Weekly Challenge 328
+-- Task 2
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-328>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc328;
+
+CREATE OR REPLACE FUNCTION
+pwc328.task2_plperl( text )
+RETURNS text
+AS $CODE$
+
+ my ( $string ) = @_;
+
+ $string = lc $string;
+ my @chars = split //, $string;
+ my @result;
+
+ my $index = 0;
+ for ( 0 .. $#chars ) {
+ if ( $chars[ $index ] eq $chars[ $index + 1 ] ) {
+ $index += 2;
+ }
+ else {
+ push @result, $chars[ $index ];
+ $index++;
+ }
+ }
+
+ return join( '', @result );
+
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-328/luca-ferrari/raku/ch-1.raku b/challenge-328/luca-ferrari/raku/ch-1.raku
new file mode 100644
index 0000000000..829eece280
--- /dev/null
+++ b/challenge-328/luca-ferrari/raku/ch-1.raku
@@ -0,0 +1,16 @@
+#!raku
+
+#
+# Perl Weekly Challenge 328
+# Task 1
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-328>
+#
+
+sub MAIN( Str $string is copy where { $string ~~ / '?'+ / } ) {
+ $string.subst( / $<left>=(<[a .. z]>) <[?]> $<right>=(<[a .. z]>)? /,
+ { $<left> ~ ('a'..'z').grep( { $_ ne $<left> && $_ ne ( $<right> // '' ) } ).first ~ ( $<right> // '' ) },
+ :g )
+ .say;
+
+}
diff --git a/challenge-328/luca-ferrari/raku/ch-2.raku b/challenge-328/luca-ferrari/raku/ch-2.raku
new file mode 100644
index 0000000000..971f04a4e8
--- /dev/null
+++ b/challenge-328/luca-ferrari/raku/ch-2.raku
@@ -0,0 +1,29 @@
+#!raku
+
+#
+# Perl Weekly Challenge 328
+# Task 2
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-328>
+#
+
+sub MAIN( Str $string is copy where { $string ~~ / ^ <[a..zA..Z]>+ $ / } ) {
+
+ my @chars = $string.lc.comb;
+ my @result;
+ my $index = 0;
+
+ while ( $index < @chars.elems ) {
+ @result.push: @chars[ $index ] and last if ( $index == @chars.elems - 1 );
+
+ if ( @chars[ $index ] ne @chars[ $index + 1 ] ) {
+ @result.push: @chars[ $index ];
+ $index++;
+ }
+ else {
+ $index += 2;
+ }
+ }
+
+ @result.join.say;
+}