diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2024-01-22 08:54:32 +0100 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2024-01-22 13:21:10 +0100 |
| commit | 52e2018af75d08a9b77b8e3bb56a7b2fffc6f42b (patch) | |
| tree | 63b205906393dabcfbf3422ee6dc8ae48a3a61e7 /challenge-253/luca-ferrari/pljava/src/main/java/Task2.java | |
| parent | 9d7dc816f7775abfee7d90f0a2a969611902be54 (diff) | |
| download | perlweeklychallenge-club-52e2018af75d08a9b77b8e3bb56a7b2fffc6f42b.tar.gz perlweeklychallenge-club-52e2018af75d08a9b77b8e3bb56a7b2fffc6f42b.tar.bz2 perlweeklychallenge-club-52e2018af75d08a9b77b8e3bb56a7b2fffc6f42b.zip | |
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
Diffstat (limited to 'challenge-253/luca-ferrari/pljava/src/main/java/Task2.java')
| -rw-r--r-- | challenge-253/luca-ferrari/pljava/src/main/java/Task2.java | 75 |
1 files changed, 75 insertions, 0 deletions
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 <https://perlweeklychallenge.org/blog/perl-weekly-challenge-253> + * + * 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<Integer, List<Integer>> ones = new HashMap<Integer, List<Integer>>(); + + 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<Integer>() ); + + ones.get( number_of_ones ).add( row_index++ ); + number_of_ones = 0; + } + + + } + + List<Integer> keys = new LinkedList<Integer>( ones.keySet() ); + Collections.sort( keys ); + + List<Integer> result = new LinkedList<Integer>(); + for ( int k : keys ) { + List<Integer> values = ones.get( k ); + Collections.sort( values ); + result.addAll( values ); + } + + return result.toArray( new Integer[ result.size() ] ); + } +} |
