From 52e2018af75d08a9b77b8e3bb56a7b2fffc6f42b Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 22 Jan 2024 08:54:32 +0100 Subject: PWC 253 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 Task 1 PL/Java done Task 2 PL/Java done --- .../luca-ferrari/pljava/src/main/java/Task2.java | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 challenge-253/luca-ferrari/pljava/src/main/java/Task2.java (limited to 'challenge-253/luca-ferrari/pljava/src/main/java/Task2.java') diff --git a/challenge-253/luca-ferrari/pljava/src/main/java/Task2.java b/challenge-253/luca-ferrari/pljava/src/main/java/Task2.java new file mode 100644 index 0000000000..9afa1e555f --- /dev/null +++ b/challenge-253/luca-ferrari/pljava/src/main/java/Task2.java @@ -0,0 +1,75 @@ +package PWC253; + +/** + * PL/Java implementation for PWC 253 + * Task 2 + * See + * + * To install into PostgreSQL execute: + + select sqlj.install_jar( 'file:///tmp/PWC253.1.jar', 'PWC253', true ); + select sqlj.set_classpath( 'public', 'PWC253' ); + + select task$tn_pljava(); + +*/ + +import org.postgresql.pljava.*; +import org.postgresql.pljava.annotation.Function; +import static org.postgresql.pljava.annotation.Function.Effects.IMMUTABLE; +import static org.postgresql.pljava.annotation.Function.OnNullInput.RETURNS_NULL; + +import java.util.*; + +/* + example of invocation + + java=# select task2_pljava( 4 , array[ + [1, 0, 0, 0], + [1, 1, 1, 1], + [1, 0, 0, 0], + [1, 0, 0, 0] + ] ); + task2_pljava +-------------- + {0,2,3,1} +(1 row) + + +*/ +public class Task2 { + + @Function( onNullInput = RETURNS_NULL, effects = IMMUTABLE ) + public static final Integer[] task2_pljava( int size, int[] matrix ) throws Exception { + int row_index = 0; + Map> ones = new HashMap>(); + + int number_of_ones = 0; + + for ( int i = 0; i < matrix.length; i++ ) { + number_of_ones += matrix[ i ]; + if ( ( i + 1 ) % size == 0 || i == matrix.length ) { + + if ( ! ones.containsKey( number_of_ones ) ) + ones.put( number_of_ones, new LinkedList() ); + + ones.get( number_of_ones ).add( row_index++ ); + number_of_ones = 0; + } + + + } + + List keys = new LinkedList( ones.keySet() ); + Collections.sort( keys ); + + List result = new LinkedList(); + for ( int k : keys ) { + List values = ones.get( k ); + Collections.sort( values ); + result.addAll( values ); + } + + return result.toArray( new Integer[ result.size() ] ); + } +} -- cgit