From b91c8355370302f29a2380e43685737ff644b9f2 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 4 Apr 2022 10:21:30 +0200 Subject: Task 1 done in Pl/Perl --- challenge-159/luca-ferrari/postgresql/ch-1.plperl | 39 +++++++++++++++++++++++ challenge-159/luca-ferrari/postgresql/ch-1.sql | 1 + challenge-159/luca-ferrari/postgresql/ch-2.sql | 1 + 3 files changed, 41 insertions(+) create mode 100644 challenge-159/luca-ferrari/postgresql/ch-1.plperl create mode 100644 challenge-159/luca-ferrari/postgresql/ch-1.sql create mode 100644 challenge-159/luca-ferrari/postgresql/ch-2.sql diff --git a/challenge-159/luca-ferrari/postgresql/ch-1.plperl b/challenge-159/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..f14fe72613 --- /dev/null +++ b/challenge-159/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,39 @@ +CREATE SCHEMA IF NOT EXISTS pwc159; + +CREATE OR REPLACE FUNCTION +pwc159.farey( int ) +RETURNS SETOF text +AS $CODE$ + my ($n) = @_; + + my %farey; + + for my $denominator ( 2 .. $n ) { + for my $number ( 1 .. $denominator ) { + + # reduce things like 2/4 to 1/2 + ( $denominator, $number ) /= $number if ( $denominator % $number == 0 ); + ( $denominator, $number ) /= $denominator if ( $number % $denominator == 0 ); + + $farey{ $number/$denominator } = "$number/$denominator"; + } + } + + # bootstrap + return_next( '0/1' ); + + my %unique_counter; + for my $key ( sort keys( %farey ) ) { + # ensure only one item is printed out + $unique_counter{ $key }++; + next if $unique_counter{ $key } > 1; + next if $key == 1; # last term in the sequence + + return_next( $farey{ $key } ); + } + + # end term + return_next( '1/1' ); + return undef; +$CODE$ +LANGUAGE plperl; diff --git a/challenge-159/luca-ferrari/postgresql/ch-1.sql b/challenge-159/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..da8824c0c2 --- /dev/null +++ b/challenge-159/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1 @@ +-- Perl Weekly Challenge 159 diff --git a/challenge-159/luca-ferrari/postgresql/ch-2.sql b/challenge-159/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..da8824c0c2 --- /dev/null +++ b/challenge-159/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1 @@ +-- Perl Weekly Challenge 159 -- cgit