diff options
| author | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2024-07-29 11:46:29 +0100 |
|---|---|---|
| committer | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2024-07-29 11:46:29 +0100 |
| commit | 7d6e5a9e7646e9254fdbaf7f3a3cac47c567f44f (patch) | |
| tree | ca8617a29d925b53219b818ada7534e89cb2786d | |
| parent | 5eca255ddb9d8edbf062392e471d92273e412d7d (diff) | |
| download | perlweeklychallenge-club-7d6e5a9e7646e9254fdbaf7f3a3cac47c567f44f.tar.gz perlweeklychallenge-club-7d6e5a9e7646e9254fdbaf7f3a3cac47c567f44f.tar.bz2 perlweeklychallenge-club-7d6e5a9e7646e9254fdbaf7f3a3cac47c567f44f.zip | |
- Added solutions by Eric Cheung.
- Added solutions by Thomas Kohler.
- Added solutions by PokGoPun.
- Added solutions by Mark Anderson.
- Added solutions by Feng Chang.
- Added solutions by E. Choroba.
36 files changed, 3519 insertions, 3113 deletions
diff --git a/challenge-277/luca-ferrari/pljava/pom.xml b/challenge-277/luca-ferrari/pljava/pom.xml index ab36c0045b..1ed95c5978 100644 --- a/challenge-277/luca-ferrari/pljava/pom.xml +++ b/challenge-277/luca-ferrari/pljava/pom.xml @@ -7,14 +7,14 @@ <groupId>PWC</groupId> <artifactId> - PWC276 + PWC277 </artifactId> <version> 1 </version> - <name>Perl Weekly Challenge 276 with package PWC276</name> - <description>Implementation of the tasks in PL/Java for PWC 276</description> + <name>Perl Weekly Challenge 277 with package PWC277</name> + <description>Implementation of the tasks in PL/Java for PWC 277</description> <properties> <project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding> diff --git a/challenge-277/luca-ferrari/pljava/src/main/java/Task1.java b/challenge-277/luca-ferrari/pljava/src/main/java/Task1.java new file mode 100644 index 0000000000..157decedd7 --- /dev/null +++ b/challenge-277/luca-ferrari/pljava/src/main/java/Task1.java @@ -0,0 +1,27 @@ +public static int task1_pljava( String[] words1, String[] words2 ) throws SQLException { + logger.log( Level.INFO, "Entering pwc277.task1_pljava" ); + + final Map<String, Integer[]> counting = new HashMap<String, Integer[]>(); + + Stream.of( words1 ).forEach( current -> { + Integer[] count = { 0, 0 }; + counting.putIfAbsent( current, count ); + count = counting.get( current ); + count[ 0 ]++; + counting.put( current, count ); + } ); + + + Stream.of( words2 ).forEach( current -> { + Integer[] count = { 0, 0 }; + counting.putIfAbsent( current, count ); + count = counting.get( current ); + count[ 1 ]++; + counting.put( current, count ); + } ); + + return (int) counting.entrySet().stream().filter( current -> { + Integer[] count = current.getValue(); + return count[ 0 ] == count[ 1 ] && count[ 0 ] == 1; + } ).count(); +} diff --git a/challenge-277/luca-ferrari/pljava/src/main/java/Task2.java b/challenge-277/luca-ferrari/pljava/src/main/java/Task2.java new file mode 100644 index 0000000000..87c0dde2d0 --- /dev/null +++ b/challenge-277/luca-ferrari/pljava/src/main/java/Task2.java @@ -0,0 +1,15 @@ +public static final int task2_pljava( int[] numbers ) throws SQLException { + logger.log( Level.INFO, "Entering pwc277.task2_pljava" ); + + final int[] c = new int[]{ 0 }; + IntStream.range( 0, numbers.length - 1 ) + .forEach( i -> { + c[ 0 ] += IntStream.range( i + 1, numbers.length ) + .filter( j -> { + return numbers[ i ] != numbers[ j ] + && Math.abs( numbers[ i ] - numbers[ j ] ) < Math.min( numbers[ i ], numbers[ j ] ); + } ).count(); + } ); + + return c[ 0 ]; +} diff --git a/challenge-277/luca-ferrari/plperl/ch-1.plperl b/challenge-277/luca-ferrari/plperl/ch-1.plperl new file mode 100644 index 0000000000..b3e94089f6 --- /dev/null +++ b/challenge-277/luca-ferrari/plperl/ch-1.plperl @@ -0,0 +1,28 @@ +CREATE OR REPLACE FUNCTION +pwc277.task1_plperl( text[], text[] ) +RETURNS int +AS $CODE$ + + my ( $left, $right ) = @_; + + my @single_left; + my @single_right; + + for my $word ( $left->@* ) { + push @single_left, $word if ( scalar( grep { $_ eq $word } $left->@* ) == 1 ); + } + + for my $word ( $right->@* ) { + push @single_right, $word if ( scalar( grep { $_ eq $word } $right->@* ) == 1 ); + } + + my $counter = 0; + for my $word ( @single_left ) { + $counter++ if ( grep { $_ eq $word } @single_right ); + } + + return $counter; + +$CODE$ +LANGUAGE plperl; + diff --git a/challenge-277/luca-ferrari/plperl/ch-2.plperl b/challenge-277/luca-ferrari/plperl/ch-2.plperl new file mode 100644 index 0000000000..b483cec8b0 --- /dev/null +++ b/challenge-277/luca-ferrari/plperl/ch-2.plperl @@ -0,0 +1,30 @@ +CREATE OR REPLACE FUNCTION +pwc277.task2_plperl( int[] ) +RETURNS int +AS $CODE$ + + my ( $nums ) = @_; + my @strong; + + my $abs = sub { + return $_[ 0 ] * - 1 if ( $_[ 0 ] < 0 ); + return $_[ 0 ]; + }; + + my $min = sub { + return $_[ 0 ] if ( $_[ 0 ] < $_[ 1 ] ); + return $_[ 1 ]; + }; + + for my $i ( 0 .. $nums->@* - 2 ) { + for my $j ( $i + 1 .. $nums->@* - 1 ) { + my ( $left, $right ) = ( $nums->@[ $i ], $nums->@[ $j ] ); + push @strong, [ $left, $right ] if ( $abs->( $left - $rigth ) > 0 && $abs->( $left - $right ) < $min->( $left, $right ) ); + } + } + + return scalar( @strong ); + +$CODE$ +LANGUAGE plperl; + diff --git a/challenge-277/luca-ferrari/plpgsql/ch-1.sql b/challenge-277/luca-ferrari/plpgsql/ch-1.sql new file mode 100644 index 0000000000..70bfb4aab7 --- /dev/null +++ b/challenge-277/luca-ferrari/plpgsql/ch-1.sql @@ -0,0 +1,25 @@ +CREATE OR REPLACE FUNCTION +pwc277.task1_plpgsql( words1 text[], words2 text[] ) +RETURNS int +AS $CODE$ + + WITH w1 AS ( + SELECT w::text + FROM unnest( words1 ) w + GROUP BY w + HAVING count(*) = 1 + ), + w2 AS ( + SELECT w::text + FROM unnest( words2 ) w + GROUP BY w + HAVING count(*) = 1 + ) + SELECT count( l.w ) + FROM w1 l, w2 r + WHERE l.w = r.w + +$CODE$ +LANGUAGE sql; + + diff --git a/challenge-277/luca-ferrari/plpgsql/ch-2.sql b/challenge-277/luca-ferrari/plpgsql/ch-2.sql new file mode 100644 index 0000000000..84f99da312 --- /dev/null +++ b/challenge-277/luca-ferrari/plpgsql/ch-2.sql @@ -0,0 +1,28 @@ +CREATE OR REPLACE FUNCTION +pwc277.task2_plpgsql( nums int[] ) +RETURNS int +AS $CODE$ +DECLARE + strong_counter int := 0; + current int := 0; +BEGIN + + FOR i IN 1 .. array_length( nums, 1 ) - 1 LOOP + FOR j in ( i + 1 ) .. array_length( nums, 1 ) LOOP + SELECT min( x ) + INTO current + FROM unnest( array[ nums[ i ], nums[ j ] ] ) x; + + IF current > abs( nums[ i ] - nums[ j ] ) AND nums[ i ] <> nums[ j ] THEN + strong_counter := strong_counter + 1; + END IF; + END LOOP; + END LOOP; + + RETURN strong_counter; + +END +$CODE$ +LANGUAGE plpgsql; + + diff --git a/challenge-277/luca-ferrari/python/ch-1.py b/challenge-277/luca-ferrari/python/ch-1.py new file mode 100644 index 0000000000..2634d9c077 --- /dev/null +++ b/challenge-277/luca-ferrari/python/ch-1.py @@ -0,0 +1,41 @@ +import sys + +# task implementation +# the return value will be printed +def task_1( args ): + words1 = [] + words2 = [] + first = True + for w in args: + if w == '|': + first = False + if first: + words1.append( w ) + else: + words2.append( w ) + + single1 = [] + single2 = [] + for w in words1: + if len( list( filter( lambda x: x == w, words1 ) ) ) == 1: + if not w in single1: + single1.append( w ) + + for w in words2: + if len( list( filter( lambda x: x == w, words2 ) ) ) == 1: + if not w in single2: + single2.append( w ) + + counting = 0 + for w in single1: + if w in single2: + counting += 1 + + return counting + + +# invoke the main without the command itself +if __name__ == '__main__': + print( task_1( sys.argv[ 1: ] ) ) + + diff --git a/challenge-277/luca-ferrari/python/ch-2.py b/challenge-277/luca-ferrari/python/ch-2.py new file mode 100644 index 0000000000..1b420ab4b7 --- /dev/null +++ b/challenge-277/luca-ferrari/python/ch-2.py @@ -0,0 +1,21 @@ +import sys + +# task implementation +# the return value will be printed +def task_2( args ): + nums = list( map( int, args ) ) + + strong = [] + + for i in range( 0, len( nums ) - 1 ): + for j in range( i + 1, len( nums ) ): + if nums[ i ] != nums[ j ] and abs( nums[ i ] - nums[ j ] ) < min( nums[ i ], nums[ j ] ): + strong.append( str( nums[ i ] ) + "<->" + str( nums[ j ] ) ) + + return len( strong ) + + +# invoke the main without the command itself +if __name__ == '__main__': + print( task_2( sys.argv[ 1: ] ) ) + diff --git a/challenge-277/luca-ferrari/raku/ch-1.raku b/challenge-277/luca-ferrari/raku/ch-1.raku new file mode 100644 index 0000000000..556e0a28bc --- /dev/null +++ b/challenge-277/luca-ferrari/raku/ch-1.raku @@ -0,0 +1,12 @@ +sub MAIN( :@left, :@right ) { + my %left-bag = Bag.new( @left ); + my %right-bag = Bag.new( @right ); + my @matches; + my @single-left = %left-bag.kv.grep( -> $k, $v { $v == 1 } ).map( *[ 0 ] ); + my @single-right = %right-bag.kv.grep( -> $k, $v { $v == 1 } ).map( *[ 0 ] ); + for @single-left -> $left { + @matches.push( $left ) if ( @single-right.grep( * ~~ $left ) ); + } + + @matches.elems.say; +} diff --git a/challenge-277/luca-ferrari/raku/ch-2.raku b/challenge-277/luca-ferrari/raku/ch-2.raku new file mode 100644 index 0000000000..14c303a342 --- /dev/null +++ b/challenge-277/luca-ferrari/raku/ch-2.raku @@ -0,0 +1,11 @@ +sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems } ) { + # A pair of integers x and y is called strong pair if it satisfies: 0 < |x - y| < min(x, y). + my @strong; + for 0 ..^ @nums.elems - 1 -> $i { + for $i ^..^ @nums.elems -> $j { + @strong.push: [ @nums[ $i ], @nums[ $j ] ] if ( 0 < abs( @nums[ $i ] - @nums[ $j ] ) < min( @nums[ $i ], @nums[ $j ] ) ); + } + } + + @strong.elems.say; +} diff --git a/challenge-280/eric-cheung/python/ch-1.py b/challenge-280/eric-cheung/python/ch-1.py new file mode 100755 index 0000000000..df33741859 --- /dev/null +++ b/challenge-280/eric-cheung/python/ch-1.py @@ -0,0 +1,19 @@ +
+## Ref.
+## https://leetcode.com/problems/first-letter-to-appear-twice/description/
+## https://medium.com/@ac.shreedhar/2351-first-letter-to-appear-twice-in-java-970f99e3f625
+## https://algo.monster/liteproblems/2351
+
+def GetFirstAppearTwice (strFunc):
+ arrResult = [strFunc[0]]
+ for nIndx in range(1, len(strFunc)):
+ if strFunc[nIndx] in arrResult:
+ return strFunc[nIndx]
+ arrResult.append(strFunc[nIndx])
+ return ""
+
+## strInput = "acbddbca" ## Example 1
+## strInput = "abccd" ## Example 2
+strInput = "abcdabbb" ## Example 3
+
+print (GetFirstAppearTwice (strInput))
diff --git a/challenge-280/eric-cheung/python/ch-2.py b/challenge-280/eric-cheung/python/ch-2.py new file mode 100755 index 0000000000..d7bbc31000 --- /dev/null +++ b/challenge-280/eric-cheung/python/ch-2.py @@ -0,0 +1,14 @@ +
+## Ref.
+## https://leetcode.ca/2022-07-26-2315-Count-Asterisks/
+
+## strInput = "p|*e*rl|w**e|*ekly|" ## Example 1
+## strInput = "perl" ## Example 2
+strInput = "th|ewe|e**|k|l***ych|alleng|e" ## Example 3
+
+if strInput.count("|") < 2:
+ print (strInput.count("*"))
+else:
+ arrSplit = strInput.split("|")
+ strResult = "".join([arrSplit[nIndx] for nIndx in range(len(arrSplit)) if nIndx % 2 == 0])
+ print (strResult.count("*"))
diff --git a/stats/pwc-challenge-279.json b/stats/pwc-challenge-279.json new file mode 100644 index 0000000000..5d224cade5 --- /dev/null +++ b/stats/pwc-challenge-279.json @@ -0,0 +1,627 @@ +{ + "xAxis" : { + "type" : "category" + }, + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + } + } + }, + "subtitle" : { + "text" : "[Champions: 33] Last updated at 2024-07-29 10:44:57 GMT" + }, + "legend" : { + "enabled" : 0 + }, + "chart" : { + "type" : "column" + }, + "series" : [ + { + "name" : "The Weekly Challenge - 279", + "data" : [ + { + "drilldown" : "Ali Moradi", + "y" : 5, + "name" : "Ali Moradi" + }, + { + "name" : "Andrew Schneider", + "y" : 3, + "drilldown" : "Andrew Schneider" + }, + { + "y" : 2, + "name" : "Andrezgz", + "drilldown" : "Andrezgz" + }, + { + "y" : 3, + "name" : "Arne Sommer", + "drilldown" : "Arne Sommer" + }, + { + "y" : 4, + "name" : "Athanasius", + "drilldown" : "Athanasius" + }, + { + "y" : 2, + "name" : "BarrOff", + "drilldown" : "BarrOff" + }, + { + "drilldown" : "Bob Lied", + "y" : 2, + "name" : "Bob Lied" + }, + { + "drilldown" : "Bruce Gray", + "y" : 2, + "name" : "Bruce Gray" + }, + { + "drilldown" : "David Ferrone", + "y" : 2, + "name" : "David Ferrone" + }, + { + "y" : 2, + "name" : "E. Choroba", + "drilldown" : "E. Choroba" + }, + { + "name" : "Feng Chang", + "y" : 2, + "drilldown" : "Feng Chang" + }, + { + "y" : 5, + "name" : "Jaldhar H. Vyas", + "drilldown" : "Jaldhar H. Vyas" + }, + { + "drilldown" : "Jan Krnavek", + "y" : 2, + "name" : "Jan Krnavek" + }, + { + "y" : 3, + "name" : "Jorg Sommrey", + "drilldown" : "Jorg Sommrey" + }, + { + "y" : 2, + "name" : "Kjetil Skotheim", + "drilldown" : "Kjetil Skotheim" + }, + { + "y" : 6, + "name" : "Laurent Rosenfeld", + "drilldown" : "Laurent Rosenfeld" + }, + { + "drilldown" : "Mark Anderson", + "y" : 2, + "name" : "Mark Anderson" + }, + { + "name" : "Matthew Neleigh", + "y" : 2, + "drilldown" : "Matthew Neleigh" + }, + { + "drilldown" : "Matthias Muth", + "name" : "Matthias Muth", + "y" : 3 + }, + { + "drilldown" : "Nelo Tovar", + "name" : "Nelo Tovar", + "y" : 2 + }, + { + "y" : 2, + "name" : "Niels van Dijke", + "drilldown" : "Niels van Dijke" + }, + { + "name" : "Packy Anderson", + "y" : 5, + "drilldown" : "Packy Anderson" + }, + { + "drilldown" : "Peter Campbell Smith", + "name" : "Peter Campbell Smith", + "y" : 3 + }, + { + "drilldown" : "Peter Meszaros", + "y" : 2, + "name" : "Peter Meszaros" + }, + { + "name" : "Reinier Maliepaard", + "y" : 3, + "drilldown" : "Reinier Maliepaard" + }, + { + "drilldown" : "Robbie Hatley", + "y" : 3, + "name" : "Robbie Hatley" + }, + { + "drilldown" : "Robert Ransbottom", + "name" : "Robert Ransbottom", + "y" : 2 + }, + { + "name" : "Roger Bell_West", + "y" : 5, + "drilldown" : "Roger Bell_West" + }, + { + "drilldown" : "Santiago Leyva", + "y" : 2, + "name" : "Santiago Leyva" + }, + { + "y" : 4, + "name" : "Thomas Kohler", + "drilldown" : "Thomas Kohler" + }, + { + "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "y" : 4 + }, + { + "name" : "W. Luis Mochan", + "y" : 3, + "drilldown" : "W. Luis Mochan" + }, + { + "drilldown" : "Wanderdoc", + "name" : "Wanderdoc", + "y" : 2 + } + ], + "colorByPoint" : 1 + } + ], + "title" : { + "text" : "The Weekly Challenge - 279" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "drilldown" : { + "series" : [ + { + "name" : "Ali Moradi", + "id" : "Ali Moradi", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "name" : "Andrew Schneider", + "id" : "Andrew Schneider", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Andrezgz", + "name" : "Andrezgz" + }, + { + "id" : "Arne Sommer", + "data" : [ + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Arne Sommer" + }, + { + "name" : "Athanasius", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ], + "id" : "Athanasius" + }, + { + "name" : "BarrOff", + "id" : "BarrOff", + "data" : [ + [ + "Raku", + 2 + ] + ] + }, + { + "name" : "Bob Lied", + "id" : "Bob Lied", + "data" : [ + [ + "Perl", + 2 + ] + ] + }, + { + "data" : [ + [ + "Raku", + 2 + ] + ], + "id" : "Bruce Gray", + "name" : "Bruce Gray" + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "David Ferrone", + "name" : "David Ferrone" + }, + { + "name" : "E. Choroba", + "id" : "E. Choroba", + "data" : [ + [ + "Perl", + 2 + ] + ] + }, + { + "name" : "Feng Chang", + "data" : [ + [ + "Raku", + 2 + ] + ], + "id" : "Feng Chang" + }, + { + "name" : "Jaldhar H. Vyas", + "id" : "Jaldhar H. Vyas", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "id" : "Jan Krnavek", + "data" : [ + [ + "Raku", + 2 + ] + ], + "name" : "Jan Krnavek" + }, + { + "name" : "Jorg Sommrey", + "id" : "Jorg Sommrey", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "name" : "Kjetil Skotheim", + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Kjetil Skotheim" + }, + { + "id" : "Laurent Rosenfeld", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 2 + ] + ], + "name" : "Laurent Rosenfeld" + }, + { + "data" : [ + [ + "Raku", + 2 + ] + ], + "id" : "Mark Anderson", + "name" : "Mark Anderson" + }, + { + "id" : "Matthew Neleigh", + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "Matthew Neleigh" + }, + { + "id" : "Matthias Muth", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Matthias Muth" + }, + { + "name" : "Nelo Tovar", + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Nelo Tovar" + }, + { + "name" : "Niels van Dijke", + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Niels van Dijke" + }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", |
